forked from fanruan/design
Browse Source
* commit '2d878197dc0df44876498b721935aad37a35b642': 代码修改 代码修改 REPORT-10535 设计器适配功能—移动端TAB组件多样化research/10.0
kerry
6 years ago
22 changed files with 1847 additions and 20 deletions
@ -0,0 +1,99 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.ui; |
||||||
|
|
||||||
|
import com.fr.base.GraphHelper; |
||||||
|
import com.fr.design.mainframe.widget.preview.MobileTemplatePreviewPane; |
||||||
|
import com.fr.form.ui.CardSwitchButton; |
||||||
|
import com.fr.form.ui.container.cardlayout.WCardTagLayout; |
||||||
|
import com.fr.general.FRFont; |
||||||
|
import com.fr.general.cardtag.mobile.DefaultMobileTemplateStyle; |
||||||
|
import com.fr.general.cardtag.mobile.MobileTemplateStyle; |
||||||
|
|
||||||
|
import java.awt.BasicStroke; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.FontMetrics; |
||||||
|
import java.awt.Graphics; |
||||||
|
import java.awt.Graphics2D; |
||||||
|
|
||||||
|
public class DefaultMobileStyleDefinePane extends MobileTemplateStyleDefinePane { |
||||||
|
|
||||||
|
public DefaultMobileStyleDefinePane(WCardTagLayout tagLayout) { |
||||||
|
super(tagLayout); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MobileTemplateStyle ob) { |
||||||
|
updatePreviewPane(); |
||||||
|
} |
||||||
|
|
||||||
|
protected void createConfigPane() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void initDefaultConfig() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public MobileTemplateStyle updateSubStyle() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public MobileTemplateStyle updateBean() { |
||||||
|
return new DefaultMobileTemplateStyle(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected MobileTemplateStyle getDefaultTemplateStyle() { |
||||||
|
return new DefaultMobileTemplateStyle(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
protected MobileTemplatePreviewPane createPreviewPane() { |
||||||
|
return new DefaultStylePreviewPane(); |
||||||
|
} |
||||||
|
|
||||||
|
public class DefaultStylePreviewPane extends MobileTemplatePreviewPane { |
||||||
|
|
||||||
|
public DefaultStylePreviewPane() { |
||||||
|
this.setBackground(DefaultMobileTemplateStyle.DEFAULT_INITIAL_COLOR); |
||||||
|
} |
||||||
|
|
||||||
|
public void repaint() { |
||||||
|
super.repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void paint(Graphics g) { |
||||||
|
super.paint(g); |
||||||
|
Dimension dimension = this.getSize(); |
||||||
|
int panelWidth = dimension.width; |
||||||
|
int panelHeight = dimension.height; |
||||||
|
Graphics2D g2d = (Graphics2D) g.create(); |
||||||
|
FRFont frFont = DefaultMobileTemplateStyle.DEFAULT_TAB_FONT.getFont(); |
||||||
|
FontMetrics fm = GraphHelper.getFontMetrics(frFont); |
||||||
|
WCardTagLayout cardTagLayout = DefaultMobileStyleDefinePane.this.getTagLayout(); |
||||||
|
int eachWidth = panelWidth / cardTagLayout.getWidgetCount(); |
||||||
|
g2d.setFont(frFont); |
||||||
|
int fontHeight = fm.getHeight(); |
||||||
|
int ascentHeight = fm.getAscent(); |
||||||
|
for (int i = 0; i < cardTagLayout.getWidgetCount(); i++) { |
||||||
|
CardSwitchButton cardSwitchButton = cardTagLayout.getSwitchButton(i); |
||||||
|
String widgetName = cardSwitchButton.getText(); |
||||||
|
int width = fm.stringWidth(widgetName); |
||||||
|
g2d.drawString(widgetName, (eachWidth - width) / 2, (panelHeight - fontHeight) / 2 + ascentHeight); |
||||||
|
if (i == 0) { |
||||||
|
g2d.setStroke(new BasicStroke(2.0f)); |
||||||
|
g2d.drawLine(0, panelHeight - 1, eachWidth, panelHeight - 1); |
||||||
|
} |
||||||
|
g2d.translate(eachWidth, 0); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,193 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.ui; |
||||||
|
|
||||||
|
import com.fr.base.GraphHelper; |
||||||
|
import com.fr.base.IconManager; |
||||||
|
import com.fr.design.constants.LayoutConstants; |
||||||
|
import com.fr.design.designer.IntervalConstants; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.mainframe.widget.UITitleSplitLine; |
||||||
|
import com.fr.design.mainframe.widget.preview.MobileTemplatePreviewPane; |
||||||
|
import com.fr.form.ui.CardSwitchButton; |
||||||
|
import com.fr.form.ui.container.cardlayout.WCardTagLayout; |
||||||
|
import com.fr.general.FRFont; |
||||||
|
import com.fr.general.cardtag.mobile.DownMenuStyle; |
||||||
|
import com.fr.general.cardtag.mobile.LineDescription; |
||||||
|
import com.fr.general.cardtag.mobile.MobileTemplateStyle; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
import java.awt.FontMetrics; |
||||||
|
import java.awt.Graphics; |
||||||
|
import java.awt.Graphics2D; |
||||||
|
import java.awt.Stroke; |
||||||
|
import java.util.ArrayList; |
||||||
|
|
||||||
|
public class DownMenuStyleDefinePane extends StyleDefinePaneWithSelectConf { |
||||||
|
private LinePane splitLinePane; |
||||||
|
private TabIconConfigPane initIconConfigPane; |
||||||
|
private TabIconConfigPane selectIconConfigPane; |
||||||
|
|
||||||
|
public DownMenuStyleDefinePane(WCardTagLayout tagLayout) { |
||||||
|
super(tagLayout); |
||||||
|
} |
||||||
|
|
||||||
|
protected void createExtraConfPane(JPanel centerPane) { |
||||||
|
JPanel panel = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 0); |
||||||
|
panel.setBorder(BorderFactory.createEmptyBorder(0, 20, 5, 20)); |
||||||
|
UITitleSplitLine iconSplitLine = new UITitleSplitLine(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Icon"), 520); |
||||||
|
iconSplitLine.setPreferredSize(new Dimension(520, 20)); |
||||||
|
centerPane.add(iconSplitLine); |
||||||
|
|
||||||
|
initIconConfigPane = new TabIconConfigPane(getTagLayout().getWidgetCount()); |
||||||
|
selectIconConfigPane = new TabIconConfigPane(getTagLayout().getWidgetCount()); |
||||||
|
|
||||||
|
UILabel initIconLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Initial_Icon")); |
||||||
|
UILabel selectIconLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Select_Icon")); |
||||||
|
initIconLabel.setPreferredSize(new Dimension(55, 20)); |
||||||
|
selectIconLabel.setPreferredSize(new Dimension(55, 20)); |
||||||
|
JPanel initIconContainPane = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{initIconLabel, initIconConfigPane}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||||
|
JPanel selectIconContainePane = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{selectIconLabel, selectIconConfigPane}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||||
|
initIconContainPane.setPreferredSize(new Dimension(240, 50)); |
||||||
|
selectIconContainePane.setPreferredSize(new Dimension(240, 50)); |
||||||
|
panel.add(initIconContainPane); |
||||||
|
panel.add(selectIconContainePane); |
||||||
|
UITitleSplitLine splitLine = new UITitleSplitLine(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Spit_Line"), 520); |
||||||
|
splitLine.setPreferredSize(new Dimension(520, 20)); |
||||||
|
splitLinePane = new LinePane(); |
||||||
|
splitLinePane.addLineChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
updatePreviewPane(); |
||||||
|
} |
||||||
|
}); |
||||||
|
centerPane.add(panel); |
||||||
|
centerPane.add(splitLine); |
||||||
|
centerPane.add(splitLinePane); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void initDefaultConfig() { |
||||||
|
this.initialColorBox.setSelectObject(DownMenuStyle.DEFAULT_INITIAL_COLOR); |
||||||
|
this.fontConfPane.populate(DownMenuStyle.DEFAULT_TAB_FONT.getFont()); |
||||||
|
this.selectColorBox.setSelectObject(DownMenuStyle.DEFAULT_SELECT_COLOR); |
||||||
|
this.selectFontColor.setColor(DownMenuStyle.DEFAULT_SELECT_FONT_COLOR); |
||||||
|
this.splitLinePane.populate(DownMenuStyle.DEFAULT_SPLIT_LINE); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected MobileTemplatePreviewPane createPreviewPane() { |
||||||
|
return new DownMenuStylePreviewPane(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MobileTemplateStyle ob) { |
||||||
|
super.populateBean(ob); |
||||||
|
DownMenuStyle downMenuStyle = (DownMenuStyle) ob; |
||||||
|
splitLinePane.populate(downMenuStyle.getSplitLine()); |
||||||
|
ArrayList<String> initialIconNames = new ArrayList<String>(); |
||||||
|
ArrayList<String> selectIconNames = new ArrayList<String>(); |
||||||
|
for (int i = 0; i < getTagLayout().getWidgetCount(); i++) { |
||||||
|
CardSwitchButton cardSwitchButton = (CardSwitchButton) getTagLayout().getWidget(i); |
||||||
|
initialIconNames.add(cardSwitchButton.getInitIconName()); |
||||||
|
selectIconNames.add(cardSwitchButton.getSelectIconName()); |
||||||
|
} |
||||||
|
initIconConfigPane.populate(initialIconNames); |
||||||
|
selectIconConfigPane.populate(selectIconNames); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected MobileTemplateStyle getDefaultTemplateStyle() { |
||||||
|
return new DownMenuStyle(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public MobileTemplateStyle updateStyleWithSelectConf() { |
||||||
|
DownMenuStyle downMenuStyle = new DownMenuStyle(); |
||||||
|
downMenuStyle.setSplitLine(splitLinePane.update()); |
||||||
|
ArrayList<String> initialIconNames = initIconConfigPane.update(); |
||||||
|
ArrayList<String> selectIconNames = selectIconConfigPane.update(); |
||||||
|
for (int i = 0; i < getTagLayout().getWidgetCount(); i++) { |
||||||
|
CardSwitchButton cardSwitchButton = (CardSwitchButton) getTagLayout().getWidget(i); |
||||||
|
cardSwitchButton.setInitIconName(initialIconNames.get(i)); |
||||||
|
cardSwitchButton.setSelectIconName(selectIconNames.get(i)); |
||||||
|
} |
||||||
|
return downMenuStyle; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public class DownMenuStylePreviewPane extends MobileTemplatePreviewPane { |
||||||
|
private static final int ICON_OFFSET = 16; |
||||||
|
private static final int GAP = 6; |
||||||
|
private static final String PAINT_ICON = "fund_white"; |
||||||
|
private LineDescription splitLine; |
||||||
|
|
||||||
|
public DownMenuStylePreviewPane() { |
||||||
|
this.setBackground(Color.decode("#3888EE")); |
||||||
|
} |
||||||
|
|
||||||
|
public void repaint() { |
||||||
|
super.repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void paint(Graphics g) { |
||||||
|
super.paint(g); |
||||||
|
Color selectFontColor = this.getTabFontConfig().getSelectColor(); |
||||||
|
Dimension dimension = this.getSize(); |
||||||
|
int panelWidth = dimension.width; |
||||||
|
int panelHeight = dimension.height; |
||||||
|
Graphics2D g2d = (Graphics2D) g.create(); |
||||||
|
FRFont frFont = this.getTabFontConfig().getFont(); |
||||||
|
FontMetrics fm = GraphHelper.getFontMetrics(frFont); |
||||||
|
WCardTagLayout cardTagLayout = DownMenuStyleDefinePane.this.getTagLayout(); |
||||||
|
int eachWidth = panelWidth / cardTagLayout.getWidgetCount(); |
||||||
|
g2d.setFont(frFont); |
||||||
|
int fontHeight = fm.getHeight(); |
||||||
|
int ascent = fm.getAscent(); |
||||||
|
for (int i = 0; i < cardTagLayout.getWidgetCount(); i++) { |
||||||
|
|
||||||
|
g2d.setColor(i == 0 ? selectFontColor : frFont.getForeground()); |
||||||
|
CardSwitchButton cardSwitchButton = cardTagLayout.getSwitchButton(i); |
||||||
|
String widgetName = cardSwitchButton.getText(); |
||||||
|
int width = fm.stringWidth(widgetName); |
||||||
|
if(i == 0){ |
||||||
|
Color oldColor = g2d.getColor(); |
||||||
|
g2d.setColor(this.getSelectColor()); |
||||||
|
g2d.fillRect(0, 0 ,eachWidth, panelHeight); |
||||||
|
g2d.setColor(oldColor); |
||||||
|
} |
||||||
|
String iconName = PAINT_ICON; |
||||||
|
g2d.drawImage(IconManager.getIconManager().getIconImage(iconName), (eachWidth - ICON_OFFSET) / 2, (panelHeight - ICON_OFFSET - GAP - fontHeight) / 2, null); |
||||||
|
g2d.drawString(widgetName, (eachWidth - width) / 2, (panelHeight + ICON_OFFSET + GAP - fontHeight) / 2 + ascent); |
||||||
|
Stroke oldStroke = g2d.getStroke(); |
||||||
|
if (splitLine.getLineStyle() != 0) { |
||||||
|
g2d.setColor(splitLine.getColor()); |
||||||
|
g2d.setStroke(GraphHelper.getStroke(splitLine.getLineStyle())); |
||||||
|
g2d.drawLine(eachWidth, 0, eachWidth, panelHeight); |
||||||
|
} |
||||||
|
g2d.setStroke(oldStroke); |
||||||
|
g2d.translate(eachWidth, 0); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public void populateConfig(MobileTemplateStyle templateStyle) { |
||||||
|
super.populateConfig(templateStyle); |
||||||
|
this.splitLine = ((DownMenuStyle) templateStyle).getSplitLine(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,108 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.ui; |
||||||
|
|
||||||
|
import com.fr.design.constants.LayoutConstants; |
||||||
|
import com.fr.design.designer.IntervalConstants; |
||||||
|
import com.fr.design.gui.icombobox.LineComboBox; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.layout.VerticalFlowLayout; |
||||||
|
import com.fr.design.style.color.NewColorSelectBox; |
||||||
|
import com.fr.general.cardtag.mobile.LineDescription; |
||||||
|
import com.fr.stable.CoreConstants; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import javax.swing.event.EventListenerList; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
import java.awt.event.ItemEvent; |
||||||
|
import java.awt.event.ItemListener; |
||||||
|
|
||||||
|
public class LinePane extends JPanel { |
||||||
|
private LineComboBox lineStyle; |
||||||
|
private NewColorSelectBox lineColor; |
||||||
|
private EventListenerList lineChangeListener = new EventListenerList(); |
||||||
|
|
||||||
|
public LinePane() { |
||||||
|
init(); |
||||||
|
} |
||||||
|
|
||||||
|
private void init() { |
||||||
|
this.setLayout(new VerticalFlowLayout(FlowLayout.CENTER, 0, 10)); |
||||||
|
this.setBorder(BorderFactory.createEmptyBorder(0, 20, 5, 20)); |
||||||
|
UILabel lineLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_FRFont_Line_Style")); |
||||||
|
UILabel colorLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Colors")); |
||||||
|
lineLabel.setPreferredSize(new Dimension(55, 20)); |
||||||
|
colorLabel.setPreferredSize(new Dimension(55, 20)); |
||||||
|
|
||||||
|
lineStyle = new LineComboBox(CoreConstants.UNDERLINE_STYLE_ARRAY); |
||||||
|
lineStyle.setPreferredSize(new Dimension(152, 20)); |
||||||
|
lineColor = new NewColorSelectBox(137); |
||||||
|
lineStyle.addItemListener(new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
fireLineStateChanged(); |
||||||
|
} |
||||||
|
}); |
||||||
|
lineColor.addSelectChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
fireLineStateChanged(); |
||||||
|
} |
||||||
|
}); |
||||||
|
this.add(TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{lineLabel, lineStyle}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM)); |
||||||
|
this.add(TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{colorLabel, lineColor}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM)); |
||||||
|
} |
||||||
|
|
||||||
|
public LineDescription update() { |
||||||
|
LineDescription lineDescription = new LineDescription(); |
||||||
|
lineDescription.setColor(lineColor.getSelectObject()); |
||||||
|
lineDescription.setLineStyle(lineStyle.getSelectedLineStyle()); |
||||||
|
return lineDescription; |
||||||
|
} |
||||||
|
|
||||||
|
public void populate(LineDescription lineDescription) { |
||||||
|
lineStyle.setSelectedLineStyle(lineDescription.getLineStyle()); |
||||||
|
lineColor.setSelectObject(lineDescription.getColor()); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 添加监听 |
||||||
|
* |
||||||
|
* @param changeListener 监听列表 |
||||||
|
*/ |
||||||
|
public void addLineChangeListener(ChangeListener changeListener) { |
||||||
|
lineChangeListener.add(ChangeListener.class, changeListener); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 移除监听 |
||||||
|
* Removes an old ColorChangeListener. |
||||||
|
* |
||||||
|
* @param changeListener 监听列表 |
||||||
|
*/ |
||||||
|
public void removeLineChangeListener(ChangeListener changeListener) { |
||||||
|
lineChangeListener.remove(ChangeListener.class, changeListener); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 颜色状态改变 |
||||||
|
*/ |
||||||
|
public void fireLineStateChanged() { |
||||||
|
Object[] listeners = lineChangeListener.getListenerList(); |
||||||
|
ChangeEvent e = null; |
||||||
|
|
||||||
|
for (int i = listeners.length - 2; i >= 0; i -= 2) { |
||||||
|
if (listeners[i] == ChangeListener.class) { |
||||||
|
if (e == null) { |
||||||
|
e = new ChangeEvent(this); |
||||||
|
} |
||||||
|
((ChangeListener) listeners[i + 1]).stateChanged(e); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,218 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.ui; |
||||||
|
|
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.constants.LayoutConstants; |
||||||
|
import com.fr.design.designer.IntervalConstants; |
||||||
|
import com.fr.design.dialog.AttrScrollPane; |
||||||
|
import com.fr.design.dialog.BasicScrollPane; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBox; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.mainframe.widget.MobileTabFontConfPane; |
||||||
|
import com.fr.design.mainframe.widget.UITitleSplitLine; |
||||||
|
import com.fr.design.mainframe.widget.preview.MobileTemplatePreviewPane; |
||||||
|
import com.fr.design.style.color.NewColorSelectBox; |
||||||
|
import com.fr.design.utils.gui.GUICoreUtils; |
||||||
|
import com.fr.form.ui.container.cardlayout.WCardTagLayout; |
||||||
|
import com.fr.general.FRFont; |
||||||
|
import com.fr.general.cardtag.mobile.MobileTemplateStyle; |
||||||
|
import com.fr.general.cardtag.mobile.TabFontConfig; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.border.TitledBorder; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
import java.awt.Font; |
||||||
|
import java.awt.event.ItemEvent; |
||||||
|
import java.awt.event.ItemListener; |
||||||
|
|
||||||
|
public abstract class MobileTemplateStyleDefinePane extends BasicBeanPane<MobileTemplateStyle> { |
||||||
|
private static final String[] TAB_STYLES = new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Default"), |
||||||
|
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Engine_Custom")}; |
||||||
|
private UIComboBox custom; |
||||||
|
protected NewColorSelectBox initialColorBox; |
||||||
|
protected MobileTabFontConfPane fontConfPane; |
||||||
|
private JPanel centerPane; |
||||||
|
protected MobileTemplatePreviewPane previewPane; |
||||||
|
private WCardTagLayout tagLayout; |
||||||
|
|
||||||
|
|
||||||
|
public MobileTemplatePreviewPane getPreviewPane() { |
||||||
|
return previewPane; |
||||||
|
} |
||||||
|
|
||||||
|
public MobileTemplateStyleDefinePane(WCardTagLayout tagLayout) { |
||||||
|
this.tagLayout = tagLayout; |
||||||
|
init(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public WCardTagLayout getTagLayout() { |
||||||
|
return tagLayout; |
||||||
|
} |
||||||
|
|
||||||
|
protected void init() { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
previewPane = createPreviewPane(); |
||||||
|
previewPane.setPreferredSize(new Dimension(500, 60)); |
||||||
|
JPanel northPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
TitledBorder titledBorder = GUICoreUtils.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview"), null); |
||||||
|
titledBorder.setTitleFont(FRFont.getInstance("PingFangSC-Regular", Font.PLAIN, 9, Color.BLUE)); |
||||||
|
northPane.setBorder(titledBorder); |
||||||
|
northPane.setPreferredSize(new Dimension(500, 83)); |
||||||
|
northPane.add(previewPane, BorderLayout.CENTER); |
||||||
|
this.add(northPane, BorderLayout.NORTH); |
||||||
|
createConfigPane(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
protected void createConfigPane() { |
||||||
|
JPanel configPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
TitledBorder titledBorder = GUICoreUtils.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Set"), null); |
||||||
|
titledBorder.setTitleFont(FRFont.getInstance("PingFangSC-Regular", Font.PLAIN, 9, Color.BLUE)); |
||||||
|
configPane.setBorder(titledBorder); |
||||||
|
centerPane = createCenterPane(); |
||||||
|
custom = new UIComboBox(TAB_STYLES); |
||||||
|
custom.addItemListener(new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
boolean isCustom = custom.getSelectedIndex() == 1; |
||||||
|
centerPane.setVisible(isCustom); |
||||||
|
updatePreviewPane(); |
||||||
|
} |
||||||
|
}); |
||||||
|
centerPane.setVisible(false); |
||||||
|
custom.setPreferredSize(new Dimension(157, 20)); |
||||||
|
final JPanel scrollPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
BasicScrollPane basicScrollPane = new AttrScrollPane() { |
||||||
|
@Override |
||||||
|
protected JPanel createContentPane() { |
||||||
|
return scrollPanel; |
||||||
|
} |
||||||
|
}; |
||||||
|
configPane.add(basicScrollPane, BorderLayout.CENTER); |
||||||
|
this.add(configPane, BorderLayout.CENTER); |
||||||
|
|
||||||
|
JPanel outPanel = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); |
||||||
|
outPanel.setBorder(BorderFactory.createEmptyBorder(10, 20, 5, 20)); |
||||||
|
UILabel tabStyleLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Tab_Style")); |
||||||
|
tabStyleLabel.setPreferredSize(new Dimension(55, 20)); |
||||||
|
JPanel jPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{tabStyleLabel, custom}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||||
|
jPanel.setPreferredSize(new Dimension(200, 20)); |
||||||
|
outPanel.add(jPanel); |
||||||
|
scrollPanel.add(outPanel, BorderLayout.NORTH); |
||||||
|
|
||||||
|
UITitleSplitLine backgroundSplit = new UITitleSplitLine(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Background"), 520); |
||||||
|
backgroundSplit.setPreferredSize(new Dimension(520, 20)); |
||||||
|
centerPane.add(backgroundSplit); |
||||||
|
|
||||||
|
centerPane.add(createBackgroundConfPane()); |
||||||
|
|
||||||
|
UITitleSplitLine fontSplit = new UITitleSplitLine(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Tab_Char"), 520); |
||||||
|
fontSplit.setPreferredSize(new Dimension(520, 20)); |
||||||
|
centerPane.add(fontSplit); |
||||||
|
|
||||||
|
centerPane.add(createFontConfPane()); |
||||||
|
|
||||||
|
createExtraConfPane(centerPane); |
||||||
|
|
||||||
|
scrollPanel.add(centerPane, BorderLayout.CENTER); |
||||||
|
initDefaultConfig(); |
||||||
|
} |
||||||
|
|
||||||
|
protected JPanel createCenterPane() { |
||||||
|
JPanel panel = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 10); |
||||||
|
return panel; |
||||||
|
} |
||||||
|
|
||||||
|
protected JPanel createBackgroundConfPane() { |
||||||
|
initialColorBox = new NewColorSelectBox(137); |
||||||
|
initialColorBox.addSelectChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
updatePreviewPane(); |
||||||
|
} |
||||||
|
}); |
||||||
|
UILabel fillLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Fill")); |
||||||
|
fillLabel.setPreferredSize(new Dimension(55, 20)); |
||||||
|
|
||||||
|
JPanel jPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{fillLabel, initialColorBox}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||||
|
jPanel.setPreferredSize(new Dimension(240, 20)); |
||||||
|
initialColorBox.setPreferredSize(new Dimension(157, 20)); |
||||||
|
jPanel.setBorder(BorderFactory.createEmptyBorder(0, 20, 5, 20)); |
||||||
|
return jPanel; |
||||||
|
} |
||||||
|
|
||||||
|
protected JPanel createFontConfPane() { |
||||||
|
fontConfPane = new MobileTabFontConfPane(); |
||||||
|
fontConfPane.addFontChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
updatePreviewPane(); |
||||||
|
} |
||||||
|
}); |
||||||
|
UILabel initCharLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Tab_Init_Char")); |
||||||
|
initCharLabel.setPreferredSize(new Dimension(55, 20)); |
||||||
|
JPanel jPanel3 = GUICoreUtils.createBoxFlowInnerContainerPane(5, 0); |
||||||
|
jPanel3.add(initCharLabel); |
||||||
|
jPanel3.add(fontConfPane); |
||||||
|
jPanel3.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 20)); |
||||||
|
return jPanel3; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
protected void createExtraConfPane(JPanel centerPane) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
protected abstract void initDefaultConfig(); |
||||||
|
|
||||||
|
protected abstract MobileTemplatePreviewPane createPreviewPane(); |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MobileTemplateStyle ob) { |
||||||
|
centerPane.setVisible(ob.isCustom()); |
||||||
|
custom.setSelectedItem(!ob.isCustom() ? com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Default") : |
||||||
|
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Engine_Custom")); |
||||||
|
initialColorBox.setSelectObject(ob.getInitialColor()); |
||||||
|
fontConfPane.populate(ob.getTabFontConfig().getFont()); |
||||||
|
updatePreviewPane(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public MobileTemplateStyle updateBean() { |
||||||
|
if (custom.getSelectedIndex() == 0) { |
||||||
|
return getDefaultTemplateStyle(); |
||||||
|
} |
||||||
|
MobileTemplateStyle ob = updateSubStyle(); |
||||||
|
ob.setCustom(custom.getSelectedIndex() == 1); |
||||||
|
ob.setInitialColor(initialColorBox.getSelectObject()); |
||||||
|
TabFontConfig config = ob.getTabFontConfig(); |
||||||
|
config.setFont(fontConfPane.update()); |
||||||
|
return ob; |
||||||
|
} |
||||||
|
|
||||||
|
protected abstract MobileTemplateStyle getDefaultTemplateStyle(); |
||||||
|
|
||||||
|
public void updatePreviewPane() { |
||||||
|
previewPane.populateConfig(updateBean()); |
||||||
|
previewPane.setBackground(previewPane.getInitialColor()); |
||||||
|
previewPane.repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
public abstract MobileTemplateStyle updateSubStyle(); |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,165 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.ui; |
||||||
|
|
||||||
|
import com.fr.base.GraphHelper; |
||||||
|
import com.fr.design.constants.LayoutConstants; |
||||||
|
import com.fr.design.designer.IntervalConstants; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.mainframe.widget.UITitleSplitLine; |
||||||
|
import com.fr.design.mainframe.widget.preview.MobileTemplatePreviewPane; |
||||||
|
import com.fr.design.style.color.NewColorSelectBox; |
||||||
|
import com.fr.form.ui.container.cardlayout.WCardTagLayout; |
||||||
|
import com.fr.general.FRFont; |
||||||
|
import com.fr.general.cardtag.mobile.MobileTemplateStyle; |
||||||
|
import com.fr.general.cardtag.mobile.SliderStyle; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
import java.awt.FontMetrics; |
||||||
|
import java.awt.Graphics; |
||||||
|
import java.awt.Graphics2D; |
||||||
|
|
||||||
|
public class SliderStyleDefinePane extends MobileTemplateStyleDefinePane { |
||||||
|
private NewColorSelectBox initDotColor; |
||||||
|
private NewColorSelectBox selectDotColor; |
||||||
|
|
||||||
|
|
||||||
|
public SliderStyleDefinePane(WCardTagLayout tagLayout) { |
||||||
|
super(tagLayout); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MobileTemplateStyle ob) { |
||||||
|
super.populateBean(ob); |
||||||
|
SliderStyle sliderStyle = (SliderStyle) ob; |
||||||
|
initDotColor.setSelectObject(sliderStyle.getInitDotColor()); |
||||||
|
selectDotColor.setSelectObject(sliderStyle.getSelectDotColor()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected MobileTemplateStyle getDefaultTemplateStyle() { |
||||||
|
return new SliderStyle(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public MobileTemplateStyle updateSubStyle() { |
||||||
|
SliderStyle sliderStyle = new SliderStyle(); |
||||||
|
sliderStyle.setInitDotColor(initDotColor.getSelectObject()); |
||||||
|
sliderStyle.setSelectDotColor(selectDotColor.getSelectObject()); |
||||||
|
return sliderStyle; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
protected void createExtraConfPane(JPanel centerPane) { |
||||||
|
JPanel panel = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 10); |
||||||
|
panel.setBorder(BorderFactory.createEmptyBorder(0, 20, 5, 20)); |
||||||
|
UITitleSplitLine dotIndicator = new UITitleSplitLine(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Slider_Dot_Indicator"), 520); |
||||||
|
dotIndicator.setPreferredSize(new Dimension(520, 20)); |
||||||
|
centerPane.add(dotIndicator); |
||||||
|
initDotColor = new NewColorSelectBox(137); |
||||||
|
initDotColor.addSelectChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
updatePreviewPane(); |
||||||
|
} |
||||||
|
}); |
||||||
|
selectDotColor = new NewColorSelectBox(137); |
||||||
|
selectDotColor.addSelectChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
updatePreviewPane(); |
||||||
|
} |
||||||
|
}); |
||||||
|
UILabel initColor = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Init_Fill")); |
||||||
|
|
||||||
|
UILabel selectColor = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Select_Fill")); |
||||||
|
initColor.setPreferredSize(new Dimension(55, 20)); |
||||||
|
selectColor.setPreferredSize(new Dimension(55, 20)); |
||||||
|
JPanel initDotColorPane = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{initColor, initDotColor}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||||
|
JPanel selectDotColorPane = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{selectColor, selectDotColor}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||||
|
initDotColorPane.setPreferredSize(new Dimension(240, 20)); |
||||||
|
selectDotColorPane.setPreferredSize(new Dimension(240, 20)); |
||||||
|
panel.add(initDotColorPane); |
||||||
|
panel.add(selectDotColorPane); |
||||||
|
centerPane.add(panel); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void initDefaultConfig() { |
||||||
|
this.initialColorBox.setSelectObject(SliderStyle.DEFAULT_INITIAL_COLOR); |
||||||
|
this.fontConfPane.populate(SliderStyle.DEFAULT_TAB_FONT.getFont()); |
||||||
|
initDotColor.setSelectObject(SliderStyle.DEFAULT_INITIAL_DOT_COLOR); |
||||||
|
selectDotColor.setSelectObject(SliderStyle.DEFAULT_SELECT_DOT_COLOR); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected MobileTemplatePreviewPane createPreviewPane() { |
||||||
|
return new SliderStylePreviewPane(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public class SliderStylePreviewPane extends MobileTemplatePreviewPane { |
||||||
|
private static final int CIRCLE_SIZE = 6; |
||||||
|
private static final int GAP = 4; |
||||||
|
private static final int OFFSET_X = 10; |
||||||
|
private Color initDotColor; |
||||||
|
private Color selectDotColor; |
||||||
|
|
||||||
|
public SliderStylePreviewPane() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public void repaint() { |
||||||
|
super.repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void paint(Graphics g) { |
||||||
|
super.paint(g); |
||||||
|
Dimension dimension = this.getSize(); |
||||||
|
int panelHeight = dimension.height; |
||||||
|
Graphics2D g2d = (Graphics2D) g.create(); |
||||||
|
FRFont frFont = this.getTabFontConfig().getFont(); |
||||||
|
g2d.setFont(frFont); |
||||||
|
g2d.setColor(frFont.getForeground()); |
||||||
|
FontMetrics fm = GraphHelper.getFontMetrics(frFont); |
||||||
|
int fontHeight = fm.getHeight(); |
||||||
|
int ascent = fm.getAscent(); |
||||||
|
g2d.drawString(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Slider_Title"), OFFSET_X, (panelHeight - fontHeight - GAP - CIRCLE_SIZE) / 2 + ascent); |
||||||
|
WCardTagLayout cardTagLayout = SliderStyleDefinePane.this.getTagLayout(); |
||||||
|
g2d.translate(OFFSET_X, (panelHeight + fontHeight + GAP - CIRCLE_SIZE) / 2); |
||||||
|
for (int i = 0; i < cardTagLayout.getWidgetCount(); i++) { |
||||||
|
if (i == 0) { |
||||||
|
g2d.setColor(selectDotColor); |
||||||
|
g2d.fillOval(0, 0, CIRCLE_SIZE, CIRCLE_SIZE); |
||||||
|
g2d.translate(CIRCLE_SIZE + GAP, 0); |
||||||
|
continue; |
||||||
|
} |
||||||
|
g2d.setColor(initDotColor); |
||||||
|
g2d.fillOval(0, 0, CIRCLE_SIZE, CIRCLE_SIZE); |
||||||
|
g2d.translate(CIRCLE_SIZE + GAP, 0); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public void populateConfig(MobileTemplateStyle templateStyle) { |
||||||
|
super.populateConfig(templateStyle); |
||||||
|
this.initDotColor = ((SliderStyle) templateStyle).getInitDotColor(); |
||||||
|
this.selectDotColor = ((SliderStyle) templateStyle).getSelectDotColor(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,113 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.ui; |
||||||
|
|
||||||
|
import com.fr.design.constants.LayoutConstants; |
||||||
|
import com.fr.design.designer.IntervalConstants; |
||||||
|
import com.fr.design.gui.ibutton.UIColorButton; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.mainframe.widget.MobileTabFontConfPane; |
||||||
|
import com.fr.design.style.color.NewColorSelectBox; |
||||||
|
import com.fr.form.ui.container.cardlayout.WCardTagLayout; |
||||||
|
import com.fr.general.cardtag.mobile.MobileTemplateStyle; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
|
||||||
|
public abstract class StyleDefinePaneWithSelectConf extends MobileTemplateStyleDefinePane { |
||||||
|
|
||||||
|
protected NewColorSelectBox selectColorBox; |
||||||
|
protected UIColorButton selectFontColor; |
||||||
|
|
||||||
|
public StyleDefinePaneWithSelectConf(WCardTagLayout tagLayout) { |
||||||
|
super(tagLayout); |
||||||
|
} |
||||||
|
|
||||||
|
protected JPanel createBackgroundConfPane() { |
||||||
|
JPanel panel = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 10); |
||||||
|
panel.setBorder(BorderFactory.createEmptyBorder(0, 20, 5, 20)); |
||||||
|
initialColorBox = new NewColorSelectBox(137); |
||||||
|
initialColorBox.addSelectChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
updatePreviewPane(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
selectColorBox = new NewColorSelectBox(137); |
||||||
|
selectColorBox.addSelectChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
updatePreviewPane(); |
||||||
|
} |
||||||
|
}); |
||||||
|
UILabel initFillLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Init_Fill")); |
||||||
|
UILabel selectFillLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Select_Fill")); |
||||||
|
initFillLabel.setPreferredSize(new Dimension(55, 20)); |
||||||
|
selectFillLabel.setPreferredSize(new Dimension(55, 20)); |
||||||
|
JPanel jPanel2 = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{initFillLabel, initialColorBox}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||||
|
JPanel jPanel3 = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{selectFillLabel, selectColorBox}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||||
|
jPanel2.setPreferredSize(new Dimension(240, 20)); |
||||||
|
jPanel3.setPreferredSize(new Dimension(240, 20)); |
||||||
|
panel.add(jPanel2); |
||||||
|
panel.add(jPanel3); |
||||||
|
return panel; |
||||||
|
} |
||||||
|
|
||||||
|
protected JPanel createFontConfPane() { |
||||||
|
JPanel panel = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 10); |
||||||
|
panel.setBorder(BorderFactory.createEmptyBorder(0, 20, 5, 20)); |
||||||
|
fontConfPane = new MobileTabFontConfPane(); |
||||||
|
fontConfPane.addFontChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
updatePreviewPane(); |
||||||
|
} |
||||||
|
}); |
||||||
|
selectFontColor = new UIColorButton(); |
||||||
|
selectFontColor.addColorChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
|
||||||
|
updatePreviewPane(); |
||||||
|
} |
||||||
|
}); |
||||||
|
UILabel initCharLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Tab_Init_Char")); |
||||||
|
initCharLabel.setPreferredSize(new Dimension(55, 20)); |
||||||
|
JPanel jPanel3 = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{initCharLabel, fontConfPane}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||||
|
jPanel3.setPreferredSize(new Dimension(500, 20)); |
||||||
|
|
||||||
|
UILabel selectCharLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Tab_Select_Char")); |
||||||
|
selectCharLabel.setPreferredSize(new Dimension(55, 20)); |
||||||
|
selectFontColor.setPreferredSize(new Dimension(20, 20)); |
||||||
|
JPanel jPanel4 = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{selectCharLabel, selectFontColor}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||||
|
JPanel jPanel5 = FRGUIPaneFactory.createLeftFlowZeroGapBorderPane(); |
||||||
|
jPanel5.setPreferredSize(new Dimension(500, 20)); |
||||||
|
jPanel5.add(jPanel4); |
||||||
|
panel.add(jPanel3); |
||||||
|
panel.add(jPanel5); |
||||||
|
return panel; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public MobileTemplateStyle updateSubStyle() { |
||||||
|
MobileTemplateStyle mobileTemplateStyle = updateStyleWithSelectConf(); |
||||||
|
mobileTemplateStyle.setSelectColor(selectColorBox.getSelectObject()); |
||||||
|
mobileTemplateStyle.getTabFontConfig().setSelectColor(selectFontColor.getColor()); |
||||||
|
return mobileTemplateStyle; |
||||||
|
} |
||||||
|
|
||||||
|
protected abstract MobileTemplateStyle updateStyleWithSelectConf(); |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MobileTemplateStyle mobileTemplateStyle) { |
||||||
|
super.populateBean(mobileTemplateStyle); |
||||||
|
selectColorBox.setSelectObject(mobileTemplateStyle.getSelectColor()); |
||||||
|
selectFontColor.setColor(mobileTemplateStyle.getTabFontConfig().getSelectColor()); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,172 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.ui; |
||||||
|
|
||||||
|
import com.fr.base.GraphHelper; |
||||||
|
import com.fr.base.IconManager; |
||||||
|
import com.fr.design.dialog.BasicDialog; |
||||||
|
import com.fr.design.dialog.DialogActionAdapter; |
||||||
|
import com.fr.design.gui.ibutton.UIButton; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.mainframe.DesignerContext; |
||||||
|
import com.fr.design.web.CustomIconPane; |
||||||
|
import com.fr.form.ui.WidgetInfoConfig; |
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
import com.fr.stable.Constants; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JComponent; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.JToggleButton; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import javax.swing.plaf.basic.BasicButtonUI; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Cursor; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
import java.awt.Graphics; |
||||||
|
import java.awt.Graphics2D; |
||||||
|
import java.awt.Image; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
import java.awt.geom.Rectangle2D; |
||||||
|
import java.util.ArrayList; |
||||||
|
|
||||||
|
public class TabIconConfigPane extends JPanel { |
||||||
|
private UIButton editIconButton; |
||||||
|
private String curIconName; |
||||||
|
private IconButton selectIconButton; |
||||||
|
private ArrayList<IconButton> iconButtons = new ArrayList<IconButton>(); |
||||||
|
|
||||||
|
public TabIconConfigPane(int count) { |
||||||
|
initComp(count); |
||||||
|
} |
||||||
|
|
||||||
|
public void initComp(int count) { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
JPanel panel = FRGUIPaneFactory.createLeftFlowZeroGapBorderPane(); |
||||||
|
panel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0)); |
||||||
|
editIconButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Edit")); |
||||||
|
editIconButton.setPreferredSize(new Dimension(62, 20)); |
||||||
|
panel.add(editIconButton); |
||||||
|
editIconButton.addActionListener(new ActionListener() { |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
final CustomIconPane cip = new CustomIconPane(); |
||||||
|
BasicDialog editDialog = cip.showWindow(DesignerContext.getDesignerFrame()); |
||||||
|
editDialog.addDialogActionListener(new DialogActionAdapter() { |
||||||
|
@Override |
||||||
|
public void doOk() { |
||||||
|
curIconName = cip.update(); |
||||||
|
setShowIconImage(); |
||||||
|
TabIconConfigPane.this.repaint(); |
||||||
|
} |
||||||
|
}); |
||||||
|
editDialog.setVisible(true); |
||||||
|
} |
||||||
|
}); |
||||||
|
editIconButton.setEnabled(false); |
||||||
|
this.add(panel, BorderLayout.CENTER); |
||||||
|
|
||||||
|
JPanel northPane = new JPanel(); |
||||||
|
northPane.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||||
|
for (int i = 0; i < count; i++) { |
||||||
|
IconButton iconButton = new IconButton(""); |
||||||
|
northPane.add(iconButton); |
||||||
|
iconButtons.add(iconButton); |
||||||
|
} |
||||||
|
this.add(northPane, BorderLayout.NORTH); |
||||||
|
} |
||||||
|
|
||||||
|
public void setShowIconImage() { |
||||||
|
selectIconButton.setIconName(curIconName); |
||||||
|
} |
||||||
|
|
||||||
|
public void populate(ArrayList<String> iconArr) { |
||||||
|
for (int i = 0; i < iconButtons.size(); i++) { |
||||||
|
iconButtons.get(i).setIconName(iconArr.get(i)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public ArrayList<String> update() { |
||||||
|
ArrayList<String> iconNames = new ArrayList<String>(); |
||||||
|
for (int i = 0; i < iconButtons.size(); i++) { |
||||||
|
iconNames.add(iconButtons.get(i).getIconName()); |
||||||
|
} |
||||||
|
return iconNames; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private class IconButton extends JToggleButton implements ActionListener { |
||||||
|
private String iconName; |
||||||
|
private Image iconImage = null; |
||||||
|
private static final int ICON_BUTTON_SIZE = 20; |
||||||
|
private static final int ICON_X = 2; |
||||||
|
private static final int ICON_Y = 2; |
||||||
|
|
||||||
|
public IconButton(String name) { |
||||||
|
this.iconName = name; |
||||||
|
this.addActionListener(this); |
||||||
|
this.setBackground(Color.WHITE); |
||||||
|
this.setCursor(new Cursor(Cursor.HAND_CURSOR)); |
||||||
|
this.iconImage = WidgetInfoConfig.getInstance().getIconManager().getIconImage(name); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void updateUI() { |
||||||
|
setUI(new BasicButtonUI() { |
||||||
|
public void paint(Graphics g, JComponent c) { |
||||||
|
super.paint(g, c); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
public String getIconName() { |
||||||
|
return iconName; |
||||||
|
} |
||||||
|
|
||||||
|
public void setIconName(String iconName) { |
||||||
|
this.iconName = iconName; |
||||||
|
this.iconImage = WidgetInfoConfig.getInstance().getIconManager().getIconImage(iconName); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void paintComponent(Graphics g) { |
||||||
|
super.paintComponent(g); |
||||||
|
Graphics2D g2d = (Graphics2D) g; |
||||||
|
// carl:这里缩放显示 16 × 16
|
||||||
|
if (iconImage != null) { |
||||||
|
g2d.drawImage(iconImage, ICON_X, ICON_Y, IconManager.DEFAULT_ICONWIDTH, IconManager.DEFAULT_ICONHEIGHT, null); |
||||||
|
} |
||||||
|
if (this.iconName != null && ComparatorUtils.equals(this, selectIconButton)) { |
||||||
|
g2d.setPaint(Color.decode("#419BF9")); |
||||||
|
} else { |
||||||
|
g2d.setPaint(Color.decode("#D9DADD")); |
||||||
|
} |
||||||
|
GraphHelper.draw(g2d, new Rectangle2D.Double(0, 0, 20, 20), Constants.LINE_MEDIUM); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Dimension getPreferredSize() { |
||||||
|
return new Dimension(ICON_BUTTON_SIZE, ICON_BUTTON_SIZE); |
||||||
|
} |
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent evt) { |
||||||
|
selectIconButton = this; |
||||||
|
editIconButton.setEnabled(true); |
||||||
|
TabIconConfigPane.this.repaint();// repaint
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void addChangeListener(ChangeListener changeListener) { |
||||||
|
this.changeListener = changeListener; |
||||||
|
} |
||||||
|
|
||||||
|
private void fireChagneListener() { |
||||||
|
if (this.changeListener != null) { |
||||||
|
ChangeEvent evt = new ChangeEvent(this); |
||||||
|
this.changeListener.stateChanged(evt); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,55 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.ui; |
||||||
|
|
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.form.ui.container.cardlayout.WCardTagLayout; |
||||||
|
import com.fr.general.cardtag.mobile.DefaultMobileTemplateStyle; |
||||||
|
import com.fr.general.cardtag.mobile.DownMenuStyle; |
||||||
|
import com.fr.general.cardtag.mobile.MobileTemplateStyle; |
||||||
|
import com.fr.general.cardtag.mobile.SliderStyle; |
||||||
|
import com.fr.general.cardtag.mobile.UpMenuStyle; |
||||||
|
import com.fr.invoke.Reflect; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
|
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
public class TemplateStyleDefinePaneFactory { |
||||||
|
private static Map<String, StyleDefinePaneUI> defineMap = new HashMap<String, StyleDefinePaneUI>(); |
||||||
|
|
||||||
|
static { |
||||||
|
defineMap.put(DefaultMobileTemplateStyle.STYLE_NAME, new StyleDefinePaneUI(DefaultMobileStyleDefinePane.class)); |
||||||
|
defineMap.put(UpMenuStyle.STYLE_NAME, new StyleDefinePaneUI(UpMenuStyleDefinePane.class)); |
||||||
|
defineMap.put(DownMenuStyle.STYLE_NAME, new StyleDefinePaneUI(DownMenuStyleDefinePane.class)); |
||||||
|
defineMap.put(SliderStyle.STYLE_NAME, new StyleDefinePaneUI(SliderStyleDefinePane.class)); |
||||||
|
} |
||||||
|
|
||||||
|
public static BasicBeanPane<MobileTemplateStyle> createDefinePane(String style, WCardTagLayout tagLayout) { |
||||||
|
StyleDefinePaneUI styleDefinePaneUI = defineMap.get(style); |
||||||
|
Class<? extends BasicBeanPane<MobileTemplateStyle>> clazz = styleDefinePaneUI.getaClass(); |
||||||
|
if (clazz == null) { |
||||||
|
} |
||||||
|
BasicBeanPane<MobileTemplateStyle> quickPane = null; |
||||||
|
try { |
||||||
|
quickPane = Reflect.on(clazz).create(tagLayout).get(); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||||
|
} |
||||||
|
return quickPane; |
||||||
|
} |
||||||
|
|
||||||
|
private static class StyleDefinePaneUI { |
||||||
|
private Class<? extends BasicBeanPane<MobileTemplateStyle>> aClass; |
||||||
|
|
||||||
|
public StyleDefinePaneUI(Class<? extends BasicBeanPane<MobileTemplateStyle>> aClass) { |
||||||
|
this.aClass = aClass; |
||||||
|
} |
||||||
|
|
||||||
|
public Class<? extends BasicBeanPane<MobileTemplateStyle>> getaClass() { |
||||||
|
return aClass; |
||||||
|
} |
||||||
|
|
||||||
|
public void setaClass(Class<? extends BasicBeanPane<MobileTemplateStyle>> aClass) { |
||||||
|
this.aClass = aClass; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,222 @@ |
|||||||
|
package com.fr.design.mainframe.mobile.ui; |
||||||
|
|
||||||
|
import com.fr.base.GraphHelper; |
||||||
|
import com.fr.design.constants.LayoutConstants; |
||||||
|
import com.fr.design.designer.IntervalConstants; |
||||||
|
import com.fr.design.gui.ibutton.UIRadioButton; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.mainframe.widget.UITitleSplitLine; |
||||||
|
import com.fr.design.mainframe.widget.preview.MobileTemplatePreviewPane; |
||||||
|
import com.fr.form.ui.CardSwitchButton; |
||||||
|
import com.fr.form.ui.container.cardlayout.WCardTagLayout; |
||||||
|
import com.fr.general.FRFont; |
||||||
|
import com.fr.general.cardtag.mobile.LineDescription; |
||||||
|
import com.fr.general.cardtag.mobile.MobileTemplateStyle; |
||||||
|
import com.fr.general.cardtag.mobile.UpMenuStyle; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.ButtonGroup; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.FontMetrics; |
||||||
|
import java.awt.Graphics; |
||||||
|
import java.awt.Graphics2D; |
||||||
|
import java.awt.Stroke; |
||||||
|
|
||||||
|
public class UpMenuStyleDefinePane extends StyleDefinePaneWithSelectConf { |
||||||
|
private UIRadioButton gapFix; |
||||||
|
private UIRadioButton titleWidthFix; |
||||||
|
private LinePane bottomBorderPane; |
||||||
|
private LinePane underLinePane; |
||||||
|
|
||||||
|
public UpMenuStyleDefinePane(WCardTagLayout tagLayout) { |
||||||
|
super(tagLayout); |
||||||
|
} |
||||||
|
|
||||||
|
protected JPanel createCenterPane() { |
||||||
|
JPanel panel = super.createCenterPane(); |
||||||
|
UILabel displayGap = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Display_Gap")); |
||||||
|
displayGap.setPreferredSize(new Dimension(55, 20)); |
||||||
|
gapFix = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Gap_Fix")); |
||||||
|
titleWidthFix = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Title_Width_Fix")); |
||||||
|
ButtonGroup buttonGroup = new ButtonGroup(); |
||||||
|
titleWidthFix.setSelected(true); |
||||||
|
buttonGroup.add(gapFix); |
||||||
|
gapFix.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); |
||||||
|
titleWidthFix.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); |
||||||
|
buttonGroup.add(titleWidthFix); |
||||||
|
gapFix.addChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
updatePreviewPane(); |
||||||
|
} |
||||||
|
}); |
||||||
|
titleWidthFix.addChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
updatePreviewPane(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
|
||||||
|
JPanel flowLeft = FRGUIPaneFactory.createNormalFlowInnerContainer_M_Pane(); |
||||||
|
flowLeft.add(gapFix); |
||||||
|
flowLeft.add(titleWidthFix); |
||||||
|
JPanel centerPane = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{displayGap, flowLeft}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||||
|
centerPane.setBorder(BorderFactory.createEmptyBorder(0, 20, 15, 20)); |
||||||
|
centerPane.setPreferredSize(new Dimension(500, 20)); |
||||||
|
JPanel outerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
outerPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 15, 0)); |
||||||
|
outerPane.add(centerPane, BorderLayout.CENTER); |
||||||
|
panel.add(outerPane); |
||||||
|
return panel; |
||||||
|
} |
||||||
|
|
||||||
|
protected void createExtraConfPane(JPanel centerPane) { |
||||||
|
bottomBorderPane = new LinePane(); |
||||||
|
underLinePane = new LinePane(); |
||||||
|
bottomBorderPane.addLineChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
updatePreviewPane(); |
||||||
|
} |
||||||
|
}); |
||||||
|
underLinePane.addLineChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
updatePreviewPane(); |
||||||
|
} |
||||||
|
}); |
||||||
|
UITitleSplitLine titleSplitLine = new UITitleSplitLine(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Spit_Line"), 520); |
||||||
|
titleSplitLine.setPreferredSize(new Dimension(520, 20)); |
||||||
|
centerPane.add(titleSplitLine); |
||||||
|
centerPane.add(bottomBorderPane); |
||||||
|
UITitleSplitLine titleUnderLine = new UITitleSplitLine(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Mobile_Under_Line"), 520); |
||||||
|
titleUnderLine.setPreferredSize(new Dimension(520, 20)); |
||||||
|
centerPane.add(titleUnderLine); |
||||||
|
centerPane.add(underLinePane); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void initDefaultConfig() { |
||||||
|
this.initialColorBox.setSelectObject(UpMenuStyle.DEFAULT_INITIAL_COLOR); |
||||||
|
this.fontConfPane.populate(UpMenuStyle.DEFAULT_TAB_FONT.getFont()); |
||||||
|
this.selectColorBox.setSelectObject(UpMenuStyle.DEFAULT_SELECT_COLOR); |
||||||
|
this.selectFontColor.setColor(UpMenuStyle.DEFAULT_SELECT_FONT_COLOR); |
||||||
|
this.bottomBorderPane.populate(UpMenuStyle.DEFAULT_BOTTOM_BORDER); |
||||||
|
this.underLinePane.populate(UpMenuStyle.DEFAULT_UNDER_LINE); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected MobileTemplatePreviewPane createPreviewPane() { |
||||||
|
return new UpMenuStylePreviewPane(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(MobileTemplateStyle ob) { |
||||||
|
super.populateBean(ob); |
||||||
|
UpMenuStyle style = (UpMenuStyle) ob; |
||||||
|
gapFix.setSelected(style.isGapFix()); |
||||||
|
titleWidthFix.setSelected(style.isTitleWidthFix()); |
||||||
|
bottomBorderPane.populate(style.getBottomBorder()); |
||||||
|
underLinePane.populate(style.getUnderline()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected MobileTemplateStyle getDefaultTemplateStyle() { |
||||||
|
return new UpMenuStyle(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public MobileTemplateStyle updateStyleWithSelectConf() { |
||||||
|
UpMenuStyle style = new UpMenuStyle(); |
||||||
|
style.setGapFix(gapFix.isSelected()); |
||||||
|
style.setTitleWidthFix(titleWidthFix.isSelected()); |
||||||
|
style.setBottomBorder(bottomBorderPane.update()); |
||||||
|
style.setUnderline(underLinePane.update()); |
||||||
|
return style; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public class UpMenuStylePreviewPane extends MobileTemplatePreviewPane { |
||||||
|
private LineDescription bottomBorder; |
||||||
|
private LineDescription underLine; |
||||||
|
private boolean isGapFix; |
||||||
|
|
||||||
|
public UpMenuStylePreviewPane() { |
||||||
|
this.setBackground(Color.WHITE); |
||||||
|
} |
||||||
|
|
||||||
|
public void repaint() { |
||||||
|
super.repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void paint(Graphics g) { |
||||||
|
super.paint(g); |
||||||
|
Color selectFontColor = this.getTabFontConfig().getSelectColor(); |
||||||
|
Dimension dimension = this.getSize(); |
||||||
|
int panelWidth = dimension.width; |
||||||
|
int panelHeight = dimension.height; |
||||||
|
Graphics2D g2d = (Graphics2D) g.create(); |
||||||
|
FRFont frFont = UpMenuStyleDefinePane.this.fontConfPane.update(); |
||||||
|
FontMetrics fm = GraphHelper.getFontMetrics(frFont); |
||||||
|
WCardTagLayout cardTagLayout = UpMenuStyleDefinePane.this.getTagLayout(); |
||||||
|
int eachWidth = panelWidth / cardTagLayout.getWidgetCount(); |
||||||
|
g2d.setFont(frFont); |
||||||
|
int fontHeight = fm.getHeight(); |
||||||
|
int ascentHeight = fm.getAscent(); |
||||||
|
for (int i = 0; i < cardTagLayout.getWidgetCount(); i++) { |
||||||
|
g2d.setColor(i == 0 ? selectFontColor : frFont.getForeground()); |
||||||
|
CardSwitchButton cardSwitchButton = cardTagLayout.getSwitchButton(i); |
||||||
|
String widgetName = cardSwitchButton.getText(); |
||||||
|
int width = fm.stringWidth(widgetName); |
||||||
|
if(i == 0){ |
||||||
|
Color oldColor = g2d.getColor(); |
||||||
|
g2d.setColor(this.getSelectColor()); |
||||||
|
g2d.fillRect(0, 0 ,eachWidth, panelHeight); |
||||||
|
g2d.setColor(oldColor); |
||||||
|
} |
||||||
|
g2d.drawString(widgetName, (eachWidth - width) / 2, (panelHeight - fontHeight) / 2 + ascentHeight); |
||||||
|
Stroke oldStroke = g2d.getStroke(); |
||||||
|
if (i == 0) { |
||||||
|
g2d.setColor(this.underLine.getColor()); |
||||||
|
g2d.setStroke(GraphHelper.getStroke(underLine.getLineStyle())); |
||||||
|
int underLineX = this.isGapFix ? (eachWidth - width) / 2 : 0; |
||||||
|
int underLineWidth = this.isGapFix ? width : eachWidth; |
||||||
|
g2d.drawLine(underLineX, panelHeight - 1, underLineX + underLineWidth, panelHeight - 1); |
||||||
|
} |
||||||
|
if (bottomBorder.getLineStyle() != 0) { |
||||||
|
g2d.setColor(bottomBorder.getColor()); |
||||||
|
g2d.setStroke(GraphHelper.getStroke(bottomBorder.getLineStyle())); |
||||||
|
g2d.drawLine(eachWidth, 0, eachWidth, panelHeight); |
||||||
|
} |
||||||
|
g2d.setStroke(oldStroke); |
||||||
|
g2d.translate(eachWidth, 0); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public void populateConfig(MobileTemplateStyle templateStyle) { |
||||||
|
super.populateConfig(templateStyle); |
||||||
|
this.bottomBorder = ((UpMenuStyle) templateStyle).getBottomBorder(); |
||||||
|
this.underLine = ((UpMenuStyle) templateStyle).getUnderline(); |
||||||
|
this.isGapFix = ((UpMenuStyle) templateStyle).isGapFix(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,144 @@ |
|||||||
|
package com.fr.design.mainframe.widget; |
||||||
|
|
||||||
|
import com.fr.base.BaseUtils; |
||||||
|
import com.fr.base.Utils; |
||||||
|
import com.fr.design.gui.ibutton.UIColorButton; |
||||||
|
import com.fr.design.gui.ibutton.UIToggleButton; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBox; |
||||||
|
import com.fr.general.FRFont; |
||||||
|
|
||||||
|
import javax.swing.Icon; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.event.ChangeListener; |
||||||
|
import javax.swing.event.EventListenerList; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
import java.awt.Font; |
||||||
|
import java.awt.event.ItemEvent; |
||||||
|
import java.awt.event.ItemListener; |
||||||
|
import java.util.Vector; |
||||||
|
|
||||||
|
public class MobileTabFontConfPane extends JPanel { |
||||||
|
private static final Icon[] ITALIC_ICONS = {BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/italic.png"), BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/italic_white.png")}; |
||||||
|
private static final Icon[] BOLD_ICONS = {BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/bold.png"), BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/bold_white.png")}; |
||||||
|
|
||||||
|
private EventListenerList fontChangeListener = new EventListenerList(); |
||||||
|
private UIComboBox fontFamily; |
||||||
|
private UIComboBox fontSize; |
||||||
|
private UIToggleButton bold; |
||||||
|
private UIColorButton color; |
||||||
|
private UIToggleButton italic; |
||||||
|
|
||||||
|
|
||||||
|
public MobileTabFontConfPane() { |
||||||
|
super(); |
||||||
|
init(); |
||||||
|
} |
||||||
|
|
||||||
|
private void init() { |
||||||
|
this.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); |
||||||
|
fontFamily = new UIComboBox(Utils.getAvailableFontFamilyNames4Report()); |
||||||
|
Vector<Integer> integerList = new Vector<Integer>(); |
||||||
|
for (int i = 1; i < 100; i++) { |
||||||
|
integerList.add(i); |
||||||
|
} |
||||||
|
fontFamily.setPreferredSize(new Dimension(152, 20)); |
||||||
|
fontSize = new UIComboBox(integerList); |
||||||
|
color = new UIColorButton(); |
||||||
|
bold = new UIToggleButton(BOLD_ICONS, true); |
||||||
|
italic = new UIToggleButton(ITALIC_ICONS, true); |
||||||
|
fontFamily.addItemListener(new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
fireFontStateChanged(); |
||||||
|
} |
||||||
|
}); |
||||||
|
fontSize.addItemListener(new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
fireFontStateChanged(); |
||||||
|
} |
||||||
|
}); |
||||||
|
bold.addChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
fireFontStateChanged(); |
||||||
|
} |
||||||
|
}); |
||||||
|
italic.addChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
fireFontStateChanged(); |
||||||
|
} |
||||||
|
}); |
||||||
|
color.addColorChangeListener(new ChangeListener() { |
||||||
|
@Override |
||||||
|
public void stateChanged(ChangeEvent e) { |
||||||
|
fireFontStateChanged(); |
||||||
|
} |
||||||
|
}); |
||||||
|
this.add(fontFamily); |
||||||
|
this.add(fontSize); |
||||||
|
this.add(color); |
||||||
|
this.add(bold); |
||||||
|
this.add(italic); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public FRFont update() { |
||||||
|
String family = (String) fontFamily.getSelectedItem(); |
||||||
|
int size = (int) fontSize.getSelectedItem(); |
||||||
|
int style = Font.PLAIN; |
||||||
|
style += this.bold.isSelected() ? Font.BOLD : Font.PLAIN; |
||||||
|
style += this.italic.isSelected() ? Font.ITALIC : Font.PLAIN; |
||||||
|
FRFont frFont = FRFont.getInstance(family, style, size, color.getColor()); |
||||||
|
return frFont; |
||||||
|
} |
||||||
|
|
||||||
|
public void populate(FRFont frFont) { |
||||||
|
fontFamily.setSelectedItem(frFont.getFamily()); |
||||||
|
fontSize.setSelectedItem(frFont.getSize()); |
||||||
|
color.setColor(frFont.getForeground()); |
||||||
|
bold.setSelected(frFont.isBold()); |
||||||
|
italic.setSelected(frFont.isItalic()); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 添加监听 |
||||||
|
* |
||||||
|
* @param changeListener 监听列表 |
||||||
|
*/ |
||||||
|
public void addFontChangeListener(ChangeListener changeListener) { |
||||||
|
fontChangeListener.add(ChangeListener.class, changeListener); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 移除监听 |
||||||
|
* Removes an old ColorChangeListener. |
||||||
|
* |
||||||
|
* @param changeListener 监听列表 |
||||||
|
*/ |
||||||
|
public void removeFontChangeListener(ChangeListener changeListener) { |
||||||
|
fontChangeListener.remove(ChangeListener.class, changeListener); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 颜色状态改变 |
||||||
|
*/ |
||||||
|
public void fireFontStateChanged() { |
||||||
|
Object[] listeners = fontChangeListener.getListenerList(); |
||||||
|
ChangeEvent e = null; |
||||||
|
|
||||||
|
for (int i = listeners.length - 2; i >= 0; i -= 2) { |
||||||
|
if (listeners[i] == ChangeListener.class) { |
||||||
|
if (e == null) { |
||||||
|
e = new ChangeEvent(this); |
||||||
|
} |
||||||
|
((ChangeListener) listeners[i + 1]).stateChanged(e); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,50 @@ |
|||||||
|
package com.fr.design.mainframe.widget; |
||||||
|
|
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.general.FRFont; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.Graphics; |
||||||
|
|
||||||
|
public class UITitleSplitLine extends JPanel { |
||||||
|
private static final Color LINE_COLOR = Color.decode("#E0E0E1"); |
||||||
|
private static final Color TITLE_COLOR = Color.decode("#333334"); |
||||||
|
private static final FRFont TITLE_FONT = FRFont.getInstance("PingFangSC-Regular", 0, 12.0F); |
||||||
|
private static final int OFFSETX = 10; |
||||||
|
private static final int OFFSET = 3; |
||||||
|
private Color color; |
||||||
|
private UILabel label; |
||||||
|
private int width; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public UITitleSplitLine(String title, int width) { |
||||||
|
this(title, LINE_COLOR, width); |
||||||
|
} |
||||||
|
|
||||||
|
public UITitleSplitLine(String title, Color color, int width) { |
||||||
|
super(); |
||||||
|
this.color = color; |
||||||
|
this.width = width; |
||||||
|
this.label = new UILabel(title); |
||||||
|
} |
||||||
|
|
||||||
|
public void paint(Graphics g) { |
||||||
|
super.paint(g); |
||||||
|
Dimension size = label.getPreferredSize(); |
||||||
|
int labelH = size.height; |
||||||
|
g.setColor(color); |
||||||
|
g.drawLine(0, labelH / 2, OFFSETX, labelH / 2); |
||||||
|
g.drawLine(OFFSETX + size.width + OFFSET * 2, labelH / 2, width, labelH / 2); |
||||||
|
g.translate(OFFSETX + OFFSET, 0); |
||||||
|
label.setFont(TITLE_FONT); |
||||||
|
label.setForeground(TITLE_COLOR); |
||||||
|
label.setSize(size.width, size.height); |
||||||
|
label.paint(g); |
||||||
|
g.translate(-OFFSETX - OFFSET, 0); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
package com.fr.design.mainframe.widget.accessibles; |
||||||
|
|
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
|
||||||
|
public abstract class AbstractTemplateStylePane<T> extends BasicPane { |
||||||
|
|
||||||
|
public abstract void populate(T ob); |
||||||
|
|
||||||
|
public abstract T update(); |
||||||
|
} |
@ -0,0 +1,113 @@ |
|||||||
|
package com.fr.design.mainframe.widget.accessibles; |
||||||
|
|
||||||
|
import com.fr.design.beans.BasicBeanPane; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.mainframe.mobile.ui.TemplateStyleDefinePaneFactory; |
||||||
|
import com.fr.form.ui.container.cardlayout.WCardTagLayout; |
||||||
|
import com.fr.general.cardtag.mobile.DefaultMobileTemplateStyle; |
||||||
|
import com.fr.general.cardtag.mobile.DownMenuStyle; |
||||||
|
import com.fr.general.cardtag.mobile.MobileTemplateStyle; |
||||||
|
import com.fr.general.cardtag.mobile.SliderStyle; |
||||||
|
import com.fr.general.cardtag.mobile.UpMenuStyle; |
||||||
|
import javax.swing.DefaultListCellRenderer; |
||||||
|
import javax.swing.DefaultListModel; |
||||||
|
import javax.swing.JList; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.ListCellRenderer; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.CardLayout; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.event.MouseAdapter; |
||||||
|
import java.awt.event.MouseEvent; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
public class MobileTemplateStylePane extends AbstractTemplateStylePane<MobileTemplateStyle> { |
||||||
|
private static final List<String> STYLE_LIST = new ArrayList<String>(); |
||||||
|
static { |
||||||
|
STYLE_LIST.add(DefaultMobileTemplateStyle.STYLE_NAME); |
||||||
|
STYLE_LIST.add(UpMenuStyle.STYLE_NAME); |
||||||
|
STYLE_LIST.add(DownMenuStyle.STYLE_NAME); |
||||||
|
STYLE_LIST.add(SliderStyle.STYLE_NAME); |
||||||
|
} |
||||||
|
|
||||||
|
private DefaultListModel listModel; |
||||||
|
private JList styleList; |
||||||
|
private Map<String, BasicBeanPane<MobileTemplateStyle>> map = new HashMap<>(); |
||||||
|
private JPanel right; |
||||||
|
private CardLayout card; |
||||||
|
public MobileTemplateStylePane(WCardTagLayout tagLayout){ |
||||||
|
init(tagLayout); |
||||||
|
} |
||||||
|
|
||||||
|
public void init(WCardTagLayout tagLayout){ |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
listModel = new DefaultListModel(); |
||||||
|
card = new CardLayout(); |
||||||
|
right = FRGUIPaneFactory.createCardLayout_S_Pane(); |
||||||
|
right.setLayout(card); |
||||||
|
for(String style : STYLE_LIST){ |
||||||
|
listModel.addElement(style); |
||||||
|
BasicBeanPane<MobileTemplateStyle> styleBasicBeanPane = TemplateStyleDefinePaneFactory.createDefinePane(style, tagLayout); |
||||||
|
map.put(style, styleBasicBeanPane); |
||||||
|
right.add(style, styleBasicBeanPane); |
||||||
|
} |
||||||
|
styleList = new JList(listModel); |
||||||
|
styleList.setCellRenderer(render); |
||||||
|
|
||||||
|
JPanel westPane = FRGUIPaneFactory.createBorderLayout_L_Pane(); |
||||||
|
westPane.add(styleList, BorderLayout.CENTER); |
||||||
|
westPane.setPreferredSize(new Dimension(100, 500)); |
||||||
|
|
||||||
|
|
||||||
|
JPanel centerPane = FRGUIPaneFactory.createBorderLayout_L_Pane(); |
||||||
|
JPanel attrConfPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
centerPane.setPreferredSize(new Dimension(500, 500)); |
||||||
|
attrConfPane.add(right, BorderLayout.CENTER); |
||||||
|
centerPane.add(attrConfPane, BorderLayout.CENTER); |
||||||
|
styleList.addMouseListener(new MouseAdapter() { |
||||||
|
public void mouseClicked(MouseEvent e) { |
||||||
|
String selectedValue = (String)styleList.getSelectedValue(); |
||||||
|
card.show(right, selectedValue); |
||||||
|
} |
||||||
|
}); |
||||||
|
this.add(westPane, BorderLayout.WEST); |
||||||
|
this.add(centerPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
public static ListCellRenderer render = new DefaultListCellRenderer() { |
||||||
|
@Override |
||||||
|
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { |
||||||
|
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); |
||||||
|
|
||||||
|
if (value instanceof MobileTemplateStyle) { |
||||||
|
MobileTemplateStyle l = (MobileTemplateStyle) value; |
||||||
|
this.setText(l.toString()); |
||||||
|
} |
||||||
|
return this; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Tab_Style_Template"); |
||||||
|
} |
||||||
|
|
||||||
|
public void populate(MobileTemplateStyle templateStyle) { |
||||||
|
for(int i = 0; i< listModel.getSize(); i++){ |
||||||
|
if((listModel.getElementAt(i)).equals(templateStyle.getStyle())){ |
||||||
|
styleList.setSelectedIndex(i); |
||||||
|
map.get(templateStyle.getStyle()).populateBean(templateStyle); |
||||||
|
card.show(right, templateStyle.getStyle()); |
||||||
|
return; |
||||||
|
} |
||||||
|
} |
||||||
|
styleList.setSelectedIndex(0); |
||||||
|
} |
||||||
|
|
||||||
|
public MobileTemplateStyle update() { |
||||||
|
return map.get(styleList.getSelectedValue()).updateBean(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,53 @@ |
|||||||
|
package com.fr.design.mainframe.widget.preview; |
||||||
|
|
||||||
|
import com.fr.general.cardtag.mobile.MobileTemplateStyle; |
||||||
|
import com.fr.general.cardtag.mobile.TabFontConfig; |
||||||
|
|
||||||
|
import javax.swing.JPanel; |
||||||
|
import java.awt.Color; |
||||||
|
|
||||||
|
public abstract class MobileTemplatePreviewPane extends JPanel { |
||||||
|
private Color initialColor; |
||||||
|
private Color selectColor; |
||||||
|
private TabFontConfig tabFontConfig = new TabFontConfig(); |
||||||
|
|
||||||
|
public Color getInitialColor() { |
||||||
|
return initialColor; |
||||||
|
} |
||||||
|
|
||||||
|
public void setInitialColor(Color initialColor) { |
||||||
|
this.initialColor = initialColor; |
||||||
|
} |
||||||
|
|
||||||
|
public Color getSelectColor() { |
||||||
|
return selectColor; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSelectColor(Color selectColor) { |
||||||
|
this.selectColor = selectColor; |
||||||
|
} |
||||||
|
|
||||||
|
public TabFontConfig getTabFontConfig() { |
||||||
|
return tabFontConfig; |
||||||
|
} |
||||||
|
|
||||||
|
public void setTabFontConfig(TabFontConfig tabFontConfig) { |
||||||
|
this.tabFontConfig = tabFontConfig; |
||||||
|
} |
||||||
|
|
||||||
|
public MobileTemplatePreviewPane(){ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public void populateConfig(MobileTemplateStyle templateStyle){ |
||||||
|
this.setInitialColor(templateStyle.getInitialColor()); |
||||||
|
this.setBackground(templateStyle.getInitialColor()); |
||||||
|
this.setSelectColor(templateStyle.getSelectColor()); |
||||||
|
this.setTabFontConfig(templateStyle.getTabFontConfig()); |
||||||
|
} |
||||||
|
|
||||||
|
public void repaint (){ |
||||||
|
super.repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,30 @@ |
|||||||
|
package com.fr.design.designer.properties.mobile; |
||||||
|
|
||||||
|
import com.fr.design.designer.creator.XCreator; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.design.fun.impl.AbstractWidgetPropertyUIProvider; |
||||||
|
import com.fr.design.gui.itable.AbstractPropertyTable; |
||||||
|
import com.fr.design.widget.ui.designer.mobile.TabMobileWidgetDefinePane; |
||||||
|
|
||||||
|
public class TabMobilePropertyUI extends AbstractWidgetPropertyUIProvider { |
||||||
|
private XCreator xCreator; |
||||||
|
|
||||||
|
public TabMobilePropertyUI(XCreator xCreator){ |
||||||
|
this.xCreator = xCreator; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public AbstractPropertyTable createWidgetAttrTable() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public BasicPane createWidgetAttrPane() { |
||||||
|
return new TabMobileWidgetDefinePane(xCreator); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String tableTitle() { |
||||||
|
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Mobile_Attr"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,69 @@ |
|||||||
|
package com.fr.design.widget.ui.designer.mobile; |
||||||
|
|
||||||
|
import com.fr.design.constants.LayoutConstants; |
||||||
|
import com.fr.design.designer.IntervalConstants; |
||||||
|
import com.fr.design.designer.creator.XCreator; |
||||||
|
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.mainframe.DesignerContext; |
||||||
|
import com.fr.design.mainframe.FormDesigner; |
||||||
|
import com.fr.design.mainframe.widget.accessibles.AccessibleTemplateStyleEditor; |
||||||
|
import com.fr.design.mainframe.widget.accessibles.MobileTemplateStylePane; |
||||||
|
import com.fr.form.ui.container.cardlayout.WCardTagLayout; |
||||||
|
import com.fr.general.cardtag.mobile.MobileTemplateStyle; |
||||||
|
|
||||||
|
import javax.swing.JPanel; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Component; |
||||||
|
|
||||||
|
public class TabMobileWidgetDefinePane extends MobileWidgetDefinePane { |
||||||
|
private XCreator xCreator; |
||||||
|
private AccessibleTemplateStyleEditor templateStyleEditor; |
||||||
|
private AttributeChangeListener changeListener; |
||||||
|
|
||||||
|
public TabMobileWidgetDefinePane(XCreator xCreator) { |
||||||
|
this.xCreator = xCreator; |
||||||
|
} |
||||||
|
|
||||||
|
private void bindListeners2Widgets() { |
||||||
|
reInitAllListeners(); |
||||||
|
this.changeListener = new AttributeChangeListener() { |
||||||
|
@Override |
||||||
|
public void attributeChange() { |
||||||
|
update(); |
||||||
|
} |
||||||
|
}; |
||||||
|
} |
||||||
|
/** |
||||||
|
* 后台初始化所有事件. |
||||||
|
*/ |
||||||
|
private void reInitAllListeners() { |
||||||
|
initListener(this); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void initPropertyGroups(Object source) { |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
UILabel label = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Tab_Style_Template")); |
||||||
|
templateStyleEditor = new AccessibleTemplateStyleEditor(new MobileTemplateStylePane((WCardTagLayout) xCreator.toData())); |
||||||
|
JPanel jPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{label, templateStyleEditor}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
||||||
|
this.add(jPanel, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populate(FormDesigner designer) { |
||||||
|
templateStyleEditor.setValue(((WCardTagLayout)xCreator.toData()).getMobileTemplateStyle()); |
||||||
|
// 数据 populate 完成后,再设置监听
|
||||||
|
this.bindListeners2Widgets(); |
||||||
|
this.addAttributeChangeListener(changeListener); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void update() { |
||||||
|
((WCardTagLayout)xCreator.toData()).setMobileTemplateStyle((MobileTemplateStyle) templateStyleEditor.getValue()); |
||||||
|
DesignerContext.getDesignerFrame().getSelectedJTemplate().fireTargetModified(); // 触发设计器保存按钮亮起来
|
||||||
|
|
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue