diff --git a/designer-base/src/main/java/com/fr/design/mainframe/mobile/provider/checkboxgroup/CapsuleCheckboxGroupStyleProvider.java b/designer-base/src/main/java/com/fr/design/mainframe/mobile/provider/checkboxgroup/CapsuleCheckboxGroupStyleProvider.java new file mode 100644 index 000000000..fa2d9d905 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/mobile/provider/checkboxgroup/CapsuleCheckboxGroupStyleProvider.java @@ -0,0 +1,35 @@ +package com.fr.design.mainframe.mobile.provider.checkboxgroup; + +import com.fr.design.fun.impl.AbstractMobileWidgetStyleProvider; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane; +import com.fr.design.mainframe.mobile.ui.radiogroup.CapsuleCustomDefinePane; +import com.fr.form.ui.mobile.MobileStyle; +import com.fr.form.ui.mobile.radiogroup.CapsuleMobileStyle; + +public class CapsuleCheckboxGroupStyleProvider extends AbstractMobileWidgetStyleProvider { + @Override + public Class classForMobileStyle() { + return CapsuleMobileStyle.class; + } + + @Override + public Class classForWidgetAppearance() { + return CapsuleCustomDefinePane.class; + } + + @Override + public String xTypeForWidget() { + return "checkboxgroup"; + } + + @Override + public String displayName() { + return Toolkit.i18nText("Fine-Plugin-RadioGroup_Capsule_Button"); + } + + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/mobile/provider/checkboxgroup/ImageCheckboxGroupStyleProvider.java b/designer-base/src/main/java/com/fr/design/mainframe/mobile/provider/checkboxgroup/ImageCheckboxGroupStyleProvider.java new file mode 100644 index 000000000..fb7224aa1 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/mobile/provider/checkboxgroup/ImageCheckboxGroupStyleProvider.java @@ -0,0 +1,35 @@ +package com.fr.design.mainframe.mobile.provider.checkboxgroup; + +import com.fr.design.fun.impl.AbstractMobileWidgetStyleProvider; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane; +import com.fr.design.mainframe.mobile.ui.radiogroup.ImageCustomDefinePane; +import com.fr.form.ui.mobile.MobileStyle; +import com.fr.form.ui.mobile.radiogroup.ImageMobileStyle; + +public class ImageCheckboxGroupStyleProvider extends AbstractMobileWidgetStyleProvider { + @Override + public Class classForMobileStyle() { + return ImageMobileStyle.class; + } + + @Override + public Class classForWidgetAppearance() { + return ImageCustomDefinePane.class; + } + + @Override + public String xTypeForWidget() { + return "checkboxgroup"; + } + + @Override + public String displayName() { + return Toolkit.i18nText("Fine-Plugin-RadioGroup_Graphic_Button"); + } + + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/mobile/provider/checkboxgroup/UnitedCheckboxGroupStyleProvider.java b/designer-base/src/main/java/com/fr/design/mainframe/mobile/provider/checkboxgroup/UnitedCheckboxGroupStyleProvider.java new file mode 100644 index 000000000..e22aa9223 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/mobile/provider/checkboxgroup/UnitedCheckboxGroupStyleProvider.java @@ -0,0 +1,35 @@ +package com.fr.design.mainframe.mobile.provider.checkboxgroup; + +import com.fr.design.fun.impl.AbstractMobileWidgetStyleProvider; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane; +import com.fr.design.mainframe.mobile.ui.radiogroup.UnitedCustomDefinePane; +import com.fr.form.ui.mobile.MobileStyle; +import com.fr.form.ui.mobile.radiogroup.UnitedMobileStyle; + +public class UnitedCheckboxGroupStyleProvider extends AbstractMobileWidgetStyleProvider { + @Override + public Class classForMobileStyle() { + return UnitedMobileStyle.class; + } + + @Override + public Class classForWidgetAppearance() { + return UnitedCustomDefinePane.class; + } + + @Override + public String xTypeForWidget() { + return "checkboxgroup"; + } + + @Override + public String displayName() { + return Toolkit.i18nText("Fine-Plugin-RadioGroup_Linkage_Button"); + } + + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/radiogroup/CapsuleCustomDefinePane.java b/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/radiogroup/CapsuleCustomDefinePane.java index 072a7a57a..ab5b64a99 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/radiogroup/CapsuleCustomDefinePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/radiogroup/CapsuleCustomDefinePane.java @@ -36,11 +36,23 @@ public class CapsuleCustomDefinePane extends MobileStyleCustomDefinePane { private UIComboBox custom; private JPanel centerPane; + // 按钮排布+按钮排布下拉框panel; + private JPanel buttonAlignPane; + + // 固定列数 数字panel + private JPanel columnSizePane; private UISpinner leftSpinner; private UISpinner rightSpinner; private UISpinner topSpinner; private UISpinner bottomSpinner; + private UIComboBox layoutTypeCombo; + + private UIComboBox buttonAlignCombo; + + + private UISpinner columnSizeSpinner; + private JRadioButton leftAlignRadioButton; private JRadioButton centerAlignRadioButton; @@ -122,12 +134,12 @@ public class CapsuleCustomDefinePane extends MobileStyleCustomDefinePane { } private void addPaddingPane() { + double p = TableLayout.PREFERRED; + double[] rowSize = {p, p, p}; + double[] columnSize = {p, p}; centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-RadioGroup_Layout"))); - UILabel paddingHintLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Button_Padding")); UILabel emptyHintLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("")); - UILabel buttonAlignHintLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Alignment")); - UILabel leftLabel = new UILabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Padding_Left")); leftSpinner = new UISpinner(0, Integer.MAX_VALUE, 1, DesignerUtils.kDefaultHorizontalPadding); @@ -140,6 +152,52 @@ public class CapsuleCustomDefinePane extends MobileStyleCustomDefinePane { UILabel bottomLabel = new UILabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Padding_Bottom")); bottomSpinner = new UISpinner(0, Integer.MAX_VALUE, 1, DesignerUtils.kDefaultVerticalPadding); + // 布局方式下拉框 + UILabel layoutTypeLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Layout_Type")); + layoutTypeCombo = new UIComboBox(new String[]{ + Toolkit.i18nText("Fine-Plugin-RadioGroup_Layout_Single_Line"), + Toolkit.i18nText("Fine-Plugin-RadioGroup_Layout_Auto"), + Toolkit.i18nText("Fine-Plugin-RadioGroup_Layout_Fixed") + }); + layoutTypeCombo.setPreferredSize(new Dimension(DesignerUtils.NORMAL_COMBO_WIDTH, 20)); + layoutTypeCombo.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + if (layoutTypeCombo.getSelectedIndex() == 0) { + buttonAlignPane.setVisible(true); + columnSizePane.setVisible(false); + } + if (layoutTypeCombo.getSelectedIndex() == 1) { + buttonAlignPane.setVisible(false); + columnSizePane.setVisible(false); + } + if (layoutTypeCombo.getSelectedIndex() == 2) { + buttonAlignPane.setVisible(false); + columnSizePane.setVisible(true); + } + } + }); + + // 按钮排布下拉框 + UILabel buttonAlignLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Alignment")); + buttonAlignCombo = new UIComboBox(new String[]{ + Toolkit.i18nText("Fine-Plugin-RadioGroup_Alignment_Nature"), + Toolkit.i18nText("Fine-Plugin-RadioGroup_Alignment_Center"), + }); + buttonAlignCombo.setPreferredSize(new Dimension(DesignerUtils.LARGE_COMBO_WIDTH, 20)); + buttonAlignPane = TableLayoutHelper.createGapTableLayoutPane( + new Component[][]{new Component[]{buttonAlignLabel, buttonAlignCombo}}, + TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, + LayoutConstants.VGAP_SMALL + ); + + // 固定列数——数字输入框 + UILabel columnSizeLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Layout_Fixed_Number")); + columnSizeSpinner = new UISpinner(0, Integer.MAX_VALUE, 1, 1); + columnSizeSpinner.setPreferredSize(new Dimension(DesignerUtils.LARGE_COMBO_WIDTH, 20)); + columnSizePane = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{columnSizeLabel, columnSizeSpinner}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_SMALL); + columnSizePane.setVisible(false); + leftAlignRadioButton = new JRadioButton(Toolkit.i18nText("Fine-Plugin-RadioGroup_Alignment_Left"), true); centerAlignRadioButton = new JRadioButton(Toolkit.i18nText("Fine-Plugin-RadioGroup_Alignment_Center"), false); @@ -147,26 +205,30 @@ public class CapsuleCustomDefinePane extends MobileStyleCustomDefinePane { JPanel rightSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{rightLabel, rightSpinner}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_SMALL); JPanel topSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{topLabel, topSpinner}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_SMALL); JPanel bottomSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{bottomLabel, bottomSpinner}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_SMALL); - JPanel vPaddingSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{topSpinnerPanel, bottomSpinnerPanel}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_W1, LayoutConstants.VGAP_SMALL); JPanel hPaddingSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{leftSpinnerPanel, rightSpinnerPanel}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_W1, LayoutConstants.VGAP_SMALL); - JPanel layoutPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{leftAlignRadioButton, centerAlignRadioButton}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_W1, LayoutConstants.VGAP_SMALL); + JPanel layoutTypePanel = TableLayoutHelper.createGapTableLayoutPane( + new Component[][]{new Component[]{layoutTypeCombo}}, + TableLayoutHelper.FILL_LASTCOLUMN, + IntervalConstants.INTERVAL_W1, + LayoutConstants.VGAP_SMALL + ); ButtonGroup layoutRadioButtonGroup = new ButtonGroup(); layoutRadioButtonGroup.add(leftAlignRadioButton); layoutRadioButtonGroup.add(centerAlignRadioButton); - double p = TableLayout.PREFERRED; - double[] rowSize = {p, p, p}; - double[] columnSize = {p, p}; JPanel paddingPanel = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ {paddingHintLabel, vPaddingSpinnerPanel}, {emptyHintLabel, hPaddingSpinnerPanel}, - {buttonAlignHintLabel, layoutPanel}, + {layoutTypeLabel, layoutTypePanel}, }, rowSize, columnSize, 10); + centerPane.add(paddingPanel); + centerPane.add(buttonAlignPane); + centerPane.add(columnSizePane); } private void addBackgroundPane() { @@ -240,7 +302,7 @@ public class CapsuleCustomDefinePane extends MobileStyleCustomDefinePane { UILabel initialFontLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Font_init")); initialFontConfPane = new FontConfigPane(); - initialFontConfPane.setFontColor(new Color(204, 204, 204)); + initialFontConfPane.setFontColor(new Color(102, 102, 102)); JPanel fontPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{initialFontLabel, initialFontConfPane}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_MEDIUM); centerPane.add(fontPanel); UILabel selectedFontLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Font_Select")); @@ -260,6 +322,9 @@ public class CapsuleCustomDefinePane extends MobileStyleCustomDefinePane { rightSpinner.setValue(mobileStyle.getRightPadding()); topSpinner.setValue(mobileStyle.getTopPadding()); bottomSpinner.setValue(mobileStyle.getBottomPadding()); + layoutTypeCombo.setSelectedIndex(mobileStyle.getButtonLayoutType()); + buttonAlignCombo.setSelectedIndex(mobileStyle.getButtonAlign()); + columnSizeSpinner.setValue(mobileStyle.getButtonColumnSize()); leftAlignRadioButton.setSelected(mobileStyle.getButtonAlign() == DesignerUtils.kAlignLeft); centerAlignRadioButton.setSelected(mobileStyle.getButtonAlign() == DesignerUtils.kAlignCenter); initialColorSelectBox.setSelectObject(mobileStyle.getInitialBackgroundColor()); @@ -285,7 +350,9 @@ public class CapsuleCustomDefinePane extends MobileStyleCustomDefinePane { mobileStyle.setRightPadding(rightSpinner.getValue()); mobileStyle.setTopPadding(topSpinner.getValue()); mobileStyle.setBottomPadding(bottomSpinner.getValue()); - mobileStyle.setButtonAlign(leftAlignRadioButton.isSelected() ? DesignerUtils.kAlignLeft : DesignerUtils.kAlignCenter); + mobileStyle.setButtonAlign(buttonAlignCombo.getSelectedIndex()); + mobileStyle.setButtonLayoutType(layoutTypeCombo.getSelectedIndex()); + mobileStyle.setButtonColumnSize((int)columnSizeSpinner.getValue()); mobileStyle.setInitialBackgroundColor(initialColorSelectBox.getSelectObject()); mobileStyle.setSelectedBackgroundColor(selectedColorSelectBox.getSelectObject()); mobileStyle.setBorderType(borderLineCombo.getSelectedLineStyle()); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/radiogroup/IconConfigPane.java b/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/radiogroup/IconConfigPane.java index 08e0ecd09..61cf28288 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/radiogroup/IconConfigPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/radiogroup/IconConfigPane.java @@ -1,5 +1,6 @@ package com.fr.design.mainframe.mobile.ui.radiogroup; +import com.fr.base.BaseUtils; import com.fr.base.IconManager; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.DialogActionAdapter; @@ -12,11 +13,13 @@ import com.fr.design.web.CustomIconPane; import com.fr.form.ui.WidgetInfoConfig; import com.fr.general.ComparatorUtils; import com.fr.general.FRFont; +import com.fr.stable.ArrayUtils; import com.fr.stable.StringUtils; import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; +import javax.swing.event.EventListenerList; import javax.swing.plaf.basic.BasicButtonUI; import java.awt.*; import java.awt.event.ActionEvent; @@ -24,17 +27,102 @@ import java.awt.event.ActionListener; import java.util.ArrayList; public class IconConfigPane extends JPanel { + private final int northPaneWidth = 330; + private final Icon addIcon = BaseUtils.readIcon("/com/fr/design/images/buttonicon/icon_add.png"); + + private final Icon deleteIcon = BaseUtils.readIcon("/com/fr/design/images/buttonicon/icon_delete.png"); private UIButton editIconButton; private UIButton deleteIconButton; private String curIconName; private IconButton selectIconButton; private ArrayList iconButtons = new ArrayList(); - public IconConfigPane(int count) { - initComp(count); + private UIButton addCountButton; + + private UIButton deleteCountButton; + + private EventListenerList addCountListener = new EventListenerList(); + private EventListenerList deleteCountListener = new EventListenerList(); + + private JPanel northPane; + public IconConfigPane(int count, boolean canChangeCount) { + initComp(count, canChangeCount); + } + public void deleteCount() { + if (!iconButtons.isEmpty()) { + northPane.remove(iconButtons.get(iconButtons.size() - 1)); + iconButtons.remove(iconButtons.size() - 1); + adjustNorthPaneHeight(); + IconConfigPane.this.revalidate(); // 重新验证并更新布局 + IconConfigPane.this.repaint(); // 可选:刷新JPanel以更新界面显示 + deleteCountButton.setEnabled(!iconButtons.isEmpty()); + } + deleteCountButton.setEnabled(!iconButtons.isEmpty()); + } + + public void addCount() { + deleteCountButton.setEnabled(true); + IconButton iconButton = new IconButton(""); + iconButtons.add(iconButton); + int indexToInsert = northPane.getComponentCount() - 2; + deleteCountButton.setEnabled(!iconButtons.isEmpty()); + // 创建新的按钮并插入到倒数第三个组件后面 + northPane.add(iconButton, indexToInsert); + adjustNorthPaneHeight(); + IconConfigPane.this.revalidate(); // 重新验证并更新布局 + IconConfigPane.this.repaint(); // 可选:刷新JPanel以更新界面显示 + } + private void adjustNorthPaneHeight() { + northPane.setPreferredSize(new Dimension(northPaneWidth, getNorthPanelHeight(iconButtons.size()))); + } + + private int getNorthPanelHeight(int iconNum) { + return (int) Math.ceil((iconNum + 2) / 13.0) * 30; } - public void initComp(int count) { + private void initAddAndDeleteCountButton(Boolean deleteCountButtonEnabled) { + addCountButton = new UIButton(addIcon); + addCountButton.setPreferredSize(new Dimension(20, 20)); + addCountButton.setName("add"); + deleteCountButton = new UIButton(deleteIcon); + deleteCountButton.setPreferredSize(new Dimension(20, 20)); + deleteCountButton.setName("delete"); + deleteCountButton.setEnabled(deleteCountButtonEnabled); + addCountButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + fireAddCountListener(); + } + }); + deleteCountButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + fireDeleteCountListener(); + } + }); + northPane.add(addCountButton); + northPane.add(deleteCountButton); + } + public void refreshByIconNames(String[] names, Boolean canChangeCount) { + northPane.removeAll(); + northPane.setPreferredSize(new Dimension(northPaneWidth, getNorthPanelHeight(names.length))); + ArrayList newIconButtons = new ArrayList<>(); + for (String name : names) { + IconButton iconButton = new IconButton(name); + northPane.add(iconButton); + newIconButtons.add(iconButton); + } + iconButtons = newIconButtons; + if (canChangeCount) { + initAddAndDeleteCountButton(!ArrayUtils.isEmpty(names)); + } + IconConfigPane.this.revalidate(); + IconConfigPane.this.repaint(); + } + /* + 重载形式,默认没有增加/删减按钮 + */ + public void initComp(int count, boolean canChangeCount) { this.setLayout(FRGUIPaneFactory.createBorderLayout()); JPanel panel = FRGUIPaneFactory.createNormalFlowInnerContainer_M_Pane(); panel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0)); @@ -75,30 +163,73 @@ public class IconConfigPane extends JPanel { } }); deleteIconButton.setEnabled(false); - - + northPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + northPane.setPreferredSize(new Dimension(northPaneWidth, getNorthPanelHeight(count))); this.add(panel, BorderLayout.CENTER); - - JPanel northPane = new JPanel(); - northPane.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); for (int i = 0; i < count; i++) { IconButton iconButton = new IconButton(""); northPane.add(iconButton); iconButtons.add(iconButton); } + if (canChangeCount) { + initAddAndDeleteCountButton(count != 0); + } this.add(northPane, BorderLayout.NORTH); } public void setShowIconImage() { selectIconButton.setIconName(curIconName); } + /** + * 添加监听 + * + * @param changeListener 监听列表 + */ + public void addAddCountListener(ChangeListener changeListener) { + addCountListener.add(ChangeListener.class, changeListener); + } + + public void addDeleteCountListener(ChangeListener changeListener) { + deleteCountListener.add(ChangeListener.class, changeListener); + } + /** + * 点击增加按钮 + */ + public void fireAddCountListener() { + Object[] listeners = addCountListener.getListenerList(); + ChangeEvent e = null; + + for (int i = listeners.length - 2; i >= 0; i -= 2) { + if (listeners[i] == ChangeListener.class) { + if (e == null) { + e = new ChangeEvent(this); + } + ((ChangeListener) listeners[i + 1]).stateChanged(e); + } + } + } + /** + * 点击删除按钮 + */ + public void fireDeleteCountListener() { + Object[] listeners = deleteCountListener.getListenerList(); + ChangeEvent e = null; + + for (int i = listeners.length - 2; i >= 0; i -= 2) { + if (listeners[i] == ChangeListener.class) { + if (e == null) { + e = new ChangeEvent(this); + } + ((ChangeListener) listeners[i + 1]).stateChanged(e); + } + } + } public void populate(ArrayList iconArr) { for (int i = 0; i < iconButtons.size(); i++) { iconButtons.get(i).setIconName(iconArr.get(i)); } } - public ArrayList update() { ArrayList iconNames = new ArrayList(); for (int i = 0; i < iconButtons.size(); i++) { @@ -107,7 +238,6 @@ public class IconConfigPane extends JPanel { return iconNames; } - private class IconButton extends JToggleButton implements ActionListener { private String iconName; private Image iconImage = null; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/radiogroup/ImageCustomDefinePane.java b/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/radiogroup/ImageCustomDefinePane.java index 7288d3263..73a405dab 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/radiogroup/ImageCustomDefinePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/radiogroup/ImageCustomDefinePane.java @@ -23,6 +23,8 @@ import com.fr.form.ui.mobile.radiogroup.ImageMobileStyle; import com.fr.general.FRFont; import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; import java.awt.*; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; @@ -36,12 +38,21 @@ public class ImageCustomDefinePane extends MobileStyleCustomDefinePane { private JPanel scrollPanel; private UIComboBox custom; private JPanel centerPane; + // 按钮排布+按钮排布下拉框panel; + private JPanel buttonAlignPane; + // 固定列数 数字panel + private JPanel columnSizePane; private UISpinner leftSpinner; private UISpinner rightSpinner; private UISpinner topSpinner; private UISpinner bottomSpinner; + private UIComboBox layoutTypeCombo; + + private UIComboBox buttonAlignCombo; + + private UISpinner columnSizeSpinner; private IconConfigPane initialIconConfigPane; private IconConfigPane selectedIconConfigPane; @@ -141,27 +152,98 @@ public class ImageCustomDefinePane extends MobileStyleCustomDefinePane { JPanel vPaddingSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{topSpinnerPanel, bottomSpinnerPanel}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_W1, LayoutConstants.VGAP_SMALL); JPanel hPaddingSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{leftSpinnerPanel, rightSpinnerPanel}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_W1, LayoutConstants.VGAP_SMALL); + // 布局方式下拉框 + UILabel layoutTypeLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Layout_Type")); + layoutTypeCombo = new UIComboBox(new String[]{ + Toolkit.i18nText("Fine-Plugin-RadioGroup_Layout_Single_Line"), + Toolkit.i18nText("Fine-Plugin-RadioGroup_Layout_Auto"), + Toolkit.i18nText("Fine-Plugin-RadioGroup_Layout_Fixed") + }); + layoutTypeCombo.setPreferredSize(new Dimension(DesignerUtils.LARGE_COMBO_WIDTH, 20)); + layoutTypeCombo.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + System.out.println(layoutTypeCombo.getSelectedIndex()); + if (layoutTypeCombo.getSelectedIndex() == 0) { + buttonAlignPane.setVisible(true); + columnSizePane.setVisible(false); + } + if (layoutTypeCombo.getSelectedIndex() == 1) { + buttonAlignPane.setVisible(false); + columnSizePane.setVisible(false); + } + if (layoutTypeCombo.getSelectedIndex() == 2) { + buttonAlignPane.setVisible(false); + columnSizePane.setVisible(true); + } + } + }); + + // 按钮排布下拉框 + UILabel buttonAlignLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Alignment")); + buttonAlignCombo = new UIComboBox(new String[]{ + Toolkit.i18nText("Fine-Plugin-RadioGroup_Alignment_Nature"), + Toolkit.i18nText("Fine-Plugin-RadioGroup_Alignment_Split"), + }); + buttonAlignCombo.setSelectedIndex(DesignerUtils.kAlignSpit); + buttonAlignCombo.setPreferredSize(new Dimension(DesignerUtils.LARGE_COMBO_WIDTH, 20)); + buttonAlignPane = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{buttonAlignLabel, buttonAlignCombo}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_SMALL); + + // 固定列数——数字输入框 + UILabel columnSizeLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Layout_Fixed_Number")); + columnSizeSpinner = new UISpinner(0, Integer.MAX_VALUE, 1, DesignerUtils.kDefaultVerticalPadding); + columnSizeSpinner.setPreferredSize(new Dimension(DesignerUtils.LARGE_COMBO_WIDTH, 20)); + columnSizePane = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{columnSizeLabel, columnSizeSpinner}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_L1, LayoutConstants.VGAP_SMALL); + columnSizePane.setVisible(false); double p = TableLayout.PREFERRED; - double[] rowSize = {p, p}; + double[] rowSize = {p, p, p}; double[] columnSize = {p, p}; JPanel paddingPanel = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ {paddingHintLabel, vPaddingSpinnerPanel}, {emptyHintLabel, hPaddingSpinnerPanel}, + {layoutTypeLabel, layoutTypeCombo}, }, rowSize, columnSize, 10); centerPane.add(paddingPanel); + centerPane.add(buttonAlignPane); + centerPane.add(columnSizePane); } private void addIconPane() { - centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-RadioGroup_Icon"))); UILabel initialLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Icon_Init")); UILabel selectedLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Icon_Select")); - - initialIconConfigPane = new IconConfigPane(8); - selectedIconConfigPane = new IconConfigPane(8); - + initialIconConfigPane = new IconConfigPane(8, true); + selectedIconConfigPane = new IconConfigPane(8, true); + initialIconConfigPane.addAddCountListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + initialIconConfigPane.addCount(); + selectedIconConfigPane.addCount(); + } + }); + initialIconConfigPane.addDeleteCountListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + initialIconConfigPane.deleteCount(); + selectedIconConfigPane.deleteCount(); + } + }); + selectedIconConfigPane.addAddCountListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + initialIconConfigPane.addCount(); + selectedIconConfigPane.addCount(); + } + }); + selectedIconConfigPane.addDeleteCountListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + initialIconConfigPane.deleteCount(); + selectedIconConfigPane.deleteCount(); + } + }); JPanel container = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEADING, 0, 5); JPanel initialPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); @@ -175,7 +257,6 @@ public class ImageCustomDefinePane extends MobileStyleCustomDefinePane { container.add(selectedPane); centerPane.add(container); - } private void addFontPane() { @@ -205,8 +286,11 @@ public class ImageCustomDefinePane extends MobileStyleCustomDefinePane { rightSpinner.setValue(mobileStyle.getRightPadding()); topSpinner.setValue(mobileStyle.getTopPadding()); bottomSpinner.setValue(mobileStyle.getBottomPadding()); - initialIconConfigPane.populate(new ArrayList<>(Arrays.asList(mobileStyle.getInitialIconNames()))); - selectedIconConfigPane.populate(new ArrayList<>(Arrays.asList(mobileStyle.getSelectedIconNames()))); + layoutTypeCombo.setSelectedIndex(mobileStyle.getButtonLayoutType()); + buttonAlignCombo.setSelectedIndex(mobileStyle.getButtonAlign()); + columnSizeSpinner.setValue(mobileStyle.getButtonColumnSize()); + initialIconConfigPane.refreshByIconNames(mobileStyle.getInitialIconNames(), true); + selectedIconConfigPane.refreshByIconNames(mobileStyle.getSelectedIconNames(), true); if(mobileStyle.getInitialFont() != null) { initialFontConfPane.populate(mobileStyle.getInitialFont()); } @@ -224,6 +308,9 @@ public class ImageCustomDefinePane extends MobileStyleCustomDefinePane { mobileStyle.setRightPadding(rightSpinner.getValue()); mobileStyle.setTopPadding(topSpinner.getValue()); mobileStyle.setBottomPadding(bottomSpinner.getValue()); + mobileStyle.setButtonLayoutType(layoutTypeCombo.getSelectedIndex()); + mobileStyle.setButtonAlign(buttonAlignCombo.getSelectedIndex()); + mobileStyle.setButtonColumnSize((int)columnSizeSpinner.getValue()); ArrayList initialIconNamesList = initialIconConfigPane.update(); ArrayList selectedIconNamesList = selectedIconConfigPane.update(); mobileStyle.setInitialIconNames(initialIconNamesList.toArray(new String[initialIconNamesList.size()])); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/radiogroup/UnitedCustomDefinePane.java b/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/radiogroup/UnitedCustomDefinePane.java index 8d9b42574..7d39b2ad0 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/radiogroup/UnitedCustomDefinePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/mobile/ui/radiogroup/UnitedCustomDefinePane.java @@ -41,6 +41,7 @@ public class UnitedCustomDefinePane extends MobileStyleCustomDefinePane { private UISpinner topSpinner; private UISpinner bottomSpinner; + private UIComboBox buttonAlignCombo; private NewColorSelectBox initialColorSelectBox; private NewColorSelectBox selectedColorSelectBox; @@ -117,7 +118,7 @@ public class UnitedCustomDefinePane extends MobileStyleCustomDefinePane { private void addPaddingPane() { centerPane.add(DesignerUtils.createTitleSplitLine(Toolkit.i18nText("Fine-Plugin-RadioGroup_Layout"))); - + UILabel buttonAlignLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Alignment")); UILabel paddingHintLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("Fine-Plugin-RadioGroup_Button_Padding")); UILabel emptyHintLabel = DesignerUtils.createConfigLabel(Toolkit.i18nText("")); @@ -140,13 +141,19 @@ public class UnitedCustomDefinePane extends MobileStyleCustomDefinePane { JPanel vPaddingSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{topSpinnerPanel, bottomSpinnerPanel}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_W1, LayoutConstants.VGAP_SMALL); JPanel hPaddingSpinnerPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{leftSpinnerPanel, rightSpinnerPanel}}, TableLayoutHelper.FILL_LASTCOLUMN, IntervalConstants.INTERVAL_W1, LayoutConstants.VGAP_SMALL); - + // 按钮排布下拉框 + buttonAlignCombo = new UIComboBox(new String[]{ + Toolkit.i18nText("Fine-Plugin-RadioGroup_Alignment_Nature"), + Toolkit.i18nText("Fine-Plugin-RadioGroup_Alignment_Split"), + }); + buttonAlignCombo.setPreferredSize(new Dimension(DesignerUtils.NORMAL_COMBO_WIDTH, 20)); double p = TableLayout.PREFERRED; - double[] rowSize = {p, p}; + double[] rowSize = {p, p, p}; double[] columnSize = {p, p}; JPanel paddingPanel = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ {paddingHintLabel, vPaddingSpinnerPanel}, {emptyHintLabel, hPaddingSpinnerPanel}, + {buttonAlignLabel, buttonAlignCombo} }, rowSize, columnSize, 10); centerPane.add(paddingPanel); @@ -234,6 +241,7 @@ public class UnitedCustomDefinePane extends MobileStyleCustomDefinePane { rightSpinner.setValue(mobileStyle.getRightPadding()); topSpinner.setValue(mobileStyle.getTopPadding()); bottomSpinner.setValue(mobileStyle.getBottomPadding()); + buttonAlignCombo.setSelectedIndex(mobileStyle.getButtonAlign()); initialColorSelectBox.setSelectObject(mobileStyle.getInitialBackgroundColor()); selectedColorSelectBox.setSelectObject(mobileStyle.getSelectedBackgroundColor()); borderLineCombo.setSelectedLineStyle(mobileStyle.getBorderType()); @@ -256,6 +264,7 @@ public class UnitedCustomDefinePane extends MobileStyleCustomDefinePane { mobileStyle.setRightPadding(rightSpinner.getValue()); mobileStyle.setTopPadding(topSpinner.getValue()); mobileStyle.setBottomPadding(bottomSpinner.getValue()); + mobileStyle.setButtonAlign(buttonAlignCombo.getSelectedIndex()); mobileStyle.setInitialBackgroundColor(initialColorSelectBox.getSelectObject()); mobileStyle.setSelectedBackgroundColor(selectedColorSelectBox.getSelectObject()); mobileStyle.setBorderType(borderLineCombo.getSelectedLineStyle()); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/mobile/utils/DesignerUtils.java b/designer-base/src/main/java/com/fr/design/mainframe/mobile/utils/DesignerUtils.java index bcadac1c7..9bc412cef 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/mobile/utils/DesignerUtils.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/mobile/utils/DesignerUtils.java @@ -16,10 +16,14 @@ import java.awt.*; public class DesignerUtils { public static final int NORMAL_COMBO_WIDTH = 152; + + public static final int LARGE_COMBO_WIDTH = 174; public static final int kDefaultHorizontalPadding = 0; public static final int kDefaultVerticalPadding = 15; public static final int kAlignLeft = 0; public static final int kAlignCenter = 1; + + public static final int kAlignSpit = 1; public static final int[] BORDER_LINE_STYLE_ARRAY = new int[]{ Constants.LINE_NONE, Constants.LINE_THIN, diff --git a/designer-base/src/main/java/com/fr/design/mainframe/mobile/utils/MobileStyleProviderManager.java b/designer-base/src/main/java/com/fr/design/mainframe/mobile/utils/MobileStyleProviderManager.java index 7c3194ba6..96113e90a 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/mobile/utils/MobileStyleProviderManager.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/mobile/utils/MobileStyleProviderManager.java @@ -1,5 +1,8 @@ package com.fr.design.mainframe.mobile.utils; +import com.fr.design.mainframe.mobile.provider.checkboxgroup.CapsuleCheckboxGroupStyleProvider; +import com.fr.design.mainframe.mobile.provider.checkboxgroup.ImageCheckboxGroupStyleProvider; +import com.fr.design.mainframe.mobile.provider.checkboxgroup.UnitedCheckboxGroupStyleProvider; import com.fr.design.mainframe.mobile.provider.combo.SimpleComboCheckBoxStyleProvider; import com.fr.design.mainframe.mobile.provider.combo.SimpleComboStyleProvider; import com.fr.design.mainframe.mobile.provider.date.NavigationStyleProvider; @@ -26,6 +29,9 @@ public class MobileStyleProviderManager { add(new CapsuleRadioGroupStyleProvider()); add(new UnitedRadioGroupStyleProvider()); add(new ImageRadioGroupStyleProvider()); + add(new CapsuleCheckboxGroupStyleProvider()); + add(new UnitedCheckboxGroupStyleProvider()); + add(new ImageCheckboxGroupStyleProvider()); }}; private static Set mobileParamUIProviderSet = new HashSet() {{ add(new MobileTopParamStyleProvider()); diff --git a/designer-base/src/main/resources/com/fr/design/images/buttonicon/icon_add.png b/designer-base/src/main/resources/com/fr/design/images/buttonicon/icon_add.png new file mode 100644 index 000000000..170c4027d Binary files /dev/null and b/designer-base/src/main/resources/com/fr/design/images/buttonicon/icon_add.png differ diff --git a/designer-base/src/main/resources/com/fr/design/images/buttonicon/icon_delete.png b/designer-base/src/main/resources/com/fr/design/images/buttonicon/icon_delete.png new file mode 100644 index 000000000..60f3b0343 Binary files /dev/null and b/designer-base/src/main/resources/com/fr/design/images/buttonicon/icon_delete.png differ