From cdc73e4ec006fb42b3c7b05a3597a69deaea2f0f Mon Sep 17 00:00:00 2001 From: "Bruce.Deng" Date: Wed, 1 Mar 2023 00:33:31 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-83259=20&=20REPORT-83263=20=E3=80=90?= =?UTF-8?q?=E6=9C=80=E5=BC=BA=E6=8E=A7=E4=BB=B6=E3=80=91=E6=8E=A7=E4=BB=B6?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E8=B7=9F=E9=9A=8F=E4=B8=BB=E9=A2=98&?= =?UTF-8?q?=E5=BC=80=E6=94=BE=E8=87=AA=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/fun/TemplateThemePaneProvider.java | 2 +- .../mainframe/theme/TemplateThemeBlock.java | 19 +++++ .../fun/WidgetAdvancedPaneProvider.java | 2 +- .../ui/designer/CheckBoxDefinePane.java | 83 +++++++++++++++++-- .../ui/designer/DateEditorDefinePane.java | 50 +++++++++-- .../designer/DirectWriteEditorDefinePane.java | 51 ++++++++++-- .../ui/designer/FieldEditorDefinePane.java | 37 +++------ .../ui/designer/NumberEditorDefinePane.java | 42 +++++++++- .../designer/TextFieldEditorDefinePane.java | 40 +++++++-- .../designer/btn/ButtonGroupDefinePane.java | 43 ++++++++-- .../com/fr/design/mainframe/JWorkBook.java | 4 +- 11 files changed, 307 insertions(+), 66 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/fun/TemplateThemePaneProvider.java b/designer-base/src/main/java/com/fr/design/fun/TemplateThemePaneProvider.java index f05d85318..4c91a18a8 100644 --- a/designer-base/src/main/java/com/fr/design/fun/TemplateThemePaneProvider.java +++ b/designer-base/src/main/java/com/fr/design/fun/TemplateThemePaneProvider.java @@ -20,7 +20,7 @@ public interface TemplateThemePaneProvider extends Mutable { * 插入tab的位置 * * @param total 已插入的tab数 - * @return 插入位置,如果想放到最后,则返回-1 + * @return 插入位置 */ int getInsertPosition(int total); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeBlock.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeBlock.java index ea649033e..388430261 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeBlock.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeBlock.java @@ -6,11 +6,18 @@ import com.fr.base.theme.TemplateThemeConfig; import com.fr.base.theme.settings.ThemeThumbnail; import com.fr.design.designer.IntervalConstants; import com.fr.design.file.HistoryTemplateListCache; +import com.fr.design.fun.TemplateThemePaneProvider; import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.theme.dialog.TemplateThemeProfileDialog; +import com.fr.event.Event; +import com.fr.event.EventDispatcher; +import com.fr.event.Listener; import com.fr.general.IOUtils; +import com.fr.plugin.context.PluginContext; +import com.fr.plugin.injectable.PluginModule; +import com.fr.plugin.observer.PluginEventType; import com.fr.stable.Constants; import com.fr.stable.StringUtils; @@ -95,6 +102,18 @@ public class TemplateThemeBlock extends JPanel { repaint(); } }); + initPluginListener(); + } + + private void initPluginListener() { + EventDispatcher.listen(PluginEventType.BeforeStop, new Listener() { + @Override + public void on(Event event, PluginContext pluginContext) { + // 重置参数面板和控件主题样式 + theme.setParamContainerStyle(null); + theme.setWidgetStyle(null); + } + }, pluginContext -> pluginContext.contain(PluginModule.ExtraDesign, TemplateThemePaneProvider.XML_TAG)); } private void initializePane() { diff --git a/designer-form/src/main/java/com/fr/design/fun/WidgetAdvancedPaneProvider.java b/designer-form/src/main/java/com/fr/design/fun/WidgetAdvancedPaneProvider.java index eafa70b23..7ba5a3c8c 100644 --- a/designer-form/src/main/java/com/fr/design/fun/WidgetAdvancedPaneProvider.java +++ b/designer-form/src/main/java/com/fr/design/fun/WidgetAdvancedPaneProvider.java @@ -21,7 +21,7 @@ public interface WidgetAdvancedPaneProvider extends Mutable { * 获取插入的位置 * * @param total 已插入的面板数 - * @return 插入位置,如果想放到最后,则返回-1 + * @return 插入位置 */ int getInsertPosition(int total); 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 339ff9baa..776840291 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,8 +1,11 @@ package com.fr.design.widget.ui.designer; +import com.fr.design.ExtraDesignClassManager; +import com.fr.design.beans.BasicBeanPane; import com.fr.design.designer.IntervalConstants; import com.fr.design.designer.creator.XCreator; import com.fr.design.foldablepane.UIExpandablePane; +import com.fr.design.fun.WidgetAdvancedPaneProvider; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.layout.FRGUIPaneFactory; @@ -11,18 +14,28 @@ import com.fr.design.layout.TableLayoutHelper; import com.fr.design.widget.ui.designer.component.FontSizeComboPane; import com.fr.design.widget.ui.designer.component.FormWidgetValuePane; import com.fr.form.ui.CheckBox; - +import com.fr.general.GeneralContext; +import com.fr.plugin.observer.PluginEvent; +import com.fr.plugin.observer.PluginEventListener; import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.SwingConstants; import java.awt.Component; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; public class CheckBoxDefinePane extends AbstractDataModify { private UITextField text; private FontSizeComboPane fontSizePane; private FormWidgetValuePane formWidgetValuePane; protected UITextField labelNameTextField; + protected final List> extraPaneList = new ArrayList<>(); + protected JPanel extraPane; + + protected static double F = TableLayout.FILL; + protected static double P = TableLayout.PREFERRED; public CheckBoxDefinePane(XCreator xCreator) { super(xCreator); @@ -37,16 +50,15 @@ public class CheckBoxDefinePane extends AbstractDataModify { UILabel widgetValueLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Estate_Widget_Value")); widgetValueLabel.setVerticalAlignment(SwingConstants.TOP); formWidgetValuePane = new FormWidgetValuePane(creator.toData(), false); - double f = TableLayout.FILL; - double p = TableLayout.PREFERRED; + initExtraPane(); Component[][] components = new Component[][]{ new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Label_Name")), labelNameTextField}, new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Text")), text }, new Component[]{widgetValueLabel, formWidgetValuePane }, - new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Font_Size")), fontSizePane}, + new Component[]{extraPane, null}, }; - double[] rowSize = {p, p, p, p, p, p}; - double[] columnSize = {p, f}; + double[] rowSize = {P, P, P, P, P, P}; + double[] columnSize = {P, F}; int[][] rowCount = {{1, 1},{1, 1}, {1, 3},{1, 1}}; JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L1); JPanel boundsPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); @@ -56,6 +68,59 @@ public class CheckBoxDefinePane extends AbstractDataModify { this.add(uiExpandablePane); } + + protected void initExtraPane() { + initPluginListener(); + refreshExtraAdvancedPane(); + } + + protected void refreshExtraAdvancedPane() { + extraPaneList.clear(); + boolean containsExtraPane = false; + Set> providers = ExtraDesignClassManager.getInstance().getArray(WidgetAdvancedPaneProvider.XML_TAG); + for (WidgetAdvancedPaneProvider provider : providers) { + if (!provider.accept(creator)) { + continue; + } + insertShortCut(provider.getInsertPosition(extraPaneList.size()), provider.createExtraAdvancedPane()); + containsExtraPane = true; + } + if (containsExtraPane) { + extraPane = FRGUIPaneFactory.createYBoxEmptyBorderPane(); + for (BasicBeanPane pane : extraPaneList) { + extraPane.add(pane); + } + } else { + Component[][] components = new Component[][]{ + new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Font_Size")), fontSizePane} + }; + double[] rowSize = {P}; + double[] columnSize = {P, F}; + int[][] rowCount = {{1, 1}}; + extraPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L1); + } + } + + protected void initPluginListener() { + GeneralContext.listenPluginRunningChanged(new PluginEventListener() { + @Override + public void on(PluginEvent event) { + refreshExtraAdvancedPane(); + } + }, pluginContext -> pluginContext.getRuntime().contain(WidgetAdvancedPaneProvider.XML_TAG)); + } + + /** + * 插入配置项面板 + * + * @param index 插入的位置 + * @param pane 配置项面板 + */ + protected void insertShortCut(int index, BasicBeanPane pane) { + int size = extraPaneList.size(); + index = Math.min(index, size); + extraPaneList.add(index, pane); + } @Override public String title4PopupWindow() { @@ -68,6 +133,9 @@ public class CheckBoxDefinePane extends AbstractDataModify { fontSizePane.setValue(check.getFontSize()); formWidgetValuePane.populate(check); labelNameTextField.setText(check.getLabelName()); + for (BasicBeanPane pane : extraPaneList) { + pane.populateBean(check); + } } @Override @@ -77,6 +145,9 @@ public class CheckBoxDefinePane extends AbstractDataModify { box.setFontSize(fontSizePane.getValue()); formWidgetValuePane.update(box); box.setLabelName(labelNameTextField.getText()); + for (BasicBeanPane pane : extraPaneList) { + pane.updateBean(box); + } return box; } } 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 2d459bd1b..7df1e9090 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 @@ -2,15 +2,17 @@ package com.fr.design.widget.ui.designer; import com.fr.base.FRContext; import com.fr.data.core.FormatField; +import com.fr.design.ExtraDesignClassManager; +import com.fr.design.beans.BasicBeanPane; import com.fr.design.border.UIRoundedBorder; import com.fr.design.constants.UIConstants; import com.fr.design.designer.IntervalConstants; import com.fr.design.designer.creator.XCreator; +import com.fr.design.fun.WidgetAdvancedPaneProvider; import com.fr.design.gui.ibutton.UIButtonGroup; 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.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.widget.component.DateValuePane; import com.fr.design.widget.component.UIComboBoxNoArrow; @@ -18,18 +20,23 @@ import com.fr.design.widget.ui.designer.component.FormWidgetValuePane; import com.fr.design.widget.ui.designer.date.DateFormatCheckManager; import com.fr.design.widget.ui.designer.date.DateFormatCheckResult; import com.fr.form.ui.DateEditor; - import com.fr.stable.ArrayUtils; -import javax.swing.*; +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.SwingConstants; import javax.swing.border.TitledBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Color; +import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.Set; public class DateEditorDefinePane extends DirectWriteEditorDefinePane { private UIButtonGroup returnTypeComboBox; @@ -68,8 +75,7 @@ public class DateEditorDefinePane extends DirectWriteEditorDefinePane> providers = ExtraDesignClassManager.getInstance().getArray(WidgetAdvancedPaneProvider.XML_TAG); + for (WidgetAdvancedPaneProvider provider : providers) { + if (!provider.accept(creator)) { + continue; + } + insertShortCut(provider.getInsertPosition(extraPaneList.size()), provider.createExtraAdvancedPane()); + containsExtraPane = true; + } + if (containsExtraPane) { + extraPane = FRGUIPaneFactory.createYBoxEmptyBorderPane(); + for (BasicBeanPane pane : extraPaneList) { + extraPane.add(pane); + } + } else { + Component[][] components = new Component[][]{ + new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Font_Size")), fontSizePane}, + }; + double[] rowSize = {P}; + double[] columnSize = {P, F}; + int[][] rowCount = {{1, 1}}; + extraPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L1); + } + } private JPanel createFormatPane(UIComboBox formatComboBox, UILabel sampleLabel){ JPanel previewPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); 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 46688b64d..53c38b642 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,19 +1,26 @@ package com.fr.design.widget.ui.designer; +import com.fr.design.ExtraDesignClassManager; +import com.fr.design.beans.BasicBeanPane; import com.fr.design.designer.IntervalConstants; import com.fr.design.designer.creator.XCreator; +import com.fr.design.fun.WidgetAdvancedPaneProvider; 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.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.widget.ui.designer.component.FormWidgetValuePane; import com.fr.form.ui.DirectWriteEditor; - -import javax.swing.*; -import java.awt.*; +import javax.swing.BorderFactory; +import javax.swing.JComponent; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.FlowLayout; +import java.util.Set; //richer:需要提供能否直接编辑的控件设置面板——下拉框、复选框、时间、日期、下拉树 public abstract class DirectWriteEditorDefinePane extends FieldEditorDefinePane { @@ -34,18 +41,17 @@ public abstract class DirectWriteEditorDefinePane e Component[] removeRepeatPane = new Component[]{createRepeatCheckBox(), null}; Component[] dicPane = createDictPane(); Component[] waterMarkComponent = createWaterMarkPane(); - double f = TableLayout.FILL; - double p = TableLayout.PREFERRED; + initExtraPane(); Component[][] components = new Component[][]{ new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Label_Name")), labelNameTextField}, new Component[]{widgetValueLabel, formWidgetValuePane }, dicPane, removeRepeatPane, waterMarkComponent, - new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Font_Size")), fontSizePane} + new Component[]{extraPane, null} }; - double[] rowSize = {p, p, p, p, p, p, p, p}; - double[] columnSize = {p, f}; + double[] rowSize = {P, P, P, P, P, P, P, P}; + double[] columnSize = {P, F}; int[][] rowCount = {{1, 1},{1, 3},{1, 1},{1, 1},{1,1},{1,1}}; JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L1); // panel.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0)); @@ -58,6 +64,33 @@ public abstract class DirectWriteEditorDefinePane e return advancePane; } + protected void refreshExtraAdvancedPane() { + extraPaneList.clear(); + boolean containsExtraPane = false; + Set> providers = ExtraDesignClassManager.getInstance().getArray(WidgetAdvancedPaneProvider.XML_TAG); + for (WidgetAdvancedPaneProvider provider : providers) { + if (!provider.accept(creator)) { + continue; + } + insertShortCut(provider.getInsertPosition(extraPaneList.size()), provider.createExtraAdvancedPane()); + containsExtraPane = true; + } + if (containsExtraPane) { + extraPane = FRGUIPaneFactory.createYBoxEmptyBorderPane(); + for (BasicBeanPane pane : extraPaneList) { + extraPane.add(pane); + } + } else { + Component[][] components = new Component[][]{ + new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Font_Size")), fontSizePane} + }; + double[] rowSize = {P}; + double[] columnSize = {P, F}; + int[][] rowCount = {{1, 1}}; + extraPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L1); + } + } + public UICheckBox createRepeatCheckBox(){ return null; } 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 1777a027b..65aeec3a7 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 @@ -18,6 +18,7 @@ import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.ilable.UILabel; 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.form.ui.FieldEditor; @@ -34,7 +35,6 @@ import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.ArrayList; import java.util.List; -import java.util.Set; public abstract class FieldEditorDefinePane extends AbstractDataModify { protected UICheckBox allowBlankCheckBox; @@ -43,8 +43,11 @@ public abstract class FieldEditorDefinePane extends Abstr protected JPanel validatePane; protected FontSizeComboPane fontSizePane; protected UITextField labelNameTextField; - private final List> extraPaneList = new ArrayList<>(); - private JPanel extraPane; + protected final List> extraPaneList = new ArrayList<>(); + protected JPanel extraPane; + + protected static double F = TableLayout.FILL; + protected static double P = TableLayout.PREFERRED; public FieldEditorDefinePane(XCreator xCreator) { super(xCreator); @@ -58,11 +61,8 @@ public abstract class FieldEditorDefinePane extends Abstr allowBlankCheckBox.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); fontSizePane = new FontSizeComboPane(); JPanel contentPane = this.setFirstContentPane(); - JPanel jPanel = FRGUIPaneFactory.createYBoxEmptyBorderPane(); - jPanel.add(contentPane); - extraPane = FRGUIPaneFactory.createYBoxEmptyBorderPane(); - jPanel.add(extraPane); - this.initExtraPane(); + JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + jPanel.add(contentPane, BorderLayout.CENTER); contentPane.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0)); if (contentPane != null) { UIExpandablePane uiExpandablePane = new UIExpandablePane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Advanced"), 280, 20, jPanel); @@ -71,24 +71,13 @@ public abstract class FieldEditorDefinePane extends Abstr this.addValidatePane(); } - private void initExtraPane() { + protected void initExtraPane() { initPluginListener(); refreshExtraAdvancedPane(); } - private void refreshExtraAdvancedPane() { - extraPaneList.clear(); - extraPane.removeAll(); - Set> providers = ExtraDesignClassManager.getInstance().getArray(WidgetAdvancedPaneProvider.XML_TAG); - for (WidgetAdvancedPaneProvider provider : providers) { - if (!provider.accept(creator)) { - continue; - } - insertShortCut(provider.getInsertPosition(extraPaneList.size()), provider.createExtraAdvancedPane()); - } - for (BasicBeanPane pane : extraPaneList) { - extraPane.add(pane); - } + protected void refreshExtraAdvancedPane() { + // do nothing } @Override @@ -196,13 +185,13 @@ public abstract class FieldEditorDefinePane extends Abstr * @param index 插入的位置 * @param pane 配置项面板 */ - private void insertShortCut(int index, BasicBeanPane pane) { + protected void insertShortCut(int index, BasicBeanPane pane) { int size = extraPaneList.size(); index = Math.min(index, size); extraPaneList.add(index, pane); } - private void initPluginListener() { + protected void initPluginListener() { GeneralContext.listenPluginRunningChanged(new PluginEventListener() { @Override public void on(PluginEvent event) { diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/NumberEditorDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/NumberEditorDefinePane.java index b1a298519..95709c83c 100644 --- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/NumberEditorDefinePane.java +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/NumberEditorDefinePane.java @@ -1,7 +1,10 @@ package com.fr.design.widget.ui.designer; +import com.fr.design.ExtraDesignClassManager; +import com.fr.design.beans.BasicBeanPane; import com.fr.design.designer.IntervalConstants; import com.fr.design.designer.creator.XCreator; +import com.fr.design.fun.WidgetAdvancedPaneProvider; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ispinner.UIBasicSpinner; import com.fr.design.layout.FRGUIPaneFactory; @@ -11,9 +14,12 @@ import com.fr.design.widget.component.NumberEditorValidatePane; import com.fr.design.widget.ui.designer.component.FormWidgetValuePane; import com.fr.form.ui.NumberEditor; - -import javax.swing.*; -import java.awt.*; +import javax.swing.JComponent; +import javax.swing.JFormattedTextField; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import java.awt.Component; +import java.util.Set; public class NumberEditorDefinePane extends FieldEditorDefinePane { public NumberEditorDefinePane(XCreator xCreator){ @@ -43,11 +49,12 @@ public class NumberEditorDefinePane extends FieldEditorDefinePane formWidgetValuePane = new FormWidgetValuePane(creator.toData(), false); double f = TableLayout.FILL; double p = TableLayout.PREFERRED; + initExtraPane(); Component[][] components = new Component[][]{ new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Label_Name")), labelNameTextField}, new Component[]{widgetValueLabel, formWidgetValuePane}, new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_WaterMark")), waterMarkDictPane}, - new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Font_Size")), fontSizePane} + new Component[]{extraPane, null} }; double[] rowSize = {p, p, p, p, p, p}; double[] columnSize = {p,f}; @@ -58,6 +65,33 @@ public class NumberEditorDefinePane extends FieldEditorDefinePane return boundsPane; } + protected void refreshExtraAdvancedPane() { + extraPaneList.clear(); + boolean containsExtraPane = false; + Set> providers = ExtraDesignClassManager.getInstance().getArray(WidgetAdvancedPaneProvider.XML_TAG); + for (WidgetAdvancedPaneProvider provider : providers) { + if (!provider.accept(creator)) { + continue; + } + insertShortCut(provider.getInsertPosition(extraPaneList.size()), provider.createExtraAdvancedPane()); + containsExtraPane = true; + } + if (containsExtraPane) { + extraPane = FRGUIPaneFactory.createYBoxEmptyBorderPane(); + for (BasicBeanPane pane : extraPaneList) { + extraPane.add(pane); + } + } else { + Component[][] components = new Component[][]{ + new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Font_Size")), fontSizePane} + }; + double[] rowSize = {P}; + double[] columnSize = {P, F}; + int[][] rowCount = {{1, 1}}; + extraPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L1); + } + } + public JPanel setValidatePane() { numberEditorValidatePane = new NumberEditorValidatePane(); return numberEditorValidatePane; diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/TextFieldEditorDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/TextFieldEditorDefinePane.java index 6e6a2ff14..4dbc675f5 100644 --- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/TextFieldEditorDefinePane.java +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/TextFieldEditorDefinePane.java @@ -1,15 +1,16 @@ package com.fr.design.widget.ui.designer; import com.fr.design.ExtraDesignClassManager; +import com.fr.design.beans.BasicBeanPane; import com.fr.design.designer.IntervalConstants; import com.fr.design.designer.creator.XCreator; import com.fr.design.fun.RegPaneProvider; +import com.fr.design.fun.WidgetAdvancedPaneProvider; import com.fr.design.gui.frpane.RegFieldPane; import com.fr.design.gui.frpane.RegPane; import com.fr.design.gui.ilable.UILabel; 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.FormWidgetValuePane; import com.fr.form.ui.TextEditor; @@ -21,6 +22,7 @@ import javax.swing.SwingConstants; import java.awt.Component; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; +import java.util.Set; public class TextFieldEditorDefinePane extends FieldEditorDefinePane { protected RegFieldPane regPane; @@ -63,18 +65,17 @@ public class TextFieldEditorDefinePane extends FieldEditorDefinePane }); formWidgetValuePane = new FormWidgetValuePane(creator.toData(), false); - double f = TableLayout.FILL; - double p = TableLayout.PREFERRED; UILabel widgetValueLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Estate_Widget_Value"), SwingConstants.LEFT); widgetValueLabel.setVerticalAlignment(SwingConstants.TOP); + initExtraPane(); Component[][] components = new Component[][]{ new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Label_Name")), labelNameTextField}, new Component[]{widgetValueLabel, formWidgetValuePane}, new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_WaterMark"), SwingConstants.LEFT), waterMarkDictPane}, - new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Font_Size"), SwingConstants.LEFT), fontSizePane} + new Component[]{extraPane, null} }; - double[] rowSize = {p, p, p, p, p, p}; - double[] columnSize = {p, f}; + double[] rowSize = {P, P, P, P, P}; + double[] columnSize = {P, F}; int[][] rowCount = {{1, 1}, {1, 3}, {1, 1}, {1, 1}}; final JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L1); JPanel boundsPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); @@ -82,6 +83,33 @@ public class TextFieldEditorDefinePane extends FieldEditorDefinePane return boundsPane; } + protected void refreshExtraAdvancedPane() { + extraPaneList.clear(); + boolean containsExtraPane = false; + Set> providers = ExtraDesignClassManager.getInstance().getArray(WidgetAdvancedPaneProvider.XML_TAG); + for (WidgetAdvancedPaneProvider provider : providers) { + if (!provider.accept(creator)) { + continue; + } + insertShortCut(provider.getInsertPosition(extraPaneList.size()), provider.createExtraAdvancedPane()); + containsExtraPane = true; + } + if (containsExtraPane) { + extraPane = FRGUIPaneFactory.createYBoxEmptyBorderPane(); + for (BasicBeanPane pane : extraPaneList) { + extraPane.add(pane); + } + } else { + Component[][] components = new Component[][]{ + new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Font_Size"), SwingConstants.LEFT), fontSizePane} + }; + double[] rowSize = {P}; + double[] columnSize = {P, F}; + int[][] rowCount = {{1, 1}}; + extraPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L1); + } + } + public JPanel setValidatePane() { return regPane; } diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/btn/ButtonGroupDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/btn/ButtonGroupDefinePane.java index 7cc20dce7..3176e198a 100644 --- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/btn/ButtonGroupDefinePane.java +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/btn/ButtonGroupDefinePane.java @@ -1,8 +1,11 @@ package com.fr.design.widget.ui.designer.btn; import com.fr.data.Dictionary; +import com.fr.design.ExtraDesignClassManager; +import com.fr.design.beans.BasicBeanPane; import com.fr.design.designer.IntervalConstants; -import com.fr.design.designer.creator.*; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.fun.WidgetAdvancedPaneProvider; import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; @@ -13,9 +16,11 @@ import com.fr.design.widget.ui.designer.FieldEditorDefinePane; import com.fr.design.widget.ui.designer.component.FormWidgetValuePane; import com.fr.form.ui.ButtonGroup; - -import javax.swing.*; -import java.awt.*; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import java.awt.BorderLayout; +import java.awt.Component; +import java.util.Set; /** * Created by ibm on 2017/8/5. @@ -40,11 +45,12 @@ public abstract class ButtonGroupDefinePane extends Field formWidgetValuePane = new FormWidgetValuePane(creator.toData(), false); double f = TableLayout.FILL; double p = TableLayout.PREFERRED; + initExtraPane(); Component[][] components = new Component[][]{ new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Label_Name")), labelNameTextField}, new Component[]{widgetValueLabel, formWidgetValuePane}, new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_DS_Dictionary")), dictionaryEditor}, - new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Font_Size")), fontSizePane}, + new Component[]{extraPane, null}, new Component[]{buttonGroupDictPane, null} }; double[] rowSize = {p, p, p, p, p, p, p}; @@ -60,6 +66,33 @@ public abstract class ButtonGroupDefinePane extends Field return advancePane; } + protected void refreshExtraAdvancedPane() { + extraPaneList.clear(); + boolean containsExtraPane = false; + Set> providers = ExtraDesignClassManager.getInstance().getArray(WidgetAdvancedPaneProvider.XML_TAG); + for (WidgetAdvancedPaneProvider provider : providers) { + if (!provider.accept(creator)) { + continue; + } + insertShortCut(provider.getInsertPosition(extraPaneList.size()), provider.createExtraAdvancedPane()); + containsExtraPane = true; + } + if (containsExtraPane) { + extraPane = FRGUIPaneFactory.createYBoxEmptyBorderPane(); + for (BasicBeanPane pane : extraPaneList) { + extraPane.add(pane); + } + } else { + Component[][] components = new Component[][]{ + new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Font_Size")), fontSizePane} + }; + double[] rowSize = {P}; + double[] columnSize = {P, F}; + int[][] rowCount = {{1, 1}}; + extraPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L1); + } + } + public JPanel createOtherPane() { return null; } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/JWorkBook.java b/designer-realize/src/main/java/com/fr/design/mainframe/JWorkBook.java index d4fa7ed5c..5c316ef72 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/JWorkBook.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/JWorkBook.java @@ -1311,7 +1311,9 @@ public class JWorkBook extends JTemplate { boolean shouldCreateUndoState = compatible == TemplateThemeCompatible.NONE && !StringUtils.equals(oldTheme.getName(), newTheme.getName()); getTarget().setTemplateTheme(newTheme, compatible); - getTarget().getReportParameterAttr().onTemplateUsingThemeChange(newTheme, compatible); + if (getTarget().getReportParameterAttr() != null) { + getTarget().getReportParameterAttr().onTemplateUsingThemeChange(newTheme, compatible); + } setTarget((WorkBook) FineColorSynchronizer.flush(getTarget(), newTheme, compatible)); if (HistoryTemplateListCache.getInstance().getCurrentEditingTemplate() == this) {