diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XCheckBoxGroup.java b/designer-form/src/main/java/com/fr/design/designer/creator/XCheckBoxGroup.java index 26f1421a6..086b8c3e7 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XCheckBoxGroup.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XCheckBoxGroup.java @@ -3,7 +3,9 @@ */ package com.fr.design.designer.creator; +import com.fr.design.designer.properties.mobile.ButtonGroupPropertyUI; import com.fr.design.form.util.XCreatorConstants; +import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.widget.editors.DictionaryEditor; @@ -87,4 +89,9 @@ public class XCheckBoxGroup extends XFieldEditor { protected String getIconName() { return "checkbox_group_16.png"; } + + @Override + public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { + return new WidgetPropertyUIProvider[] {new ButtonGroupPropertyUI(this)}; + } } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XRadioGroup.java b/designer-form/src/main/java/com/fr/design/designer/creator/XRadioGroup.java index af10fbc17..879c83399 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XRadioGroup.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XRadioGroup.java @@ -12,6 +12,8 @@ import javax.swing.ButtonGroup; import javax.swing.JComponent; import javax.swing.JRadioButton; +import com.fr.design.designer.properties.mobile.ButtonGroupPropertyUI; +import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.widget.editors.DictionaryEditor; import com.fr.design.mainframe.widget.editors.InChangeBooleanEditor; @@ -83,4 +85,9 @@ public class XRadioGroup extends XFieldEditor { protected String getIconName() { return "button_group_16.png"; } + + @Override + public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { + return new WidgetPropertyUIProvider[] {new ButtonGroupPropertyUI(this)}; + } } diff --git a/designer-form/src/main/java/com/fr/design/designer/properties/mobile/ButtonGroupPropertyUI.java b/designer-form/src/main/java/com/fr/design/designer/properties/mobile/ButtonGroupPropertyUI.java new file mode 100644 index 000000000..2c6b85c85 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/designer/properties/mobile/ButtonGroupPropertyUI.java @@ -0,0 +1,32 @@ +package com.fr.design.designer.properties.mobile; + +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XFieldEditor; +import com.fr.design.dialog.BasicPane; +import com.fr.design.fun.impl.AbstractWidgetPropertyUIProvider; +import com.fr.design.gui.itable.AbstractPropertyTable; +import com.fr.design.widget.ui.designer.mobile.ButtonGroupDefinePane; + +public class ButtonGroupPropertyUI extends AbstractWidgetPropertyUIProvider { + + private XCreator xCreator; + + public ButtonGroupPropertyUI(XFieldEditor xButtonGroupEditor) { + this.xCreator = xButtonGroupEditor; + } + + @Override + public AbstractPropertyTable createWidgetAttrTable() { + return null; + } + + @Override + public BasicPane createWidgetAttrPane() { + return new ButtonGroupDefinePane(xCreator); + } + + @Override + public String tableTitle() { + return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Mobile_Attr"); + } +} diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/ButtonGroupDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/ButtonGroupDefinePane.java new file mode 100644 index 000000000..3f8f4bb05 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/mobile/ButtonGroupDefinePane.java @@ -0,0 +1,83 @@ +package com.fr.design.widget.ui.designer.mobile; + +import com.fr.design.constants.LayoutConstants; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.foldablepane.UIExpandablePane; +import com.fr.design.gui.frpane.AttributeChangeListener; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.ispinner.UISpinner; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.FormDesigner; +import com.fr.form.ui.ButtonGroup; + +import javax.swing.*; +import java.awt.*; + + +public class ButtonGroupDefinePane extends MobileWidgetDefinePane { + + private XCreator xCreator; // 当前选中控件的xCreator + private UISpinner maxShowRowsSpinner; + + public ButtonGroupDefinePane(XCreator xCreator) { + this.xCreator = xCreator; + } + + @Override + public void initPropertyGroups(Object source) { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + UILabel maxShowRowsLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design-Mobile_Max_Show_Rows"), SwingConstants.LEFT); + this.maxShowRowsSpinner = new UISpinner(0, Integer.MAX_VALUE, 1, 5); + Component[][] components = new Component[][]{ + new Component[] {maxShowRowsLabel, maxShowRowsSpinner} + }; + double f = TableLayout.FILL; + double p = TableLayout.PREFERRED; + double[] rowSize = {p}; + double[] columnSize = {p,f}; + int[][] rowCount = {{1, 1}}; + final JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, 30, LayoutConstants.VGAP_LARGE); + panel.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0)); + final JPanel panelWrapper = FRGUIPaneFactory.createBorderLayout_S_Pane(); + panelWrapper.add(panel, BorderLayout.NORTH); + UIExpandablePane folderPane = new UIExpandablePane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Advanced"), 280, 20, panelWrapper); + this.add(folderPane, BorderLayout.NORTH); + this.repaint(); + } + + private void bindListeners2Widgets() { + reInitAllListeners(); + AttributeChangeListener changeListener = new AttributeChangeListener() { + @Override + public void attributeChange() { + update(); + } + }; + this.addAttributeChangeListener(changeListener); + } + + /** + * 后台初始化所有事件. + */ + private void reInitAllListeners() { + initListener(this); + } + + @Override + public void populate(FormDesigner designer) { + ButtonGroup buttonGroup = (ButtonGroup)xCreator.toData(); + this.maxShowRowsSpinner.setValue(buttonGroup.getMaxShowRows()); + // 数据 populate 完成后,再设置监听 + this.bindListeners2Widgets(); + } + + @Override + public void update() { + ButtonGroup buttonGroup = (ButtonGroup)xCreator.toData(); + buttonGroup.setMaxShowRows((int) maxShowRowsSpinner.getValue()); + DesignerContext.getDesignerFrame().getSelectedJTemplate().fireTargetModified(); // 触发设计器保存按钮亮起来 + } +}