diff --git a/designer-base/src/main/java/com/fr/design/widget/btn/ButtonConstants.java b/designer-base/src/main/java/com/fr/design/widget/btn/ButtonConstants.java index 9be9a8fba..3efc320d8 100644 --- a/designer-base/src/main/java/com/fr/design/widget/btn/ButtonConstants.java +++ b/designer-base/src/main/java/com/fr/design/widget/btn/ButtonConstants.java @@ -44,4 +44,20 @@ public class ButtonConstants { StableFactory.getMarkedClass(BridgeMark.SUBMIT_BUTTON, Widget.class), StableFactory.getMarkedClass(BridgeMark.TREE_NODE_TOGGLE_BUTTON, Widget.class) }; + + public static final String[] TYPES_BUTTON_NO_FREE = { + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Common"), + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Utils_Insert_Row"), + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Utils_Delete_Row"), + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Button_Type_Parameter_Submit"), + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Widget_TreeNode") + }; + + public static final Class[] CLASSES_BUTTON_NO_FREE = { + Button.class, + StableFactory.getMarkedClass(BridgeMark.APPEND_ROW_BUTTON, Widget.class), + StableFactory.getMarkedClass(BridgeMark.DELETE_ROW_BUTTON, Widget.class), + StableFactory.getMarkedClass(BridgeMark.SUBMIT_BUTTON, Widget.class), + StableFactory.getMarkedClass(BridgeMark.TREE_NODE_TOGGLE_BUTTON, Widget.class) + }; } diff --git a/designer-base/src/main/java/com/fr/design/widget/btn/ButtonDetailPane.java b/designer-base/src/main/java/com/fr/design/widget/btn/ButtonDetailPane.java index 63d678577..2b73a3fe7 100644 --- a/designer-base/src/main/java/com/fr/design/widget/btn/ButtonDetailPane.java +++ b/designer-base/src/main/java/com/fr/design/widget/btn/ButtonDetailPane.java @@ -1,11 +1,9 @@ package com.fr.design.widget.btn; +import com.fr.design.beans.BasicBeanPane; import com.fr.design.gui.icombobox.DictionaryComboBox; import com.fr.design.dialog.BasicPane; -import com.fr.design.widget.btn.ButtonConstants; import com.fr.form.ui.Button; - - import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.event.ActionEvent; @@ -13,6 +11,7 @@ import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; + /** * Created by IntelliJ IDEA. * Author : Richer @@ -22,7 +21,7 @@ import java.util.List; */ public abstract class ButtonDetailPane extends BasicPane { private List ls = new ArrayList(); - + protected final List> extraPaneList = new ArrayList<>(); @Override public String title4PopupWindow() { return com.fr.design.i18n.Toolkit.i18nText("Button"); @@ -49,7 +48,10 @@ public abstract class ButtonDetailPane extends BasicPane { public abstract Class classType(); protected DictionaryComboBox createButtonTypeComboBox() { - final DictionaryComboBox dictionaryComboBox = new DictionaryComboBox(ButtonConstants.CLASSES4BUTTON, ButtonConstants.TYPES4BUTTON, false); + return createButtonTypeComboBox(false); + } + + private DictionaryComboBox initDictionaryComboBox(DictionaryComboBox dictionaryComboBox) { dictionaryComboBox.setSelectedItem(classType()); dictionaryComboBox.addActionListener(new ActionListener() { @Override @@ -59,4 +61,14 @@ public abstract class ButtonDetailPane extends BasicPane { }); return dictionaryComboBox; } + + protected DictionaryComboBox createButtonTypeComboBox(Boolean containsExtraPane) { + final DictionaryComboBox dictionaryComboBox; + if (!containsExtraPane) { + dictionaryComboBox = new DictionaryComboBox(ButtonConstants.CLASSES4BUTTON, ButtonConstants.TYPES4BUTTON, false); + } else { + dictionaryComboBox = new DictionaryComboBox(ButtonConstants.CLASSES_BUTTON_NO_FREE, ButtonConstants.TYPES_BUTTON_NO_FREE, false); + } + return initDictionaryComboBox(dictionaryComboBox); + } } \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/widget/btn/ButtonWithHotkeysDetailPane.java b/designer-base/src/main/java/com/fr/design/widget/btn/ButtonWithHotkeysDetailPane.java index b75aeaa81..d146c7309 100644 --- a/designer-base/src/main/java/com/fr/design/widget/btn/ButtonWithHotkeysDetailPane.java +++ b/designer-base/src/main/java/com/fr/design/widget/btn/ButtonWithHotkeysDetailPane.java @@ -6,6 +6,7 @@ import javax.swing.*; import com.fr.design.designer.IntervalConstants; import com.fr.design.foldablepane.UIExpandablePane; +import com.fr.design.gui.icombobox.DictionaryComboBox; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.layout.FRGUIPaneFactory; @@ -42,8 +43,9 @@ public abstract class ButtonWithHotkeysDetailPane extends Butt JPanel labelPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); iconPane = new AccessibleIconEditor(); labelPane.add(iconPane); + Component comp = createCenterPane(); Component[][] n_components = { - {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Button_Type")), createButtonTypeComboBox()}, + {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Button_Type")), createCustomButtonTypeComboBox()}, {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Button_Name")), buttonNameTextField = new UITextField()}, {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Button_Icon")), iconPane}, {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Button_Hot_keys")), hotkeysTextField = new UITextField()}, @@ -52,7 +54,6 @@ public abstract class ButtonWithHotkeysDetailPane extends Butt JPanel panel = TableLayoutHelper.createGapTableLayoutPane(n_components, rowSize, columnSize, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L1); panel.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0)); advancePane.add(panel, BorderLayout.NORTH); - Component comp = createCenterPane(); if(comp != null ) { advancePane.add(comp,BorderLayout.CENTER); } @@ -63,6 +64,13 @@ public abstract class ButtonWithHotkeysDetailPane extends Butt protected abstract Component createCenterPane(); + /** + * 判断是按钮控件下拉框的种类:1.有自定义按钮 2.无自定义按钮 + */ + protected DictionaryComboBox createCustomButtonTypeComboBox() { + return createButtonTypeComboBox(); + } + @Override public void populate(T button) { if (button == null) { 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 new file mode 100644 index 000000000..67b8e4d26 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/widget/ui/btn/AbstractExtraButtonPane.java @@ -0,0 +1,126 @@ +package com.fr.design.widget.ui.btn; + +import com.fr.design.ExtraDesignClassManager; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.dialog.BasicPane; +import com.fr.design.fun.WidgetAdvancedPaneProvider; +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.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 org.jetbrains.annotations.Nullable; + +import javax.swing.JPanel; +import java.awt.Component; +import java.util.Set; + + + +/** + * 用来处理额外的按钮属性 + * + * @author John.Ying + * @since 11.0 + * Created on 2023/4/19 + */ +public abstract class AbstractExtraButtonPane extends ButtonWithHotkeysDetailPane { + protected JPanel extraPane; + protected boolean containsExtraPane; + protected static double F = TableLayout.FILL; + protected static double P = TableLayout.PREFERRED; + + protected void initExtraPane() { + initPluginListener(); + refreshExtraAdvancedPane(classType()); + } + + + /** + * 根据按钮类别判断需要返回什么类型的属性界面 + */ + protected void refreshExtraAdvancedPane(Class cls) { + extraPaneList.clear(); + boolean containsExtraPane = false; + Set> providers = ExtraDesignClassManager.getInstance().getArray(WidgetAdvancedPaneProvider.XML_TAG); + for (WidgetAdvancedPaneProvider provider : providers) { + if (!provider.accept(cls)) { + continue; + } + insertShortCut(provider.getInsertPosition(extraPaneList.size()), provider.createExtraAdvancedPane()); + containsExtraPane = true; + } + if (containsExtraPane) { + extraPane = FRGUIPaneFactory.createYBoxEmptyBorderPane(); + for (BasicBeanPane pane : extraPaneList) { + extraPane.add(pane); + } + } + this.containsExtraPane = containsExtraPane; + + } + + protected void initPluginListener() { + GeneralContext.listenPluginRunningChanged(new PluginEventListener() { + @Override + public void on(PluginEvent event) { + refreshExtraAdvancedPane(classType()); + } + }, 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 void populate(T button) { + super.populate(button); + for (BasicBeanPane pane : extraPaneList) { + pane.populateBean(button); + } + } + + @Override + public T update() { + T button = super.update(); + for (BasicBeanPane pane : extraPaneList) { + pane.updateBean(button); + } + return button; + } + + + @Override + protected DictionaryComboBox createCustomButtonTypeComboBox() { + return createButtonTypeComboBox(containsExtraPane); + } + + /** + * 生成额外的属性界面 + */ + protected Component createExtraPane(@Nullable BasicPane pane) { + initExtraPane(); + Component[][] components = new Component[][]{ + new Component[]{pane, null}, + new Component[]{extraPane, null} + }; + double[] rowSize = {P, P}; + double[] columnSize = {P, F}; + int[][] rowCount = {{1, 1},{1, 1}}; + return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, 10, 7); + } + +} diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/btn/FormSubmitButtonDetailPane.java b/designer-form/src/main/java/com/fr/design/widget/ui/btn/FormSubmitButtonDetailPane.java index acc2e76c4..77a735df5 100644 --- a/designer-form/src/main/java/com/fr/design/widget/ui/btn/FormSubmitButtonDetailPane.java +++ b/designer-form/src/main/java/com/fr/design/widget/ui/btn/FormSubmitButtonDetailPane.java @@ -1,22 +1,21 @@ package com.fr.design.widget.ui.btn; import com.fr.form.parameter.FormSubmitButton; -import com.fr.design.widget.btn.ButtonWithHotkeysDetailPane; import java.awt.*; /** - * Created by IntelliJ IDEA. - * Author : Richer - * Version: 6.5.6 - * Date : 11-11-15 - * Time : 下午6:25 + * 提交参数按钮 + * + * @author John.Ying + * @since 11.0 + * Created on 2023/4/19 */ -public class FormSubmitButtonDetailPane extends ButtonWithHotkeysDetailPane { +public class FormSubmitButtonDetailPane extends AbstractExtraButtonPane { @Override protected Component createCenterPane() { - return null; + return createExtraPane(null); } @Override @@ -37,4 +36,5 @@ public class FormSubmitButtonDetailPane extends ButtonWithHotkeysDetailPane
extends ButtonWithHotkeysDetailPane { +public class AppendRowButtonDefinePane extends AbstractExtraButtonPane { private DefineAppendColumnRowPane defineColumnRowPane; // @Override @@ -26,7 +30,8 @@ public class AppendRowButtonDefinePane extends Button @Override protected Component createCenterPane() { - return defineColumnRowPane = new DefineAppendColumnRowPane(); + defineColumnRowPane = new DefineAppendColumnRowPane(); + return createExtraPane(defineColumnRowPane); } @Override @@ -55,4 +60,5 @@ public class AppendRowButtonDefinePane extends Button public Class classType() { return AppendRowButton.class; } + } diff --git a/designer-realize/src/main/java/com/fr/design/widget/ui/btn/DefaultButtonDetailPane.java b/designer-realize/src/main/java/com/fr/design/widget/ui/btn/DefaultButtonDetailPane.java index e7f621ccb..84239e904 100644 --- a/designer-realize/src/main/java/com/fr/design/widget/ui/btn/DefaultButtonDetailPane.java +++ b/designer-realize/src/main/java/com/fr/design/widget/ui/btn/DefaultButtonDetailPane.java @@ -1,20 +1,25 @@ package com.fr.design.widget.ui.btn; + import com.fr.form.ui.Button; import com.fr.form.ui.FreeButton; -import com.fr.design.widget.btn.ButtonWithHotkeysDetailPane; + import java.awt.*; + /** - * Created by IntelliJ IDEA. Author : Richer Version: 6.5.6 Date : 11-11-15 Time - * : 下午6:24 + * 普通按钮 + * + * @author John.Ying + * @since 11.0 + * Created on 2023/4/19 */ -public class DefaultButtonDetailPane extends ButtonWithHotkeysDetailPane