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