You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
341 lines
15 KiB
341 lines
15 KiB
package com.fr.widgettheme.widget.mobile.pane; |
|
|
|
import com.fr.base.background.ColorBackground; |
|
import com.fr.design.gui.frpane.UIPercentDragPane; |
|
import com.fr.util.ColorUtils; |
|
import com.fr.widgettheme.theme.widget.style.MobileThemedWidgetStyle; |
|
import com.fr.widgettheme.theme.widget.mobile.style.WidgetThemeMobileCommonExtraStyle; |
|
import com.fr.design.beans.BasicBeanPane; |
|
import com.fr.design.constants.LayoutConstants; |
|
import com.fr.design.designer.IntervalConstants; |
|
import com.fr.design.file.HistoryTemplateListCache; |
|
import com.fr.design.gui.icombobox.LineComboBox; |
|
import com.fr.design.gui.icombobox.UIComboBox; |
|
import com.fr.design.gui.ilable.UILabel; |
|
import com.fr.design.gui.ispinner.UISpinner; |
|
import com.fr.design.i18n.Toolkit; |
|
import com.fr.design.layout.FRGUIPaneFactory; |
|
import com.fr.design.layout.TableLayoutHelper; |
|
import com.fr.design.mainframe.JTemplate; |
|
import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane; |
|
import com.fr.design.style.color.NewColorSelectBox; |
|
import com.fr.design.utils.gui.GUICoreUtils; |
|
import com.fr.form.ui.Widget; |
|
import com.fr.form.ui.mobile.MobileCommonExtraStyle; |
|
import com.fr.form.ui.mobile.MobileStyle; |
|
import com.fr.general.FRFont; |
|
import com.fr.invoke.Reflect; |
|
import com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants; |
|
import com.fr.stable.Constants; |
|
import com.fr.stable.StringUtils; |
|
import com.fr.widgettheme.util.WidgetStyleComponentCombiner; |
|
import com.fr.widgettheme.util.WidgetThemeDesignerUtils; |
|
|
|
import javax.swing.JPanel; |
|
import javax.swing.SwingConstants; |
|
import javax.swing.border.EmptyBorder; |
|
import javax.swing.border.TitledBorder; |
|
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; |
|
|
|
/** |
|
* <p> 开启控件显示增强后替换原通用属性面板 |
|
* <p> 参考{@link com.fr.design.mainframe.mobile.ui.MobileStyleDefinePane} |
|
* |
|
* @author Coral.Chen |
|
* @since 11.0 |
|
* Created on 2023/4/11 |
|
*/ |
|
public class DisplayEnhanceMobileStyleDefinePane extends BasicBeanPane<MobileStyle> { |
|
public static final int NORMAL_COMBO_WIDTH = 152; |
|
protected Widget widget; |
|
protected MobileStyleCustomDefinePane customBeanPane; |
|
protected Class<? extends MobileStyle> mobileStyleClazz; |
|
protected UIComboBox customCombo; |
|
protected JPanel settingPane; |
|
protected NewColorSelectBox themeColorSelectBox; |
|
protected Color titleColor = new Color(47, 142, 241); |
|
protected JPanel commonPane; |
|
protected LineComboBox borderType; |
|
protected NewColorSelectBox borderColorSelectBox; |
|
protected UISpinner borderRadius; |
|
protected MobileStyleFontConfigPane fontConfigPane; |
|
protected NewColorSelectBox widgetBackgroundSelectBox; |
|
protected UIPercentDragPane widgetBgAlphaDragPane; |
|
protected NewColorSelectBox iconColorSelectBox; |
|
|
|
|
|
protected MobileStyle mobileStyle; |
|
|
|
public DisplayEnhanceMobileStyleDefinePane(Widget widget, Class<? extends MobileStyleCustomDefinePane> customBeanPaneClass, |
|
Class<? extends MobileStyle> mobileStyleClazz) { |
|
this.widget = widget; |
|
this.customBeanPane = Reflect.on(customBeanPaneClass).create(widget).get(); |
|
this.mobileStyleClazz = mobileStyleClazz; |
|
// 一些默认的情况,没有,需要初始化一下。 |
|
initMobileStyle(widget); |
|
init(); |
|
} |
|
|
|
private void initMobileStyle(Widget widget) { |
|
mobileStyle = widget.getMobileStyle() != null ? widget.getMobileStyle() : Reflect.on(mobileStyleClazz).create().get(); |
|
} |
|
|
|
@Override |
|
public void populateBean(MobileStyle ob) { |
|
MobileCommonExtraStyle extraStyle = ob.getMobileCommonExtraStyle(); |
|
if (extraStyle instanceof WidgetThemeMobileCommonExtraStyle) { |
|
WidgetThemeMobileCommonExtraStyle style = (WidgetThemeMobileCommonExtraStyle) extraStyle; |
|
customCombo.setSelectedIndex(style.isCustom() ? 1 : 0); |
|
borderType.setSelectedLineStyle(style.getBorderType()); |
|
borderRadius.setValue(style.getBorderRadius()); |
|
if (style.getThemeColor() != null) { |
|
themeColorSelectBox.setSelectObject(style.getThemeColor()); |
|
} |
|
if (style.getNewFont() != null) { |
|
fontConfigPane.populateBean(style.getNewFont()); |
|
} |
|
if (style.getWidgetBackground() != null) { |
|
Color color = ((ColorBackground) style.getWidgetBackground()).getColor(); |
|
widgetBackgroundSelectBox.setSelectObject(ColorUtils.ignoreColorAlpha(color)); |
|
widgetBgAlphaDragPane.populateBean(ColorUtils.roundColorAlphaDouble(color)); |
|
} |
|
if (style.getBorderColor() != null) { |
|
borderColorSelectBox.setSelectObject(style.getBorderColor()); |
|
} |
|
if (style.getIconColor() != null) { |
|
iconColorSelectBox.setSelectObject(style.getIconColor()); |
|
} |
|
} |
|
this.customBeanPane.populateBean(ob); |
|
} |
|
|
|
@Override |
|
public MobileStyle updateBean() { |
|
mobileStyle = Reflect.on(mobileStyleClazz).create().get(); |
|
WidgetThemeMobileCommonExtraStyle extraStyle = new WidgetThemeMobileCommonExtraStyle(); |
|
extraStyle.setCustom(customCombo.getSelectedIndex() == 1); |
|
setThemeColor(extraStyle); |
|
setIconColor(extraStyle); |
|
setBorderType(extraStyle); |
|
setBorderRadius(extraStyle); |
|
setBorderColor(extraStyle); |
|
setFontConfig(extraStyle); |
|
setWidgetBackground(extraStyle); |
|
mobileStyle.setMobileCommonExtraStyle(extraStyle); |
|
this.widget.setMobileStyle(mobileStyle); |
|
this.customBeanPane.updateBean(); |
|
return mobileStyle; |
|
} |
|
|
|
@Override |
|
protected String title4PopupWindow() { |
|
return StringUtils.EMPTY; |
|
} |
|
|
|
private void init() { |
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
|
createGeneralPane(); |
|
createCustomPane(); |
|
} |
|
|
|
protected void createFontPane() { |
|
Color fontColor = ColorUtils.hexToColor(WidgetThemeDesignerUtils.isCurrentTemplateThemeDark() ? WidgetThemeDisplayConstants.COLOR_CCFFFFFF_HEX : WidgetThemeDisplayConstants.COLOR_CC000000_HEX); |
|
fontConfigPane = new MobileStyleFontConfigPane(fontColor); |
|
settingPane.add(createLeftRightComponentsPane(createConfigLabel(Toolkit.i18nText("Fine-Design_Mobile_Widget_Font")), fontConfigPane)); |
|
} |
|
|
|
private void createGeneralPane() { |
|
createPreviewPane(); |
|
createCommonPane(); |
|
} |
|
|
|
private void createPreviewPane() { |
|
JPanel mobileStylePreviewPane = Reflect.on(customBeanPane).call("createPreviewPane").get(); |
|
if (mobileStylePreviewPane != null) { |
|
JPanel previewPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
TitledBorder titledBorder = createTitledBorder(Toolkit.i18nText("Fine-Design_Basic_Widget_Style_Preview")); |
|
previewPane.setBorder(titledBorder); |
|
previewPane.setPreferredSize(new Dimension(500, 83)); |
|
previewPane.add(mobileStylePreviewPane, BorderLayout.CENTER); |
|
this.add(previewPane, BorderLayout.NORTH); |
|
} |
|
} |
|
|
|
private void createCommonPane() { |
|
TitledBorder titledBorder = createTitledBorder(Toolkit.i18nText("Fine-Design_Mobile_Common_Attribute")); |
|
commonPane = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 10); |
|
commonPane.setBorder(titledBorder); |
|
this.add(commonPane, BorderLayout.NORTH); |
|
|
|
|
|
customCombo = new UIComboBox(new String[]{Toolkit.i18nText("Fine-Design_Mobile_Default"), Toolkit.i18nText("Fine-Design_Mobile_Custom")}); |
|
customCombo.setSelectedIndex(0); |
|
customCombo.setPreferredSize(new Dimension(NORMAL_COMBO_WIDTH + 15, 20)); |
|
customCombo.addItemListener(new ItemListener() { |
|
@Override |
|
public void itemStateChanged(ItemEvent e) { |
|
boolean custom = customCombo.getSelectedIndex() == 1; |
|
settingPane.setVisible(custom); |
|
} |
|
}); |
|
commonPane.add(createLeftRightComponentsPane(createConfigLabel(Toolkit.i18nText("Fine-Design_Mobile_Attribute_Settings")), customCombo)); |
|
|
|
settingPane = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 10); |
|
settingPane.setBorder(new EmptyBorder(-10, 0, 0, 0)); |
|
settingPane.setVisible(false); |
|
commonPane.add(settingPane); |
|
createUniversalPane(); |
|
} |
|
|
|
protected void createUniversalPane() { |
|
// 主题色 |
|
createThemePane(); |
|
// 组件背景 |
|
createBackgroundPane(); |
|
// 边框线型 |
|
createBorderLinePane(); |
|
// 圆角边框 |
|
createBorderRadiusPane(); |
|
// 字体 |
|
createFontPane(); |
|
} |
|
|
|
|
|
protected void createBackgroundPane() { |
|
widgetBackgroundSelectBox = new NewColorSelectBox(NORMAL_COMBO_WIDTH); |
|
widgetBgAlphaDragPane = new UIPercentDragPane(); |
|
JPanel widgetBackgroundComponent = WidgetStyleComponentCombiner.combineWidgetBackgroundComponent(widgetBackgroundSelectBox, widgetBgAlphaDragPane, WidgetThemeDisplayConstants.THEME_MOBILE_WIDGET_BACKGROUND_WIDTH); |
|
initBackgroundColor(); |
|
settingPane.add(createLeftRightComponentsPane(createConfigLabel(Toolkit.i18nText("Fine-Design_Mobile_Widget_Background")), widgetBackgroundComponent)); |
|
} |
|
|
|
protected void initBackgroundColor() { |
|
Color widgetBackgroundColor = ColorUtils.hexToColor(WidgetThemeDesignerUtils.isCurrentTemplateThemeDark() ? WidgetThemeDisplayConstants.COLOR_000000_HEX : WidgetThemeDisplayConstants.COLOR_FFFFFF_HEX); |
|
widgetBackgroundSelectBox.setSelectObject(widgetBackgroundColor); |
|
widgetBgAlphaDragPane.populateBean(0); |
|
} |
|
|
|
protected void createThemePane() { |
|
themeColorSelectBox = new NewColorSelectBox(NORMAL_COMBO_WIDTH); |
|
// 默认为当前模板选中的主题色 |
|
themeColorSelectBox.setSelectObject(getCurrentTemplateThemeColor()); |
|
settingPane.add(createLeftRightComponentsPane(createConfigLabel(Toolkit.i18nText("Fine-Design_Basic_Theme_Color")), themeColorSelectBox)); |
|
} |
|
|
|
|
|
protected void createBorderLinePane() { |
|
borderType = new LineComboBox(WidgetThemeDisplayConstants.MOBILE_BORDER_LINE_STYLE_ARRAY); |
|
borderColorSelectBox = new NewColorSelectBox(NORMAL_COMBO_WIDTH); |
|
JPanel borderComponent = WidgetStyleComponentCombiner.combineWidgetBorderComponent(borderType, borderColorSelectBox); |
|
initDefaultBorder(); |
|
borderType.setPreferredSize(new Dimension(NORMAL_COMBO_WIDTH + 15, 20)); |
|
// 边框线型 |
|
settingPane.add(createLeftRightComponentsPane(createConfigLabel(Toolkit.i18nText("Fine-Design_Mobile_Widget_BorderType")), borderComponent)); |
|
} |
|
|
|
protected void initDefaultBorder() { |
|
borderType.setSelectedLineStyle(Constants.LINE_THIN); |
|
borderColorSelectBox.setSelectObject(ColorUtils.hexToColor(WidgetThemeDesignerUtils.isCurrentTemplateThemeDark() ? WidgetThemeDisplayConstants.COLOR_26FFFFFF_HEX : WidgetThemeDisplayConstants.COLOR_26000000_HEX)); |
|
} |
|
|
|
protected void createBorderRadiusPane() { |
|
borderRadius = new UISpinner(0, Integer.MAX_VALUE, 1, 2); |
|
borderRadius.setPreferredSize(new Dimension(NORMAL_COMBO_WIDTH + 20, 20)); |
|
// 圆角边框 |
|
settingPane.add(createLeftRightComponentsPane(createConfigLabel(Toolkit.i18nText("Fine-Design_Mobile_Widget_BorderRadius")), borderRadius)); |
|
} |
|
|
|
protected void createCustomPane() { |
|
JPanel configPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
TitledBorder titledBorder = createTitledBorder(Toolkit.i18nText("Fine-Design_Report_Set")); |
|
configPane.setBorder(titledBorder); |
|
|
|
configPane.add(this.customBeanPane, BorderLayout.CENTER); |
|
|
|
this.add(configPane, BorderLayout.CENTER); |
|
} |
|
|
|
protected TitledBorder createTitledBorder(String title) { |
|
TitledBorder titledBorder = GUICoreUtils.createTitledBorder(title, titleColor); |
|
titledBorder.setTitleFont(FRFont.getInstance("PingFangSC-Regular", Font.PLAIN, 12)); |
|
return titledBorder; |
|
} |
|
|
|
protected UILabel createConfigLabel(String title) { |
|
UILabel label = new UILabel(title, UILabel.LEFT); |
|
label.setVerticalAlignment(SwingConstants.TOP); |
|
label.setPreferredSize(new Dimension(75, 20)); |
|
label.setBorder(new EmptyBorder(0, 15, 0, 0)); |
|
return label; |
|
} |
|
|
|
protected JPanel createLeftRightComponentsPane(Component... components) { |
|
JPanel tableLayoutPane = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{components}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); |
|
return tableLayoutPane; |
|
} |
|
|
|
/** |
|
* 获取当前编辑移动端控件样式主题色 |
|
* |
|
* @return |
|
*/ |
|
protected Color getCurrentTemplateThemeColor() { |
|
JTemplate<?, ?> jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); |
|
Color themeColor = WidgetThemeDisplayConstants.DEFAULT_THEME_COLOR; |
|
if (JTemplate.isValid(jTemplate)) { |
|
MobileThemedWidgetStyle mobileWidgetStyle = (MobileThemedWidgetStyle) jTemplate.getTemplateTheme().getMobileWidgetStyle(); |
|
mobileWidgetStyle = mobileWidgetStyle == null ? new MobileThemedWidgetStyle() : mobileWidgetStyle; |
|
themeColor = mobileWidgetStyle.getThemeColor(); |
|
} |
|
return themeColor; |
|
} |
|
|
|
protected void createIconColorSelectBox() { |
|
iconColorSelectBox = new NewColorSelectBox(NORMAL_COMBO_WIDTH); |
|
iconColorSelectBox.setSelectObject(getCurrentTemplateThemeColor()); |
|
settingPane.add(createLeftRightComponentsPane(createConfigLabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Icon_Color")), iconColorSelectBox)); |
|
} |
|
protected void setThemeColor(WidgetThemeMobileCommonExtraStyle extraStyle) { |
|
if(themeColorSelectBox != null) { |
|
extraStyle.setThemeColor(themeColorSelectBox.getSelectObject()); |
|
} |
|
} |
|
protected void setIconColor(WidgetThemeMobileCommonExtraStyle extraStyle) { |
|
if(iconColorSelectBox != null) { |
|
extraStyle.setIconColor(iconColorSelectBox.getSelectObject()); |
|
} |
|
} |
|
protected void setBorderType(WidgetThemeMobileCommonExtraStyle extraStyle) { |
|
if(borderType != null) { |
|
extraStyle.setBorderType(borderType.getSelectedLineStyle()); |
|
} |
|
} |
|
protected void setBorderRadius(WidgetThemeMobileCommonExtraStyle extraStyle) { |
|
if(borderRadius != null) { |
|
extraStyle.setBorderRadius(borderRadius.getValue()); |
|
} |
|
} |
|
protected void setBorderColor(WidgetThemeMobileCommonExtraStyle extraStyle) { |
|
if(borderColorSelectBox != null) { |
|
extraStyle.setBorderColor(borderColorSelectBox.getSelectObject()); |
|
} |
|
} |
|
protected void setFontConfig(WidgetThemeMobileCommonExtraStyle extraStyle) { |
|
|
|
if(fontConfigPane != null) { |
|
extraStyle.setNewFont(fontConfigPane.updateBean()); |
|
} |
|
} |
|
protected void setWidgetBackground(WidgetThemeMobileCommonExtraStyle extraStyle) { |
|
if(widgetBackgroundSelectBox != null && widgetBgAlphaDragPane != null) { |
|
extraStyle.setWidgetBackground(ColorUtils.createColorBackgroundWithAlpha(widgetBackgroundSelectBox.getSelectObject(), widgetBgAlphaDragPane.updateBean())); |
|
} |
|
} |
|
} |