assistCellList = new ArrayList<>(); // 辅助信息样式单元格
+ private static final int CONTENT_ROW_COUNT = 3;
+ private static final int COL_COUNT = 3;
+
+ private final PreviewPane previewPane;
+
+ public WidgetThemeECReportPreviewPane() {
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ previewPane = new PreviewPane();
+ this.add(previewPane, BorderLayout.CENTER);
+ }
+
+ @Override
+ public void refresh(ReportTheme theme) {
+ previewPane.refresh(theme);
+ }
+
+
+ class PreviewPane extends AbstractECPreviewPane {
+
+
+ public PreviewPane() {
+ this.setPreferredSize(new Dimension(517, 208));
+ this.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 10));
+
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ JPanel northPane = createNorthPane();
+ JPanel centerPane = createCenterPane();
+ JPanel southPane = createSouthPane();
+ this.add(northPane, BorderLayout.NORTH);
+ this.add(centerPane, BorderLayout.CENTER);
+ this.add(southPane, BorderLayout.SOUTH);
+ }
+
+ private JPanel createNorthPane() {
+ JPanel northPane = FRGUIPaneFactory.createBorderLayout_NO_Opaque_Pane();
+ AbstractPreviewCell bigTitleCell = new PreviewCell(Toolkit.i18nText("Fine-Design_Basic_Template_Theme_Profile_Pane_Cell_Style_Big_Title"));
+ bigTitleCell.setBorderSourceFlag(CellBorderSourceFlag.ALL_BORDER_SOURCE_OUTER);
+ bigTitleCell.setPreferredSize(new Dimension(615, 46));
+ headerTitleCellList.add(bigTitleCell);
+ northPane.add(bigTitleCell, BorderLayout.NORTH);
+ CornerPreviewCell cornerCell = createCornerPreviewCell();
+ titleCellList.add(cornerCell);
+ northPane.add(cornerCell, BorderLayout.WEST);
+ JPanel centerPane = FRGUIPaneFactory.createBorderLayout_NO_Opaque_Pane();
+ northPane.add(centerPane, BorderLayout.CENTER);
+ PreviewCell cell = new PreviewCell(Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Small_Title"));
+ cell.setBorderSourceFlag(CellBorderSourceFlag.ALL_BORDER_SOURCE_OUTER);
+ titleCellList.add(cell);
+ cell.setPreferredSize(new Dimension(308, 38));
+ centerPane.add(cell, BorderLayout.NORTH);
+ JPanel eastSouthPane = new UINoOpaquePanel(new GridLayout());
+ for (int c = 0; c < CONTENT_ROW_COUNT; c++) {
+ PreviewCell headerCell = createPreviewCellHeader(c);
+ headerCellList.add(headerCell);
+ eastSouthPane.add(headerCell);
+ }
+ centerPane.add(eastSouthPane, BorderLayout.CENTER);
+ return northPane;
+ }
+
+ /**
+ * 创建CornerPreviewCell
+ */
+ private CornerPreviewCell createCornerPreviewCell() {
+ CornerPreviewCell cornerCell = new CornerPreviewCell(new String[]{Toolkit.i18nText("Fine-Design_Basic_Column_Name"),
+ Toolkit.i18nText("Fine-Design_Basic_Template_Theme_Profile_Pane_EC_Data"), Toolkit.i18nText("Fine-Design_Basic_Template_Theme_Profile_Pane_Row_Name")},
+ new Point2D[]{new Point(159, 71), new Point(225, 49)});
+ cornerCell.setBorderSourceFlag(CellBorderSourceFlag.INVALID_BORDER_SOURCE);
+ cornerCell.setPreferredSize(new Dimension(225, 71));
+ return cornerCell;
+ }
+
+ /**
+ * 创建预览单元格标题
+ *
+ * @param c 文本行数
+ * @return PreviewCell
+ */
+ private PreviewCell createPreviewCellHeader(int c) {
+ PreviewCell headerCell = new PreviewCell(Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Header"));
+ int flag = CellBorderSourceFlag.ALL_BORDER_SOURCE_OUTER;
+ if (c > 0) {
+ flag |= CellBorderSourceFlag.LEFT_BORDER_SOURCE_INNER;
+ }
+ if (c < CONTENT_ROW_COUNT - 1) {
+ flag |= CellBorderSourceFlag.RIGHT_BORDER_SOURCE_INNER;
+ }
+ headerCell.setBorderSourceFlag(flag);
+ return headerCell;
+ }
+
+ private JPanel createCenterPane() {
+ JPanel centerPane = FRGUIPaneFactory.createBorderLayout_NO_Opaque_Pane();
+ JPanel westPane = FRGUIPaneFactory.createBorderLayout_NO_Opaque_Pane();
+ centerPane.add(westPane, BorderLayout.WEST);
+ PreviewCell cell1 = new PreviewCell(Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Small_Title"));
+ titleCellList.add(cell1);
+ cell1.setPreferredSize(new Dimension(112, 93));
+ westPane.add(cell1, BorderLayout.WEST);
+ JPanel gridPane = createGridPane();
+
+ westPane.add(gridPane, BorderLayout.CENTER);
+ JPanel innerCenterPane = new UINoOpaquePanel(new GridLayout(3, 3));
+ centerPane.add(innerCenterPane, BorderLayout.CENTER);
+ for (int i = 0; i < COL_COUNT*CONTENT_ROW_COUNT; i++) {
+ PreviewCell cell ;
+ int r = i / CONTENT_ROW_COUNT;
+ int c = i % CONTENT_ROW_COUNT;
+ if (c == CONTENT_ROW_COUNT - 1) {
+ cell = createPreviewCellHighlight(r);
+ highLightCellList.add(cell);
+ } else {
+ cell = createPreviewCellMain(r, c);
+ contentCellList.add(cell);
+ }
+ cell.setPreferredSize(new Dimension(123, 31));
+ innerCenterPane.add(cell);
+ }
+ return centerPane;
+ }
+
+ /**
+ * 创建高亮预览单元格
+ *
+ * @param r 计算标志位
+ * @return 单元格
+ */
+ private PreviewCell createPreviewCellHighlight(int r) {
+ PreviewCell cell = new PreviewCell(Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Highlight_Text"));
+ int flag = CellBorderSourceFlag.ALL_BORDER_SOURCE_OUTER;
+ if (r != 0) {
+ flag |= CellBorderSourceFlag.TOP_BORDER_SOURCE_INNER;
+ }
+ if (r != COL_COUNT - 1) {
+ flag |= CellBorderSourceFlag.BOTTOM_BORDER_SOURCE_INNER;
+ }
+ cell.setBorderSourceFlag(flag);
+ return cell;
+ }
+
+ /**
+ * 创建正文预览单元格
+ *
+ * @param r 计算标志位
+ * @param c 计算标志位
+ * @return 单元格
+ */
+ private PreviewCell createPreviewCellMain(int r, int c) {
+ PreviewCell cell = new PreviewCell(Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Main_Text"));
+ int flag = CellBorderSourceFlag.ALL_BORDER_SOURCE_OUTER;
+ if (r > 0) {
+ flag |= CellBorderSourceFlag.TOP_BORDER_SOURCE_INNER;
+ }
+ if (r < COL_COUNT - 1) {
+ flag |= CellBorderSourceFlag.BOTTOM_BORDER_SOURCE_INNER;
+ }
+ if (c > 0) {
+ flag |= CellBorderSourceFlag.LEFT_BORDER_SOURCE_INNER;
+ }
+ if (c < 1) {
+ flag |= CellBorderSourceFlag.RIGHT_BORDER_SOURCE_INNER;
+ }
+ cell.setBorderSourceFlag(flag);
+ return cell;
+ }
+
+ private JPanel createGridPane() {
+ int rowCount = 3;
+ int columnCount = 1;
+ JPanel gridPane = new UINoOpaquePanel(new GridLayout(rowCount, columnCount));
+ for (int r = 0; r < rowCount; r++) {
+ PreviewCell cell = new PreviewCell(Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Header"));
+ int flag = CellBorderSourceFlag.ALL_BORDER_SOURCE_OUTER;
+ if (r > 0) {
+ flag |= CellBorderSourceFlag.TOP_BORDER_SOURCE_INNER;
+ }
+ if (r < COL_COUNT - 1) {
+ flag |= CellBorderSourceFlag.BOTTOM_BORDER_SOURCE_INNER;
+ }
+ cell.setBorderSourceFlag(flag);
+ cell.setPreferredSize(new Dimension(113, 31));
+ headerCellList.add(cell);
+ gridPane.add(cell);
+ }
+ return gridPane;
+ }
+
+ private JPanel createSouthPane(){
+ JPanel southPane = FRGUIPaneFactory.createBorderLayout_NO_Opaque_Pane();
+ PreviewCell assistCell = new PreviewCell(Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Assist_Text"));
+ assistCell.setBorderSourceFlag(CellBorderSourceFlag.ALL_BORDER_SOURCE_OUTER);
+ assistCell.setPreferredSize(new Dimension(123, 30));
+ assistCellList.add(assistCell);
+ southPane.add(assistCell, BorderLayout.CENTER);
+ return southPane;
+ }
+
+ @Override
+ public void refresh(TemplateTheme theme) {
+ ThemedCellStyleList cellStyleConfig = theme.getCellStyleList();
+ refresh(headerTitleCellList, cellStyleConfig.getUse4BigTitle());
+ refresh(headerCellList, cellStyleConfig.getUse4Header());
+ refresh(contentCellList, cellStyleConfig.getUse4MainText());
+ refresh(titleCellList, cellStyleConfig.getUse4SmallTitle());
+ refresh(highLightCellList, cellStyleConfig.getUse4HighlightText());
+ refresh(assistCellList, cellStyleConfig.getUse4SupportInfo());
+ }
+ }
+}
\ No newline at end of file
diff --git a/designer-base/src/main/java/com/fr/widgettheme/util/ThemePreviewPaneInitHelper.java b/designer-base/src/main/java/com/fr/widgettheme/util/ThemePreviewPaneInitHelper.java
new file mode 100644
index 0000000000..c7adedbbc7
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/widgettheme/util/ThemePreviewPaneInitHelper.java
@@ -0,0 +1,70 @@
+package com.fr.widgettheme.util;
+
+import com.fr.base.BaseFormula;
+import com.fr.chart.chartattr.Title;
+import com.fr.design.i18n.Toolkit;
+import com.fr.plugin.chart.attr.axis.VanChartAxis;
+import com.fr.plugin.chart.base.AttrLabel;
+import com.fr.plugin.chart.base.VanChartTools;
+import com.fr.plugin.chart.column.VanChartColumnPlot;
+import com.fr.plugin.chart.type.GradientType;
+
+/**
+ * 辅助report和form的控件显示主题预览窗口做初始化工作
+ * 没有其他的用途,不要用在其他的地方,只是抽一些方法出来,降低复杂度
+ *
+ * @author obo
+ * @since 11.0
+ * Created on 2023/11/14
+ */
+public class ThemePreviewPaneInitHelper {
+ private ThemePreviewPaneInitHelper() {
+ }
+
+ /**
+ * 初始化图表工具
+ *
+ * @param vanChartTools 图表工具
+ */
+ public static void initVanChartsTools(VanChartTools vanChartTools) {
+ vanChartTools.setSort(false);
+ vanChartTools.setExport(false);
+ vanChartTools.setFullScreen(false);
+ }
+
+ /**
+ * 初始化柱形图绘图区
+ *
+ * @param plot 绘图区
+ */
+ public static void initColumnPlot(VanChartColumnPlot plot) {
+ AttrLabel defaultAttrLabel = plot.getDefaultAttrLabel();
+ defaultAttrLabel.setEnable(true);
+ defaultAttrLabel.getAttrLabelDetail().getBorder().setBorderStyle(0);
+ defaultAttrLabel.getAttrLabelDetail().getBackground().setBackground(null);
+ plot.getConditionCollection().getDefaultAttr().addDataSeriesCondition(defaultAttrLabel);
+ plot.getGradientStyle().setGradientType(GradientType.NONE);
+ plot.setSeriesOverlapPercent(30);
+ plot.setCategoryIntervalPercent(30);
+ }
+
+ /**
+ * 初始化图表Y轴
+ *
+ * @param yAxis 轴
+ */
+ public static void initVanChartYAxis(VanChartAxis yAxis) {
+ Title title = new Title();
+ title.setTextObject(Toolkit.i18nText("Fine-Design_Chart_Axis_Title"));
+ title.getTextAttr().setRotation(-90);
+ title.getTextAttr().setThemed(true);
+ yAxis.setTitle(title);
+ yAxis.setShowAxisTitle(true);
+ yAxis.setCustomMaxValue(true);
+ yAxis.setCustomMinValue(true);
+ yAxis.setCustomMainUnit(true);
+ yAxis.setMaxValue(BaseFormula.createFormulaBuilder().build("=600"));
+ yAxis.setMinValue(BaseFormula.createFormulaBuilder().build("=0"));
+ yAxis.setMainUnit(BaseFormula.createFormulaBuilder().build("=200"));
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/widgettheme/util/ThemeTextStylePaneCreator.java b/designer-base/src/main/java/com/fr/widgettheme/util/ThemeTextStylePaneCreator.java
new file mode 100644
index 0000000000..133f258646
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/widgettheme/util/ThemeTextStylePaneCreator.java
@@ -0,0 +1,40 @@
+package com.fr.widgettheme.util;
+
+import com.fr.design.gui.frpane.FontSizeComboPane;
+import com.fr.design.gui.ibutton.UIColorButton;
+import com.fr.design.layout.TableLayout;
+import com.fr.design.layout.TableLayoutHelper;
+
+import javax.swing.Box;
+import javax.swing.JPanel;
+import java.awt.Component;
+
+/**
+ * 创建主题文本样式的工具类
+ *
+ * @author obo
+ * @since 11.0
+ * Created on 2023/12/21
+ */
+public class ThemeTextStylePaneCreator {
+ private ThemeTextStylePaneCreator() {}
+
+ /**
+ * 创建主题文本样式配置面板
+ * 包含字体大小下拉框和字体颜色按钮
+ * 可以自适应布局
+ *
+ * @param fontSizePane 字体大小配置
+ * @param fontColorButton 字体颜色配置
+ * @return 文本样式面板
+ */
+ public static JPanel create(FontSizeComboPane fontSizePane, UIColorButton fontColorButton) {
+ Component[][] components = {{fontSizePane, Box.createHorizontalStrut(5), fontColorButton}};
+ double f = TableLayout.FILL;
+ double p = TableLayout.PREFERRED;
+ double[] rowSize = {f};
+ double[] columnSize = {f, p, p};
+ int[][] rowCount = {{1, 1, 1}};
+ return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, 0, 0);
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/widgettheme/util/WidgetThemeDesignerUtils.java b/designer-base/src/main/java/com/fr/widgettheme/util/WidgetThemeDesignerUtils.java
new file mode 100644
index 0000000000..296b5e2e5b
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/widgettheme/util/WidgetThemeDesignerUtils.java
@@ -0,0 +1,46 @@
+package com.fr.widgettheme.util;
+
+import com.fr.base.io.AttrMark;
+import com.fr.base.io.IOFile;
+import com.fr.design.file.HistoryTemplateListCache;
+import com.fr.design.mainframe.JTemplate;
+import com.fr.stable.StringUtils;
+import com.fr.widgettheme.control.attr.WidgetDisplayEnhanceMarkAttr;
+
+/**
+ * 控件主题设计器部分工具类
+ *
+ * @author obo
+ * @since 11.0
+ * Created on 2023/11/13
+ */
+public class WidgetThemeDesignerUtils {
+
+ private WidgetThemeDesignerUtils() {
+ }
+
+ /**
+ * 从 WorkBook 中加载 WatermarkAttr 属性对象
+ *
+ * @param template AttrMark 对象,包括 WorkBook
+ * @return StrongestControlMarkAttr 对象
+ */
+ public static WidgetDisplayEnhanceMarkAttr getStrongestControlAttrFromTemplate(AttrMark template) {
+ return template.getAttrMark(WidgetDisplayEnhanceMarkAttr.XML_TAG);
+ }
+
+ /**
+ * 判断是否启用了控件显示增强
+ *
+ * @return 开启与否
+ */
+ public static boolean enableWidgetEnhance() {
+ JTemplate, ?> jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
+ if (JTemplate.isValid(jTemplate)) {
+ IOFile ioFile = (IOFile) jTemplate.getTarget();
+ WidgetDisplayEnhanceMarkAttr mark = ioFile.getAttrMark(WidgetDisplayEnhanceMarkAttr.XML_TAG);
+ return mark != null && mark.isWidgetEnhance();
+ }
+ return false;
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/DisplayEnhanceMobileStyleDefinePane.java b/designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/DisplayEnhanceMobileStyleDefinePane.java
new file mode 100644
index 0000000000..a0ed4159c7
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/DisplayEnhanceMobileStyleDefinePane.java
@@ -0,0 +1,273 @@
+package com.fr.widgettheme.widget.mobile.pane;
+
+import com.fr.base.background.ColorBackground;
+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.ColorSelectBox;
+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 javax.swing.JPanel;
+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;
+
+/**
+ * 开启控件显示增强后替换原通用属性面板
+ *
参考{@link com.fr.design.mainframe.mobile.ui.MobileStyleDefinePane}
+ *
+ * @author Coral.Chen
+ * @since 11.0
+ * Created on 2023/4/11
+ */
+public class DisplayEnhanceMobileStyleDefinePane extends BasicBeanPane {
+ 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 UISpinner borderRadius;
+ protected MobileStyleFontConfigPane fontConfigPane;
+ protected ColorSelectBox widgetBackgroundSelectBox;
+
+ 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) {
+ widgetBackgroundSelectBox.setSelectObject(((ColorBackground) style.getWidgetBackground()).getColor());
+ }
+ }
+ this.customBeanPane.populateBean(ob);
+ }
+
+ @Override
+ public MobileStyle updateBean() {
+ mobileStyle = Reflect.on(mobileStyleClazz).create().get();
+ WidgetThemeMobileCommonExtraStyle extraStyle = new WidgetThemeMobileCommonExtraStyle();
+ extraStyle.setCustom(customCombo.getSelectedIndex() == 1);
+ extraStyle.setThemeColor(themeColorSelectBox.getSelectObject());
+ extraStyle.setBorderType(borderType.getSelectedLineStyle());
+ extraStyle.setBorderRadius(borderRadius.getValue());
+ extraStyle.setNewFont(fontConfigPane.updateBean());
+ extraStyle.setWidgetBackground(ColorBackground.getInstance(widgetBackgroundSelectBox.getSelectObject()));
+ 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 defaultFontColor) {
+ fontConfigPane = new MobileStyleFontConfigPane(defaultFontColor);
+ 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(WidgetThemeDisplayConstants.DEFAULT_FONT_COLOR_BLACK);
+ }
+
+
+ protected void createBackgroundPane() {
+ widgetBackgroundSelectBox = new ColorSelectBox(NORMAL_COMBO_WIDTH);
+ initBackgroundColor();
+ JPanel backgroundPane = createLeftRightComponentsPane(createConfigLabel(Toolkit.i18nText("Fine-Design_Mobile_Widget_Background")), widgetBackgroundSelectBox);
+ settingPane.add(backgroundPane);
+ }
+
+ protected void initBackgroundColor() {
+ widgetBackgroundSelectBox.setSelectObject(WidgetThemeDisplayConstants.DEFAULT_TRANSPARENT_COLOR);
+ }
+
+ 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);
+ initDefaultLineType();
+ borderType.setPreferredSize(new Dimension(NORMAL_COMBO_WIDTH + 15, 20));
+ // 边框线型
+ settingPane.add(createLeftRightComponentsPane(createConfigLabel(Toolkit.i18nText("Fine-Design_Mobile_Widget_BorderType")), borderType));
+ }
+
+ protected void initDefaultLineType() {
+ borderType.setSelectedLineStyle(Constants.LINE_THIN);
+ }
+
+ 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.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;
+ }
+}
\ No newline at end of file
diff --git a/designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/FileEditorMobileStyleDefinePane.java b/designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/FileEditorMobileStyleDefinePane.java
new file mode 100644
index 0000000000..801585f429
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/FileEditorMobileStyleDefinePane.java
@@ -0,0 +1,59 @@
+package com.fr.widgettheme.widget.mobile.pane;
+
+import com.fr.base.background.ColorBackground;
+import com.fr.widgettheme.theme.widget.mobile.style.FileEditorStyle;
+import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane;
+import com.fr.form.ui.Widget;
+import com.fr.form.ui.mobile.MobileCommonExtraStyle;
+import com.fr.form.ui.mobile.MobileStyle;
+import com.fr.invoke.Reflect;
+
+/**
+ * 文件属性定义面板
+ *
+ * @author Coral.Chen
+ * @since 11.0
+ * Created on 2023/5/19
+ */
+public class FileEditorMobileStyleDefinePane extends DisplayEnhanceMobileStyleDefinePane {
+
+ public FileEditorMobileStyleDefinePane(Widget widget, Class extends MobileStyleCustomDefinePane> customBeanPaneClass, Class extends MobileStyle> mobileStyleClazz) {
+ super(widget, customBeanPaneClass, mobileStyleClazz);
+ }
+
+ @Override
+ public void populateBean(MobileStyle ob) {
+ MobileCommonExtraStyle extraStyle = ob.getMobileCommonExtraStyle();
+ if (extraStyle instanceof FileEditorStyle) {
+ FileEditorStyle style = (FileEditorStyle) extraStyle;
+ customCombo.setSelectedIndex(style.isCustom() ? 1 : 0);
+ if (style.getWidgetBackground() != null) {
+ widgetBackgroundSelectBox.setSelectObject(((ColorBackground) style.getWidgetBackground()).getColor());
+ }
+ borderType.setSelectedLineStyle(style.getBorderType());
+ borderRadius.setValue(style.getBorderRadius());
+ }
+ this.customBeanPane.populateBean(ob);
+ }
+
+ @Override
+ public MobileStyle updateBean() {
+ mobileStyle = Reflect.on(mobileStyleClazz).create().get();
+ FileEditorStyle extraStyle = new FileEditorStyle();
+ extraStyle.setCustom(customCombo.getSelectedIndex() == 1);
+ extraStyle.setWidgetBackground(ColorBackground.getInstance(widgetBackgroundSelectBox.getSelectObject()));
+ extraStyle.setBorderType(borderType.getSelectedLineStyle());
+ extraStyle.setBorderRadius(borderRadius.getValue());
+ mobileStyle.setMobileCommonExtraStyle(extraStyle);
+ this.widget.setMobileStyle(mobileStyle);
+ this.customBeanPane.updateBean();
+ return mobileStyle;
+ }
+
+ @Override
+ protected void createUniversalPane() {
+ createBackgroundPane();
+ createBorderLinePane();
+ createBorderRadiusPane();
+ }
+}
\ No newline at end of file
diff --git a/designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/FreeButtonMobileStyleDefinePane.java b/designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/FreeButtonMobileStyleDefinePane.java
new file mode 100644
index 0000000000..6ab19b8dcf
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/FreeButtonMobileStyleDefinePane.java
@@ -0,0 +1,93 @@
+package com.fr.widgettheme.widget.mobile.pane;
+
+import com.fr.base.background.ColorBackground;
+import com.fr.widgettheme.theme.widget.mobile.style.FreeButtonStyle;
+import com.fr.design.i18n.Toolkit;
+import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane;
+import com.fr.design.style.color.NewColorSelectBox;
+import com.fr.form.ui.Widget;
+import com.fr.form.ui.mobile.MobileCommonExtraStyle;
+import com.fr.form.ui.mobile.MobileStyle;
+import com.fr.invoke.Reflect;
+import com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants;
+
+/**
+ * 按钮控件通用属性面板
+ *
+ * @author Coral.Chen
+ * @since 11.0
+ * Created on 2023/5/25
+ */
+public class FreeButtonMobileStyleDefinePane extends DisplayEnhanceMobileStyleDefinePane {
+ private NewColorSelectBox borderColorSelectBox;
+ private NewColorSelectBox iconColorSelectBox;
+
+
+ public FreeButtonMobileStyleDefinePane(Widget widget, Class extends MobileStyleCustomDefinePane> customBeanPaneClass, Class extends MobileStyle> mobileStyleClazz) {
+ super(widget, customBeanPaneClass, mobileStyleClazz);
+ }
+
+ @Override
+ public void populateBean(MobileStyle ob) {
+ super.populateBean(ob);
+ MobileCommonExtraStyle extraStyle = ob.getMobileCommonExtraStyle();
+ if (extraStyle instanceof FreeButtonStyle) {
+ FreeButtonStyle style = (FreeButtonStyle) extraStyle;
+ if (style.getBorderColor() != null) {
+ borderColorSelectBox.setSelectObject(style.getBorderColor());
+ }
+ if (style.getIconColor() != null) {
+ iconColorSelectBox.setSelectObject(style.getIconColor());
+ }
+ }
+ }
+
+ @Override
+ public MobileStyle updateBean() {
+ mobileStyle = Reflect.on(mobileStyleClazz).create().get();
+ FreeButtonStyle extraStyle = new FreeButtonStyle();
+ extraStyle.setCustom(customCombo.getSelectedIndex() == 1);
+ extraStyle.setWidgetBackground(ColorBackground.getInstance(widgetBackgroundSelectBox.getSelectObject()));
+ extraStyle.setBorderType(borderType.getSelectedLineStyle());
+ extraStyle.setBorderColor(borderColorSelectBox.getSelectObject());
+ extraStyle.setBorderRadius(borderRadius.getValue());
+ extraStyle.setNewFont(fontConfigPane.updateBean());
+ extraStyle.setIconColor(iconColorSelectBox.getSelectObject());
+ mobileStyle.setMobileCommonExtraStyle(extraStyle);
+ this.widget.setMobileStyle(mobileStyle);
+ this.customBeanPane.updateBean();
+ return mobileStyle;
+ }
+
+ @Override
+ protected void createUniversalPane() {
+ createBackgroundPane();
+ createBorderLinePane();
+ initBorderColor();
+ createBorderRadiusPane();
+ initIconColor();
+ createFontPane(WidgetThemeDisplayConstants.DEFAULT_WHITE_COLOR);
+ }
+
+ private void initIconColor() {
+ iconColorSelectBox = new NewColorSelectBox(NORMAL_COMBO_WIDTH);
+ iconColorSelectBox.setSelectObject(WidgetThemeDisplayConstants.DEFAULT_WHITE_COLOR);
+ settingPane.add(createLeftRightComponentsPane(createConfigLabel(Toolkit.i18nText("Fine-Design_Mobile_Widget_Icon_Color")), iconColorSelectBox));
+ }
+
+ @Override
+ protected void initDefaultLineType() {
+ borderType.setSelectedLineStyle(com.fr.stable.Constants.LINE_NONE);
+ }
+
+ private void initBorderColor() {
+ borderColorSelectBox = new NewColorSelectBox(NORMAL_COMBO_WIDTH);
+ borderColorSelectBox.setSelectObject(WidgetThemeDisplayConstants.DEFAULT_THEME_COLOR);
+ settingPane.add(createLeftRightComponentsPane(createConfigLabel(Toolkit.i18nText("Fine-Design_Mobile_Widget_BorderColor")), borderColorSelectBox));
+ }
+
+ @Override
+ protected void initBackgroundColor() {
+ widgetBackgroundSelectBox.setSelectObject(getCurrentTemplateThemeColor());
+ }
+}
\ No newline at end of file
diff --git a/designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/LabelMobileStyleDefinePane.java b/designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/LabelMobileStyleDefinePane.java
new file mode 100644
index 0000000000..17388b859d
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/LabelMobileStyleDefinePane.java
@@ -0,0 +1,77 @@
+package com.fr.widgettheme.widget.mobile.pane;
+
+import com.fr.base.background.ColorBackground;
+import com.fr.widgettheme.theme.widget.mobile.style.LabelIconSettingStyle;
+import com.fr.design.i18n.Toolkit;
+import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane;
+import com.fr.design.style.color.NewColorSelectBox;
+import com.fr.form.ui.Widget;
+import com.fr.form.ui.mobile.MobileCommonExtraStyle;
+import com.fr.form.ui.mobile.MobileStyle;
+import com.fr.invoke.Reflect;
+import com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants;
+
+/**
+ * 标签控件属性定义面板
+ *
+ * @author Coral.Chen
+ * @since 11.0
+ * Created on 2023/5/15
+ */
+public class LabelMobileStyleDefinePane extends DisplayEnhanceMobileStyleDefinePane {
+ private NewColorSelectBox borderColorSelectBox;
+
+ public LabelMobileStyleDefinePane(Widget widget, Class extends MobileStyleCustomDefinePane> customBeanPaneClass,
+ Class extends MobileStyle> mobileStyleClazz) {
+ super(widget, customBeanPaneClass, mobileStyleClazz);
+ }
+
+
+ @Override
+ public void populateBean(MobileStyle ob) {
+ super.populateBean(ob);
+ MobileCommonExtraStyle extraStyle = ob.getMobileCommonExtraStyle();
+ if (extraStyle instanceof LabelIconSettingStyle) {
+ LabelIconSettingStyle style = (LabelIconSettingStyle) extraStyle;
+ if (style.getBorderColor() != null) {
+ borderColorSelectBox.setSelectObject(style.getBorderColor());
+ }
+ }
+ }
+
+ @Override
+ public MobileStyle updateBean() {
+ mobileStyle = Reflect.on(mobileStyleClazz).create().get();
+ LabelIconSettingStyle extraStyle = new LabelIconSettingStyle();
+ extraStyle.setCustom(customCombo.getSelectedIndex() == 1);
+ extraStyle.setWidgetBackground(ColorBackground.getInstance(widgetBackgroundSelectBox.getSelectObject()));
+ extraStyle.setBorderType(borderType.getSelectedLineStyle());
+ extraStyle.setBorderColor(borderColorSelectBox.getSelectObject());
+ extraStyle.setBorderRadius(borderRadius.getValue());
+ extraStyle.setNewFont(fontConfigPane.updateBean());
+ mobileStyle.setMobileCommonExtraStyle(extraStyle);
+ this.widget.setMobileStyle(mobileStyle);
+ this.customBeanPane.updateBean();
+ return mobileStyle;
+ }
+
+ @Override
+ protected void createUniversalPane() {
+ createBackgroundPane();
+ createBorderLinePane();
+ initBorderColor();
+ createBorderRadiusPane();
+ createFontPane(WidgetThemeDisplayConstants.DEFAULT_FONT_COLOR_BLACK);
+ }
+
+ private void initBorderColor() {
+ borderColorSelectBox = new NewColorSelectBox(NORMAL_COMBO_WIDTH);
+ borderColorSelectBox.setSelectObject(WidgetThemeDisplayConstants.DEFAULT_TRANSPARENT_COLOR);
+ settingPane.add(createLeftRightComponentsPane(createConfigLabel(Toolkit.i18nText("Fine-Design_Mobile_Widget_BorderColor")), borderColorSelectBox));
+ }
+
+ @Override
+ protected void initDefaultLineType() {
+ borderType.setSelectedLineStyle(com.fr.stable.Constants.LINE_NONE);
+ }
+}
\ No newline at end of file
diff --git a/designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/MobileStyleFontConfigPane.java b/designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/MobileStyleFontConfigPane.java
new file mode 100644
index 0000000000..6b02ec9ff0
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/MobileStyleFontConfigPane.java
@@ -0,0 +1,151 @@
+package com.fr.widgettheme.widget.mobile.pane;
+
+
+import com.fr.base.BaseUtils;
+import com.fr.design.constants.LayoutConstants;
+import com.fr.design.gui.ibutton.UIColorButton;
+import com.fr.design.gui.ibutton.UIToggleButton;
+import com.fr.design.gui.icombobox.UIComboBox;
+import com.fr.design.gui.icombobox.UIComboBoxRenderer;
+import com.fr.design.i18n.Toolkit;
+import com.fr.design.utils.gui.GUICoreUtils;
+import com.fr.general.FRFont;
+import com.fr.stable.Constants;
+import com.fr.stable.StringUtils;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.border.EmptyBorder;
+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.util.Vector;
+
+/**
+ * 移动端字体面板
+ *
+ * @author Coral.Chen
+ * @since 11.0
+ * Created on 2023/5/22
+ */
+public class MobileStyleFontConfigPane extends JPanel {
+ public static final int FONT_NONE = 0;
+ private static final int MAX_FONT_SIZE = 18;
+ private static final int MIN_FONT_SIZE = 12;
+ private static final Dimension BUTTON_SIZE = new Dimension(20, 18);
+
+ /**
+ * 获取字体大小集合
+ *
+ * @return 字体大小集合
+ */
+ public static Vector getFontSizes() {
+ Vector fontSizes = new Vector();
+ for (int i = MIN_FONT_SIZE; i <= MAX_FONT_SIZE; i++) {
+ fontSizes.add(i);
+ }
+ return fontSizes;
+ }
+
+ private UIComboBox fontSizeComboBox;
+ private UIColorButton color;
+ private UIToggleButton italic;
+ private UIToggleButton bold;
+
+ public MobileStyleFontConfigPane() {
+ this.initComponent(new Color(0, 0, 0));
+ }
+
+ public MobileStyleFontConfigPane(Color defaultFontColor) {
+ this.initComponent(defaultFontColor);
+ }
+
+ private void initComponent(Color defaultFontColor) {
+ fontSizeComboBox = new UIComboBox();
+ fontSizeComboBox.setModel(new DefaultComboBoxModel(getFontSizes()));
+ fontSizeComboBox.setSelectedItem(16);
+ fontSizeComboBox.setPreferredSize(new Dimension(60, 20));
+ fontSizeComboBox.setRenderer(new LineCellRenderer());
+ color = new UIColorButton();
+ color.setColor(defaultFontColor);
+ italic = new UIToggleButton(BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/italic.png"));
+ bold = new UIToggleButton(BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/bold.png"));
+
+ this.setButtonsTips();
+ this.setButtonsSize(BUTTON_SIZE);
+
+ Component[] componentFont = new Component[]{
+ fontSizeComboBox, color, italic, bold
+ };
+
+ JPanel buttonPane = new JPanel(new BorderLayout());
+ JPanel flowPane = GUICoreUtils.createFlowPane(componentFont, FlowLayout.LEFT, LayoutConstants.HGAP_LARGE);
+ // 4是flowPane的默认横向gap,但会导致最左边的控件和边上也有4的间隙,调整一下
+ flowPane.setBorder(new EmptyBorder(0, -LayoutConstants.HGAP_LARGE, 0, 0));
+ buttonPane.add(flowPane);
+
+ this.setLayout(new BorderLayout(0, 0));
+ this.add(buttonPane, BorderLayout.CENTER);
+ }
+
+ private void setButtonsTips() {
+ color.setToolTipText(Toolkit.i18nText("Fine-Design_Report_Foreground"));
+ italic.setToolTipText(Toolkit.i18nText("Fine-Design_Report_Italic"));
+ bold.setToolTipText(Toolkit.i18nText("Fine-Design_Report_Bold"));
+ }
+
+ private void setButtonsSize(Dimension size) {
+ color.setPreferredSize(size);
+ italic.setPreferredSize(size);
+ bold.setPreferredSize(size);
+ }
+
+ /**
+ * 填充字体
+ *
+ * @param frFont 字体
+ */
+ public void populateBean(FRFont frFont) {
+ fontSizeComboBox.setSelectedItem(frFont.getSize());
+ color.setColor(frFont.getForeground());
+ bold.setSelected(frFont.isBold());
+ italic.setSelected(frFont.isItalic());
+ }
+
+ /**
+ * 更新字体
+ */
+ public FRFont updateBean() {
+ int style = Font.PLAIN;
+ style += this.bold.isSelected() ? Font.BOLD : Font.PLAIN;
+ style += this.italic.isSelected() ? Font.ITALIC : Font.PLAIN;
+ return FRFont.getInstance(
+ FRFont.DEFAULT_FONTNAME,
+ style,
+ Float.parseFloat(fontSizeComboBox.getSelectedItem().toString()),
+ color.getColor(),
+ Constants.LINE_NONE
+ );
+ }
+
+ private class LineCellRenderer extends UIComboBoxRenderer {
+ public LineCellRenderer() {
+ super();
+ }
+
+ public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+ JLabel renderer = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
+ int currentValue = ((Integer) value).intValue();
+ if (currentValue == com.fr.design.mainframe.mobile.ui.MobileStyleFontConfigPane.FONT_NONE) {
+ renderer.setText(StringUtils.BLANK + Toolkit.i18nText("Fine-Design_Report_None"));
+ }
+ return renderer;
+ }
+ }
+
+}
diff --git a/designer-base/src/main/java/com/fr/widgettheme/widget/mobile/provider/DisplayEnhanceMobileStyleFactory.java b/designer-base/src/main/java/com/fr/widgettheme/widget/mobile/provider/DisplayEnhanceMobileStyleFactory.java
new file mode 100644
index 0000000000..53650ca5d2
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/widgettheme/widget/mobile/provider/DisplayEnhanceMobileStyleFactory.java
@@ -0,0 +1,65 @@
+package com.fr.widgettheme.widget.mobile.provider;
+
+import com.fr.widgettheme.widget.mobile.pane.FileEditorMobileStyleDefinePane;
+import com.fr.widgettheme.widget.mobile.pane.FreeButtonMobileStyleDefinePane;
+import com.fr.widgettheme.widget.mobile.pane.LabelMobileStyleDefinePane;
+import com.fr.widgettheme.theme.widget.mobile.style.FileEditorStyle;
+import com.fr.widgettheme.theme.widget.mobile.style.FreeButtonStyle;
+import com.fr.widgettheme.theme.widget.mobile.style.LabelIconSettingStyle;
+import com.fr.design.beans.BasicBeanPane;
+import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane;
+import com.fr.form.ui.FreeButton;
+import com.fr.form.ui.Label;
+import com.fr.form.ui.MultiFileEditor;
+import com.fr.form.ui.Widget;
+import com.fr.form.ui.mobile.MobileCommonExtraStyle;
+import com.fr.form.ui.mobile.MobileStyle;
+
+/**
+ * 样式创建工厂
+ *
+ * @author Coral.Chen
+ * @since 11.0
+ * Created on 2023/5/15
+ */
+public class DisplayEnhanceMobileStyleFactory {
+
+ /**
+ * 先写个简单工厂处理一下特殊的控件
+ *
+ * @param widget
+ * @return 特殊控件的通用属性面板
+ */
+ public static BasicBeanPane createWidgetMobileStyleDefinePane(Widget widget, Class extends MobileStyleCustomDefinePane> customDefinePane, Class extends MobileStyle> mobileStyle) {
+ if (widget instanceof Label) {
+ return new LabelMobileStyleDefinePane(widget, customDefinePane, mobileStyle);
+ }
+ if (widget instanceof MultiFileEditor) {
+ return new FileEditorMobileStyleDefinePane(widget, customDefinePane, mobileStyle);
+ }
+ if (widget instanceof FreeButton) {
+ return new FreeButtonMobileStyleDefinePane(widget, customDefinePane, mobileStyle);
+ }
+ return null;
+ }
+
+ /**
+ * 生成控件移动端通用属性
+ *
+ * @param widget
+ * @return
+ */
+ public static Class extends MobileCommonExtraStyle> classForWidgetCommonExtraStyle(Widget widget) {
+ if (widget instanceof Label) {
+ return LabelIconSettingStyle.class;
+ }
+ if (widget instanceof MultiFileEditor) {
+ return FileEditorStyle.class;
+ }
+ if (widget instanceof FreeButton) {
+ return FreeButtonStyle.class;
+ }
+ return null;
+ }
+
+}
\ No newline at end of file
diff --git a/designer-base/src/main/java/com/fr/widgettheme/widget/mobile/provider/WidgetThemeMobileStyleDefinePaneCreator.java b/designer-base/src/main/java/com/fr/widgettheme/widget/mobile/provider/WidgetThemeMobileStyleDefinePaneCreator.java
new file mode 100644
index 0000000000..a40199327b
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/widgettheme/widget/mobile/provider/WidgetThemeMobileStyleDefinePaneCreator.java
@@ -0,0 +1,84 @@
+package com.fr.widgettheme.widget.mobile.provider;
+
+import com.fr.base.io.IOFile;
+import com.fr.widgettheme.widget.mobile.pane.DisplayEnhanceMobileStyleDefinePane;
+import com.fr.widgettheme.theme.widget.mobile.style.WidgetThemeMobileCommonExtraStyle;
+import com.fr.design.beans.BasicBeanPane;
+import com.fr.design.file.HistoryTemplateListCache;
+import com.fr.design.mainframe.JTemplate;
+import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane;
+import com.fr.form.ui.FreeButton;
+import com.fr.form.ui.Label;
+import com.fr.form.ui.MultiFileEditor;
+import com.fr.form.ui.Widget;
+import com.fr.form.ui.mobile.MobileCommonExtraStyle;
+import com.fr.form.ui.mobile.MobileStyle;
+import com.fr.log.FineLoggerFactory;
+import com.fr.widgettheme.control.attr.WidgetDisplayEnhanceMarkAttr;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * 控件主题移动端样式窗口创建类
+ *
+ * @author obo
+ * @since 11.0
+ * Created on 2023/11/13
+ */
+public class WidgetThemeMobileStyleDefinePaneCreator {
+
+ private WidgetThemeMobileStyleDefinePaneCreator() {
+ }
+
+ /**
+ * 创建移动端控件样式属性窗口
+ *
+ * @param widget 控件
+ * @param customDefinePane 窗口类
+ * @param mobileStyle 样式类
+ * @return 窗口
+ */
+ public static BasicBeanPane createBaseBeanPane(Widget widget, Class extends MobileStyleCustomDefinePane> customDefinePane, Class extends MobileStyle> mobileStyle) {
+ try {
+ JTemplate, ?> jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
+ if (JTemplate.isValid(jTemplate)) {
+ IOFile ioFile = (IOFile) jTemplate.getTarget();
+ WidgetDisplayEnhanceMarkAttr mark = ioFile.getAttrMark(WidgetDisplayEnhanceMarkAttr.XML_TAG);
+ if (mark != null && mark.isWidgetEnhance()) {
+ if (commonWidget(widget)) {
+ return new DisplayEnhanceMobileStyleDefinePane(widget, customDefinePane, mobileStyle);
+ } else {
+ return DisplayEnhanceMobileStyleFactory.createWidgetMobileStyleDefinePane(widget, customDefinePane, mobileStyle);
+ }
+ }
+ }
+ } catch (Exception e) {
+ FineLoggerFactory.getLogger().error("[Strongest-Control]: create base bean pane failed.", e);
+ }
+ return null;
+ }
+
+ /**
+ * 根据控件获取通用扩展属性类
+ *
+ * @param widget 控件
+ * @return class
+ */
+ public static @NotNull Class extends MobileCommonExtraStyle> classForCommonExtraStyle(Widget widget) {
+ if (commonWidget(widget)) {
+ return WidgetThemeMobileCommonExtraStyle.class;
+ } else {
+ return DisplayEnhanceMobileStyleFactory.classForWidgetCommonExtraStyle(widget);
+ }
+ }
+
+ /**
+ * 是否为普通控件
+ * 按钮控件、标签控件、文件控件需要特殊处理
+ *
+ * @param widget 控件
+ * @return 是/否
+ */
+ private static boolean commonWidget(Widget widget) {
+ return !((widget instanceof FreeButton) || (widget instanceof Label) || (widget instanceof MultiFileEditor));
+ }
+}
diff --git a/designer-base/src/main/resources/com/fr/design/i18n/dimension_en.properties b/designer-base/src/main/resources/com/fr/design/i18n/dimension_en.properties
index 5098bc3c97..bf7aba4f40 100644
--- a/designer-base/src/main/resources/com/fr/design/i18n/dimension_en.properties
+++ b/designer-base/src/main/resources/com/fr/design/i18n/dimension_en.properties
@@ -25,3 +25,5 @@ com.fr.design.plugin.remind.PluginInvalidateRemindDialog.centerPane=580*369
com.fr.design.report.WatermarkSettingPane=720*600
com.fr.design.file.MultiTemplateTabPane.popUpMenu=350*65
com.fr.design.data.datapane.preview.desensitization.view.rule.DesensitizationRuleChoosePane.ruleEditPane=800*600
+com.fr.design.formula.FormulaPane=900*600
+com.fr.design.formula.FormulaPaneWhenReserveFormula=1200*600
diff --git a/designer-base/src/main/resources/com/fr/design/i18n/dimension_ja_JP.properties b/designer-base/src/main/resources/com/fr/design/i18n/dimension_ja_JP.properties
index 6c3ac0e58c..d070015063 100644
--- a/designer-base/src/main/resources/com/fr/design/i18n/dimension_ja_JP.properties
+++ b/designer-base/src/main/resources/com/fr/design/i18n/dimension_ja_JP.properties
@@ -24,3 +24,5 @@ com.fr.design.plugin.remind.PluginInvalidateRemindDialog.centerPane=580*369
com.fr.design.report.WatermarkSettingPane=720*600
com.fr.design.file.MultiTemplateTabPane.popUpMenu=240*65
com.fr.design.data.datapane.preview.desensitization.view.rule.DesensitizationRuleChoosePane.ruleEditPane=800*600
+com.fr.design.formula.FormulaPane=900*600
+com.fr.design.formula.FormulaPaneWhenReserveFormula=900*600
diff --git a/designer-base/src/main/resources/com/fr/design/i18n/dimension_ko_KR.properties b/designer-base/src/main/resources/com/fr/design/i18n/dimension_ko_KR.properties
index eaa75e14a0..3fd1ffcad1 100644
--- a/designer-base/src/main/resources/com/fr/design/i18n/dimension_ko_KR.properties
+++ b/designer-base/src/main/resources/com/fr/design/i18n/dimension_ko_KR.properties
@@ -24,3 +24,5 @@ com.fr.design.plugin.remind.PluginInvalidateRemindDialog.centerPane=580*369
com.fr.design.report.WatermarkSettingPane=720*600
com.fr.design.file.MultiTemplateTabPane.popUpMenu=240*65
com.fr.design.data.datapane.preview.desensitization.view.rule.DesensitizationRuleChoosePane.ruleEditPane=800*600
+com.fr.design.formula.FormulaPane=900*600
+com.fr.design.formula.FormulaPaneWhenReserveFormula=900*600
diff --git a/designer-base/src/main/resources/com/fr/design/i18n/dimension_zh.properties b/designer-base/src/main/resources/com/fr/design/i18n/dimension_zh.properties
index d1e84b4618..2a10d13c7f 100644
--- a/designer-base/src/main/resources/com/fr/design/i18n/dimension_zh.properties
+++ b/designer-base/src/main/resources/com/fr/design/i18n/dimension_zh.properties
@@ -24,3 +24,5 @@ com.fr.design.plugin.remind.PluginInvalidateRemindDialog.dialog=600*500
com.fr.design.plugin.remind.PluginInvalidateRemindDialog.centerPane=580*369
com.fr.design.report.WatermarkSettingPane=720*600
com.fr.design.file.MultiTemplateTabPane.popUpMenu=170*65
+com.fr.design.formula.FormulaPane=900*600
+com.fr.design.formula.FormulaPaneWhenReserveFormula=900*600
diff --git a/designer-base/src/main/resources/com/fr/design/i18n/dimension_zh_TW.properties b/designer-base/src/main/resources/com/fr/design/i18n/dimension_zh_TW.properties
index 82f86a3a43..faa620cfc8 100644
--- a/designer-base/src/main/resources/com/fr/design/i18n/dimension_zh_TW.properties
+++ b/designer-base/src/main/resources/com/fr/design/i18n/dimension_zh_TW.properties
@@ -23,3 +23,5 @@ com.fr.design.plugin.remind.PluginInvalidateRemindDialog.dialog=600*500
com.fr.design.plugin.remind.PluginInvalidateRemindDialog.centerPane=580*369
com.fr.design.report.WatermarkSettingPane=720*600
com.fr.design.file.MultiTemplateTabPane.popUpMenu=170*65
+com.fr.design.formula.FormulaPane=900*600
+com.fr.design.formula.FormulaPaneWhenReserveFormula=900*600
diff --git a/designer-base/src/main/resources/com/fr/widgettheme/combobox.png b/designer-base/src/main/resources/com/fr/widgettheme/combobox.png
new file mode 100644
index 0000000000..1044d964e6
Binary files /dev/null and b/designer-base/src/main/resources/com/fr/widgettheme/combobox.png differ
diff --git a/designer-base/src/main/resources/com/fr/widgettheme/menu.svg b/designer-base/src/main/resources/com/fr/widgettheme/menu.svg
new file mode 100644
index 0000000000..1ab9c63a53
--- /dev/null
+++ b/designer-base/src/main/resources/com/fr/widgettheme/menu.svg
@@ -0,0 +1,3 @@
+
diff --git a/designer-base/src/test/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPaneTest.java b/designer-base/src/test/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPaneTest.java
new file mode 100644
index 0000000000..e549f13461
--- /dev/null
+++ b/designer-base/src/test/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPaneTest.java
@@ -0,0 +1,41 @@
+package com.fr.design.data.tabledata.tabledatapane;
+
+import com.fr.base.Parameter;
+import com.fr.design.data.datapane.sqlpane.SQLEditPane;
+import com.fr.invoke.Reflect;
+import junit.framework.TestCase;
+import org.junit.Assert;
+
+/**
+ * @author Yuan.Wang
+ * @since 11.0
+ * Created on 2023/12/22
+ */
+public class DBTableDataPaneTest extends TestCase {
+
+ public void testGetParameters() {
+ DBTableDataPane pane = new DBTableDataPane();
+ SQLEditPane editPane = new SQLEditPane();
+ String sql = "select distinct 类别ID from S产品\n" +
+ "where 1=1\n" +
+ "order by 类别ID\n" +
+ "--${ if(len(comboBox0) = 0,\"\",\"AND 类别00ID = '\" + comboBox0 + \"'\")}";
+
+ String sql1 = "select distinct 类别ID from S产品\n" +
+ "where 1=1\n" +
+ "order by 类别ID\n" +
+ "${ if(len(comboBox0) = 0,\"\",\"AND 类别00ID = '\" + comboBox0 + \"'\")}";
+ editPane.setText(sql);
+ Reflect.on(pane).set("sqlTextPane", editPane);
+ Reflect.on(pane).set("pageQuery", sql);
+
+ Parameter[] parameters = Reflect.on(pane).call("getParameters").get();
+
+ Assert.assertEquals(0, parameters.length);
+ editPane.setText(sql1);
+
+ parameters = Reflect.on(pane).call("getParameters").get();
+ Assert.assertEquals(1, parameters.length);
+ Assert.assertEquals(parameters[0].getName(), "comboBox0");
+ }
+}
\ No newline at end of file
diff --git a/designer-form/src/main/java/com/fr/design/parameter/RootDesignDefinePane.java b/designer-form/src/main/java/com/fr/design/parameter/RootDesignDefinePane.java
index 177238519a..57082e37f0 100644
--- a/designer-form/src/main/java/com/fr/design/parameter/RootDesignDefinePane.java
+++ b/designer-form/src/main/java/com/fr/design/parameter/RootDesignDefinePane.java
@@ -28,6 +28,7 @@ import com.fr.design.mainframe.FormDesigner;
import com.fr.design.mainframe.FormSelection;
import com.fr.design.mainframe.JTemplate;
import com.fr.design.mainframe.widget.accessibles.AccessibleBackgroundEditor;
+import com.fr.design.widgettheme.processor.WidgetThemeParaCreatorPaneAdder;
import com.fr.design.utils.gui.LayoutUtils;
import com.fr.design.utils.gui.UIComponentUtils;
import com.fr.design.widget.ui.designer.AbstractDataModify;
@@ -203,6 +204,7 @@ public class RootDesignDefinePane extends AbstractDataModify {
private void refreshExtraAdvancedPane() {
extraPaneList.clear();
backgroundPane.removeAll();
+ WidgetThemeParaCreatorPaneAdder.add(creator, extraPaneList);
Set> providers = ExtraDesignClassManager.getInstance().getArray(WidgetAdvancedPaneProvider.XML_TAG);
for (WidgetAdvancedPaneProvider provider : providers) {
if (!provider.accept(creator)) {
diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/btn/AbstractExtraButtonPane.java b/designer-form/src/main/java/com/fr/design/widget/ui/btn/AbstractExtraButtonPane.java
index 67b8e4d26c..79a71d56e0 100644
--- a/designer-form/src/main/java/com/fr/design/widget/ui/btn/AbstractExtraButtonPane.java
+++ b/designer-form/src/main/java/com/fr/design/widget/ui/btn/AbstractExtraButtonPane.java
@@ -8,11 +8,13 @@ import com.fr.design.gui.icombobox.DictionaryComboBox;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
+import com.fr.design.widgettheme.processor.WidgetThemeCreatorPaneAdder;
import com.fr.design.widget.btn.ButtonWithHotkeysDetailPane;
import com.fr.form.ui.Button;
import com.fr.general.GeneralContext;
import com.fr.plugin.observer.PluginEvent;
import com.fr.plugin.observer.PluginEventListener;
+import com.fr.stable.collections.CollectionUtils;
import org.jetbrains.annotations.Nullable;
import javax.swing.JPanel;
@@ -45,7 +47,8 @@ public abstract class AbstractExtraButtonPane extends ButtonWi
*/
protected void refreshExtraAdvancedPane(Class cls) {
extraPaneList.clear();
- boolean containsExtraPane = false;
+ WidgetThemeCreatorPaneAdder.add(cls, extraPaneList);
+ boolean containsExtraPane = !CollectionUtils.isEmpty(extraPaneList);
Set> providers = ExtraDesignClassManager.getInstance().getArray(WidgetAdvancedPaneProvider.XML_TAG);
for (WidgetAdvancedPaneProvider provider : providers) {
if (!provider.accept(cls)) {
diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/ButtonDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/ButtonDefinePane.java
index 6889ef7b49..0863260b3e 100644
--- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/ButtonDefinePane.java
+++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/ButtonDefinePane.java
@@ -1,5 +1,6 @@
package com.fr.design.widget.ui.designer;
+import com.finebi.cbb.utils.CollectionUtils;
import com.fr.design.ExtraDesignClassManager;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.designer.IntervalConstants;
@@ -12,6 +13,7 @@ import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.widget.accessibles.AccessibleIconEditor;
+import com.fr.design.widgettheme.processor.WidgetThemeParaCreatorPaneAdder;
import com.fr.design.widget.btn.ButtonConstants;
import com.fr.form.ui.Button;
import com.fr.general.GeneralContext;
@@ -64,7 +66,8 @@ public abstract class ButtonDefinePane extends AbstractDataMod
private void refreshAdvancedPane() {
extraPaneList.clear();
- containsExtraPane = false;
+ WidgetThemeParaCreatorPaneAdder.add(creator, extraPaneList);
+ containsExtraPane = CollectionUtils.isNotEmpty(extraPaneList);
Set> providers = ExtraDesignClassManager.getInstance().getArray(WidgetAdvancedPaneProvider.XML_TAG);
for (WidgetAdvancedPaneProvider provider : providers) {
if (!provider.accept(creator)) {
diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/CheckBoxDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/CheckBoxDefinePane.java
index 7768402914..d73582df7b 100644
--- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/CheckBoxDefinePane.java
+++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/CheckBoxDefinePane.java
@@ -1,5 +1,6 @@
package com.fr.design.widget.ui.designer;
+import com.finebi.cbb.utils.CollectionUtils;
import com.fr.design.ExtraDesignClassManager;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.designer.IntervalConstants;
@@ -11,7 +12,8 @@ import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
-import com.fr.design.widget.ui.designer.component.FontSizeComboPane;
+import com.fr.design.widgettheme.processor.WidgetThemeParaCreatorPaneAdder;
+import com.fr.design.gui.frpane.FontSizeComboPane;
import com.fr.design.widget.ui.designer.component.FormWidgetValuePane;
import com.fr.form.ui.CheckBox;
import com.fr.general.GeneralContext;
@@ -76,7 +78,8 @@ public class CheckBoxDefinePane extends AbstractDataModify {
protected void refreshExtraAdvancedPane() {
extraPaneList.clear();
- boolean containsExtraPane = false;
+ WidgetThemeParaCreatorPaneAdder.add(creator, extraPaneList);
+ boolean containsExtraPane = CollectionUtils.isNotEmpty(extraPaneList);
Set> providers = ExtraDesignClassManager.getInstance().getArray(WidgetAdvancedPaneProvider.XML_TAG);
for (WidgetAdvancedPaneProvider provider : providers) {
if (!provider.accept(creator)) {
diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/DateEditorDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/DateEditorDefinePane.java
index 7df1e90909..06ccb13870 100644
--- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/DateEditorDefinePane.java
+++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/DateEditorDefinePane.java
@@ -1,5 +1,6 @@
package com.fr.design.widget.ui.designer;
+import com.finebi.cbb.utils.CollectionUtils;
import com.fr.base.FRContext;
import com.fr.data.core.FormatField;
import com.fr.design.ExtraDesignClassManager;
@@ -14,6 +15,7 @@ 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.widgettheme.processor.WidgetThemeParaCreatorPaneAdder;
import com.fr.design.widget.component.DateValuePane;
import com.fr.design.widget.component.UIComboBoxNoArrow;
import com.fr.design.widget.ui.designer.component.FormWidgetValuePane;
@@ -98,7 +100,8 @@ public class DateEditorDefinePane extends DirectWriteEditorDefinePane> providers = ExtraDesignClassManager.getInstance().getArray(WidgetAdvancedPaneProvider.XML_TAG);
for (WidgetAdvancedPaneProvider provider : providers) {
if (!provider.accept(creator)) {
diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/DirectWriteEditorDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/DirectWriteEditorDefinePane.java
index 53c38b6421..1a65f3bba6 100644
--- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/DirectWriteEditorDefinePane.java
+++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/DirectWriteEditorDefinePane.java
@@ -1,5 +1,6 @@
package com.fr.design.widget.ui.designer;
+import com.finebi.cbb.utils.CollectionUtils;
import com.fr.design.ExtraDesignClassManager;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.designer.IntervalConstants;
@@ -9,6 +10,7 @@ import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.layout.TableLayoutHelper;
+import com.fr.design.widgettheme.processor.WidgetThemeParaCreatorPaneAdder;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.design.widget.ui.designer.component.FormWidgetValuePane;
import com.fr.form.ui.DirectWriteEditor;
@@ -66,7 +68,8 @@ public abstract class DirectWriteEditorDefinePane e
protected void refreshExtraAdvancedPane() {
extraPaneList.clear();
- boolean containsExtraPane = false;
+ WidgetThemeParaCreatorPaneAdder.add(creator, extraPaneList);
+ boolean containsExtraPane = CollectionUtils.isNotEmpty(extraPaneList);
Set> providers = ExtraDesignClassManager.getInstance().getArray(WidgetAdvancedPaneProvider.XML_TAG);
for (WidgetAdvancedPaneProvider provider : providers) {
if (!provider.accept(creator)) {
diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/FieldEditorDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/FieldEditorDefinePane.java
index 65aeec3a75..81499facc8 100644
--- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/FieldEditorDefinePane.java
+++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/FieldEditorDefinePane.java
@@ -20,7 +20,7 @@ import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
-import com.fr.design.widget.ui.designer.component.FontSizeComboPane;
+import com.fr.design.gui.frpane.FontSizeComboPane;
import com.fr.form.ui.FieldEditor;
import com.fr.general.GeneralContext;
import com.fr.log.FineLoggerFactory;
diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/LabelDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/LabelDefinePane.java
index 040137141c..1776e2eb18 100644
--- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/LabelDefinePane.java
+++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/LabelDefinePane.java
@@ -1,5 +1,6 @@
package com.fr.design.widget.ui.designer;
+import com.finebi.cbb.utils.CollectionUtils;
import com.fr.base.BaseUtils;
import com.fr.design.ExtraDesignClassManager;
import com.fr.design.beans.BasicBeanPane;
@@ -15,6 +16,7 @@ import com.fr.design.gui.style.FRFontPane;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
+import com.fr.design.widgettheme.processor.WidgetThemeParaCreatorPaneAdder;
import com.fr.design.widget.FRWidgetFactory;
import com.fr.design.widget.ui.designer.component.FormWidgetValuePane;
import com.fr.form.ui.Label;
@@ -35,7 +37,11 @@ import java.util.Set;
/**
- * Created by ibm on 2017/8/3.
+ * 标签控件pane
+ *
+ * @author obo
+ * @version 11.0
+ * Created on 2023/11/13
*/
public class LabelDefinePane extends AbstractDataModify