diff --git a/designer/src/com/fr/design/actions/report/ReportMobileAttrAction.java b/designer/src/com/fr/design/actions/report/ReportMobileAttrAction.java new file mode 100644 index 000000000..3248370ef --- /dev/null +++ b/designer/src/com/fr/design/actions/report/ReportMobileAttrAction.java @@ -0,0 +1,74 @@ +package com.fr.design.actions.report; + +import com.fr.base.BaseUtils; +import com.fr.design.actions.JWorkBookAction; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.JWorkBook; +import com.fr.design.menu.MenuKeySet; +import com.fr.design.report.mobile.ReportMobileAttrPane; +import com.fr.general.Inter; +import com.fr.main.TemplateWorkBook; +import com.fr.report.mobile.ElementCaseMobileAttr; + +import javax.swing.*; +import java.awt.event.ActionEvent; + +/** + * 设置cpt在移动端的一些属性, 包括自适应以及以后可能加展示区域之类的东西. + * + * Created by Administrator on 2016/5/12/0012. + */ +public class ReportMobileAttrAction extends JWorkBookAction{ + + public ReportMobileAttrAction(JWorkBook jwb) { + super(jwb); + this.setMenuKeySet(REPORT_APP_ATTR); + this.setName(getMenuKeySet().getMenuKeySetName() + "..."); + this.setMnemonic(getMenuKeySet().getMnemonic()); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_report/mobile.png")); + } + + /** + * 执行动作 + * + * @return 是否执行成功 + */ + public void actionPerformed(ActionEvent evt) { + final JWorkBook jwb = getEditingComponent(); + if (jwb == null) { + return; + } + final TemplateWorkBook wbTpl = jwb.getTarget(); + ElementCaseMobileAttr mobileAttr = wbTpl.getReportMobileAttr(); + + final ReportMobileAttrPane mobileAttrPane = new ReportMobileAttrPane(); + mobileAttrPane.populateBean(mobileAttr); + BasicDialog dialog = mobileAttrPane.showMediumWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { + @Override + public void doOk() { + wbTpl.setReportMobileAttr(mobileAttrPane.updateBean()); + jwb.fireTargetModified(); + } + }); + dialog.setVisible(true); + } + + private static final MenuKeySet REPORT_APP_ATTR = new MenuKeySet() { + @Override + public char getMnemonic() { + return 'P'; + } + + @Override + public String getMenuName() { + return Inter.getLocText("FR-Designer_Mobile-Attr"); + } + + @Override + public KeyStroke getKeyStroke() { + return null; + } + }; +} diff --git a/designer/src/com/fr/design/mainframe/JWorkBook.java b/designer/src/com/fr/design/mainframe/JWorkBook.java index d3e63782d..1455ee011 100644 --- a/designer/src/com/fr/design/mainframe/JWorkBook.java +++ b/designer/src/com/fr/design/mainframe/JWorkBook.java @@ -7,10 +7,10 @@ import com.fr.design.DesignModelAdapter; import com.fr.design.ExtraDesignClassManager; import com.fr.design.actions.AllowAuthorityEditAction; import com.fr.design.actions.ExitAuthorityEditAction; -import com.fr.design.actions.core.WorkBookSupportable; import com.fr.design.actions.file.WebPreviewUtils; import com.fr.design.actions.file.export.*; import com.fr.design.actions.report.ReportExportAttrAction; +import com.fr.design.actions.report.ReportMobileAttrAction; import com.fr.design.actions.report.ReportParameterAction; import com.fr.design.actions.report.ReportWebAttrAction; import com.fr.design.constants.UIConstants; @@ -478,6 +478,7 @@ public class JWorkBook extends JTemplate { new ReportWebAttrAction(this), new ReportExportAttrAction(this), new ReportParameterAction(this), + new ReportMobileAttrAction(this), new NameSeparator(Inter.getLocText("Utils-Current_Sheet")), }, this.reportComposite.getEditingReportComponent().shortcut4TemplateMenu()); } diff --git a/designer/src/com/fr/design/report/mobile/MobileRadioGroupPane.java b/designer/src/com/fr/design/report/mobile/MobileRadioGroupPane.java new file mode 100644 index 000000000..85cee58e8 --- /dev/null +++ b/designer/src/com/fr/design/report/mobile/MobileRadioGroupPane.java @@ -0,0 +1,118 @@ +package com.fr.design.report.mobile; + +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.gui.ibutton.UIRadioButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.base.mobile.MobileFitAttrState; +import com.fr.stable.StringUtils; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Administrator on 2016/5/16/0016. + */ +public class MobileRadioGroupPane extends BasicBeanPane{ + + private List radioButtons = new ArrayList(); + + public MobileRadioGroupPane(String title) { + initComponents(title); + } + + private void initComponents(String title) { + double p = TableLayout.PREFERRED; + double[] rowSize = {p}; + double[] columnSize = {p, p, p, p, p}; + + UIRadioButton defaultRadio = new UIRadioButton(MobileFitAttrState.DEFAULT.description()); + defaultRadio.setSelected(true); + UIRadioButton horizonRadio = new UIRadioButton(MobileFitAttrState.HORIZONTAL.description()); + UIRadioButton verticalRadio = new UIRadioButton(MobileFitAttrState.VERTICAL.description()); + UIRadioButton notFitRadio = new UIRadioButton(MobileFitAttrState.NONE.description()); + + addToButtonGroup(defaultRadio, horizonRadio, verticalRadio, notFitRadio); + + Component[][] components = new Component[][]{ + new Component[]{new UILabel(title), defaultRadio, horizonRadio, verticalRadio, notFitRadio} + }; + JPanel fitOpsPane = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); + fitOpsPane.setBorder(BorderFactory.createEmptyBorder(10, 13, 10, 10)); + + this.add(fitOpsPane); + } + + private void addToButtonGroup(UIRadioButton... radios) { + ButtonGroup buttonGroup = new ButtonGroup(); + for (UIRadioButton radio : radios) { + radioButtons.add(radio); + buttonGroup.add(radio); + } + } + + /** + * 设置按钮状态 + */ + public void setEnabled(boolean enabled) { + for (UIRadioButton radioButton : radioButtons) { + radioButton.setEnabled(enabled); + } + } + + /** + * 获取当前选中的按钮index + * + * @return 按钮index + */ + public int getSelectRadioIndex() { + for (int i = 0, len = radioButtons.size(); i < len; i++) { + if (radioButtons.get(i).isSelected()) { + return i; + } + } + + return 0; + } + + /** + * 选中指定index的按钮 + */ + public void selectIndexButton(int index) { + if (index < 0 || index > radioButtons.size() - 1) { + return; + } + + UIRadioButton button = radioButtons.get(index); + button.setSelected(true); + } + + /** + * 给所有的按钮加上监听 + */ + public void addActionListener(ActionListener actionListener) { + for (UIRadioButton radioButton : radioButtons) { + radioButton.addActionListener(actionListener); + } + } + + @Override + public void populateBean(MobileFitAttrState ob) { + selectIndexButton(ob.getState()); + } + + @Override + public MobileFitAttrState updateBean() { + int index = getSelectRadioIndex(); + return MobileFitAttrState.parse(index); + } + + @Override + protected String title4PopupWindow() { + return StringUtils.EMPTY; + } +} diff --git a/designer/src/com/fr/design/report/mobile/ReportMobileAttrPane.java b/designer/src/com/fr/design/report/mobile/ReportMobileAttrPane.java new file mode 100644 index 000000000..67f0ab825 --- /dev/null +++ b/designer/src/com/fr/design/report/mobile/ReportMobileAttrPane.java @@ -0,0 +1,62 @@ +package com.fr.design.report.mobile; + +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.general.Inter; +import com.fr.report.mobile.ElementCaseMobileAttr; +import com.fr.base.mobile.MobileFitAttrState; + +import javax.swing.*; +import java.awt.*; + +/** + * Created by Administrator on 2016/5/12/0012. + */ +public class ReportMobileAttrPane extends BasicBeanPane{ + + //横屏设置面板 + private MobileRadioGroupPane horizionPane; + //竖屏设置面板 + private MobileRadioGroupPane verticalPane; + + public ReportMobileAttrPane() { + initComponents(); + } + + private void initComponents() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + JPanel borderPane = FRGUIPaneFactory.createTitledBorderPane(this.title4PopupWindow()); + + JPanel fitOpsPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + horizionPane = new MobileRadioGroupPane(Inter.getLocText("FR-Designer_Mobile-Horizontal")); + verticalPane = new MobileRadioGroupPane(Inter.getLocText("FR-Designer_Mobile-Vertical")); + fitOpsPane.add(horizionPane, BorderLayout.NORTH); + fitOpsPane.add(verticalPane, BorderLayout.SOUTH); + + borderPane.add(fitOpsPane); + this.add(borderPane); + } + + @Override + public void populateBean(ElementCaseMobileAttr ob) { + if (ob == null) { + ob = new ElementCaseMobileAttr(); + } + + horizionPane.populateBean(ob.getHorziontalAttr()); + verticalPane.populateBean(ob.getVerticalAttr()); + } + + @Override + public ElementCaseMobileAttr updateBean() { + MobileFitAttrState horizonState = horizionPane.updateBean(); + MobileFitAttrState verticalState = verticalPane.updateBean(); + + return new ElementCaseMobileAttr(horizonState, verticalState); + } + + @Override + protected String title4PopupWindow() { + return Inter.getLocText("FR-Designer_Fit-App"); + } +} diff --git a/designer_base/src/com/fr/design/images/m_report/mobile.png b/designer_base/src/com/fr/design/images/m_report/mobile.png new file mode 100644 index 000000000..69600f515 Binary files /dev/null and b/designer_base/src/com/fr/design/images/m_report/mobile.png differ diff --git a/designer_form/src/com/fr/design/designer/creator/XCreator.java b/designer_form/src/com/fr/design/designer/creator/XCreator.java index 02c573266..518e9c27a 100644 --- a/designer_form/src/com/fr/design/designer/creator/XCreator.java +++ b/designer_form/src/com/fr/design/designer/creator/XCreator.java @@ -8,6 +8,7 @@ import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.events.DesignerEditor; import com.fr.design.designer.beans.models.SelectionModel; +import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.*; import com.fr.design.utils.gui.LayoutUtils; @@ -518,4 +519,13 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public void recalculateChildHeight(int height){ return; } + + /** + * 获取当前组件自定义的属性表tab + * + * @return 属性表tab数组 + */ + public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { + return new WidgetPropertyUIProvider[0]; + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/XElementCase.java b/designer_form/src/com/fr/design/designer/creator/XElementCase.java index 0e45b426d..022d8de06 100644 --- a/designer_form/src/com/fr/design/designer/creator/XElementCase.java +++ b/designer_form/src/com/fr/design/designer/creator/XElementCase.java @@ -1,8 +1,10 @@ package com.fr.design.designer.creator; import com.fr.design.ExtraDesignClassManager; +import com.fr.design.designer.properties.mobile.ElementCasePropertyUI; import com.fr.design.form.util.XCreatorConstants; import com.fr.design.fun.FormElementCaseEditorProcessor; +import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.design.gui.ilable.UILabel; import com.fr.design.mainframe.CoverReportPane; import com.fr.design.mainframe.EditingMouseListener; @@ -260,5 +262,9 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme designer.switchTab(component); } } - + + @Override + public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { + return new WidgetPropertyUIProvider[]{ new ElementCasePropertyUI(this)}; + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/XWTitleLayout.java b/designer_form/src/com/fr/design/designer/creator/XWTitleLayout.java index 716405ced..0d8e3ec22 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWTitleLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWTitleLayout.java @@ -3,13 +3,10 @@ */ package com.fr.design.designer.creator; -import java.awt.Dimension; -import java.awt.Rectangle; -import java.awt.event.ContainerEvent; - import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.adapters.layout.FRTitleLayoutAdapter; import com.fr.design.form.layout.FRTitleLayout; +import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.form.ui.Label; import com.fr.form.ui.Widget; import com.fr.form.ui.WidgetTitle; @@ -17,6 +14,9 @@ import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.form.ui.container.WTitleLayout; import com.fr.general.ComparatorUtils; +import java.awt.*; +import java.awt.event.ContainerEvent; + /** * 一些控件 如图表、报表块,有标题设置,且标题的高度字体等不变 * @author jim @@ -164,4 +164,9 @@ public class XWTitleLayout extends DedicateLayoutContainer { wlayout.removeWidget(wgt); } + @Override + public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { + XCreator creator = getPropertyDescriptorCreator(); + return creator.getWidgetPropertyUIProviders(); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/properties/mobile/ElementCasePropertyTable.java b/designer_form/src/com/fr/design/designer/properties/mobile/ElementCasePropertyTable.java new file mode 100644 index 000000000..7e37fefc3 --- /dev/null +++ b/designer_form/src/com/fr/design/designer/properties/mobile/ElementCasePropertyTable.java @@ -0,0 +1,68 @@ +package com.fr.design.designer.properties.mobile; + +import com.fr.base.FRContext; +import com.fr.design.designer.creator.CRPropertyDescriptor; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.form.util.XCreatorConstants; +import com.fr.design.gui.itable.AbstractPropertyTable; +import com.fr.design.gui.itable.PropertyGroup; +import com.fr.design.gui.xtable.PropertyGroupModel; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.WidgetPropertyPane; +import com.fr.general.Inter; + +import javax.swing.table.TableModel; +import java.beans.IntrospectionException; +import java.util.ArrayList; + +/** + * Created by Administrator on 2016/5/16/0016. + */ +public class ElementCasePropertyTable extends AbstractPropertyTable{ + + private XCreator xCreator; + private FormDesigner designer; + + public ElementCasePropertyTable(XCreator xCreator) { + this.xCreator = xCreator; + } + + @Override + public void initPropertyGroups(Object source) { + this.designer = WidgetPropertyPane.getInstance().getEditingFormDesigner(); + + groups = new ArrayList(); + CRPropertyDescriptor[] propertyTableEditor = null; + try { + propertyTableEditor = new CRPropertyDescriptor[]{ + new CRPropertyDescriptor("horziontalAttr", this.xCreator.toData().getClass()).setEditorClass(MobileFitEditor.class) + .setRendererClass(MobileFitRender.class) + .setI18NName(Inter.getLocText("FR-Designer_Mobile-Horizontal")) + .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, Inter.getLocText("FR-Designer_Fit-App")), + new CRPropertyDescriptor("verticalAttr", this.xCreator.toData().getClass()).setEditorClass(MobileFitEditor.class) + .setRendererClass(MobileFitRender.class) + .setI18NName(Inter.getLocText("FR-Designer_Mobile-Vertical")) + .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, Inter.getLocText("FR-Designer_Fit-App")) + + }; + } catch (IntrospectionException e) { + FRContext.getLogger().error(e.getMessage()); + } + + + groups.add(new PropertyGroup(new PropertyGroupModel(Inter.getLocText("FR-Designer_Fit-App"), xCreator, propertyTableEditor, designer))); + + TableModel model = new BeanTableModel(); + setModel(model); + this.repaint(); + } + + @Override + public void firePropertyEdit() { + } + + public void populate(FormDesigner designer) { + this.designer = designer; + initPropertyGroups(this.designer.getTarget()); + } +} diff --git a/designer_form/src/com/fr/design/designer/properties/mobile/ElementCasePropertyUI.java b/designer_form/src/com/fr/design/designer/properties/mobile/ElementCasePropertyUI.java new file mode 100644 index 000000000..5e7721a2e --- /dev/null +++ b/designer_form/src/com/fr/design/designer/properties/mobile/ElementCasePropertyUI.java @@ -0,0 +1,29 @@ +package com.fr.design.designer.properties.mobile; + +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XElementCase; +import com.fr.design.fun.impl.AbstractWidgetPropertyUIProvider; +import com.fr.design.gui.itable.AbstractPropertyTable; +import com.fr.general.Inter; + +/** + * Created by Administrator on 2016/5/16/0016. + */ +public class ElementCasePropertyUI extends AbstractWidgetPropertyUIProvider{ + + private XCreator xCreator; + + public ElementCasePropertyUI(XElementCase xElementCase) { + this.xCreator = xElementCase; + } + + @Override + public AbstractPropertyTable createWidgetAttrTable() { + return new ElementCasePropertyTable(xCreator); + } + + @Override + public String tableTitle() { + return Inter.getLocText("FR-Designer_Mobile-Attr"); + } +} diff --git a/designer_form/src/com/fr/design/designer/properties/mobile/MobileFitAlignmentItems.java b/designer_form/src/com/fr/design/designer/properties/mobile/MobileFitAlignmentItems.java new file mode 100644 index 000000000..094249bf5 --- /dev/null +++ b/designer_form/src/com/fr/design/designer/properties/mobile/MobileFitAlignmentItems.java @@ -0,0 +1,25 @@ +package com.fr.design.designer.properties.mobile; + +import com.fr.base.mobile.MobileFitAttrState; +import com.fr.design.designer.properties.items.Item; +import com.fr.design.designer.properties.items.ItemProvider; + +public class MobileFitAlignmentItems implements ItemProvider{ + + private static Item[] VALUE_ITEMS; + + static { + MobileFitAttrState[] allStates = MobileFitAttrState.values(); + int len = allStates.length; + VALUE_ITEMS = new Item[len]; + for (int i = 0; i < len ; i++) { + VALUE_ITEMS[i] = new Item(allStates[i].description(), allStates[i]); + } + } + + @Override + public Item[] getItems() { + return VALUE_ITEMS; + } + +} diff --git a/designer_form/src/com/fr/design/designer/properties/mobile/MobileFitEditor.java b/designer_form/src/com/fr/design/designer/properties/mobile/MobileFitEditor.java new file mode 100644 index 000000000..6591b9059 --- /dev/null +++ b/designer_form/src/com/fr/design/designer/properties/mobile/MobileFitEditor.java @@ -0,0 +1,50 @@ +package com.fr.design.designer.properties.mobile; + +import com.fr.design.designer.properties.items.Item; +import com.fr.design.designer.properties.items.ItemProvider; +import com.fr.design.mainframe.widget.editors.ComboEditor; + +import java.util.Vector; + +public class MobileFitEditor extends ComboEditor{ + public MobileFitEditor() { + this(new MobileFitAlignmentItems()); + } + + public MobileFitEditor(ItemProvider provider) { + this(provider.getItems()); + } + + public MobileFitEditor(Item[] items) { + super(items); + } + + public MobileFitEditor(Vector items) { + super(items); + } + + @Override + public void setValue(Object value) { + if (value == null) { + return; + } + + Item item = new Item(value.toString(), value); + comboBox.setSelectedItem(item); + } + + @Override + public Object getValue() { + Item item = (Item) comboBox.getSelectedItem(); + return item.getValue(); + } + + /** + * 是否立即刷新 + * @return 是或者否 + */ + @Override + public boolean refreshInTime() { + return false; + } +} diff --git a/designer_form/src/com/fr/design/designer/properties/mobile/MobileFitRender.java b/designer_form/src/com/fr/design/designer/properties/mobile/MobileFitRender.java new file mode 100644 index 000000000..6f560e4e3 --- /dev/null +++ b/designer_form/src/com/fr/design/designer/properties/mobile/MobileFitRender.java @@ -0,0 +1,10 @@ +package com.fr.design.designer.properties.mobile; + +import com.fr.design.mainframe.widget.renderer.EncoderCellRenderer; + +public class MobileFitRender extends EncoderCellRenderer{ + + public MobileFitRender(){ + super(new MobileFitWrapper()); + } +} diff --git a/designer_form/src/com/fr/design/designer/properties/mobile/MobileFitWrapper.java b/designer_form/src/com/fr/design/designer/properties/mobile/MobileFitWrapper.java new file mode 100644 index 000000000..164bcc5c0 --- /dev/null +++ b/designer_form/src/com/fr/design/designer/properties/mobile/MobileFitWrapper.java @@ -0,0 +1,9 @@ +package com.fr.design.designer.properties.mobile; + +import com.fr.design.designer.properties.ItemWrapper; + +public class MobileFitWrapper extends ItemWrapper{ + public MobileFitWrapper(){ + super(new MobileFitAlignmentItems()); + } +} diff --git a/designer_form/src/com/fr/design/gui/xtable/PropertyGroupModel.java b/designer_form/src/com/fr/design/gui/xtable/PropertyGroupModel.java index 926cbcaa6..143176553 100644 --- a/designer_form/src/com/fr/design/gui/xtable/PropertyGroupModel.java +++ b/designer_form/src/com/fr/design/gui/xtable/PropertyGroupModel.java @@ -133,6 +133,10 @@ public class PropertyGroupModel extends AbstractPropertyGroupModel { editors[row].stopCellEditing(); } else { setValue(extendEditor.getValue(), row, 1); + + if (designer == null) { + return; + } if ("widgetName".equals(properties[row].getName())) { designer.getEditListenerTable().fireCreatorModified(creator, DesignerEvent.CREATOR_RENAMED); } else { diff --git a/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java b/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java index d0d011328..57087597e 100644 --- a/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java +++ b/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java @@ -1,23 +1,23 @@ package com.fr.design.mainframe; -import java.awt.BorderLayout; -import java.util.ArrayList; -import java.util.List; - -import javax.swing.*; - import com.fr.base.BaseUtils; import com.fr.design.ExtraDesignClassManager; +import com.fr.design.designer.beans.events.DesignerEditListener; +import com.fr.design.designer.beans.events.DesignerEvent; +import com.fr.design.designer.properties.EventPropertyTable; +import com.fr.design.designer.properties.WidgetPropertyTable; import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.design.gui.frpane.UITabbedPane; -import com.fr.general.Inter; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.itable.AbstractPropertyTable; import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.designer.beans.events.DesignerEditListener; -import com.fr.design.designer.beans.events.DesignerEvent; -import com.fr.design.designer.properties.EventPropertyTable; -import com.fr.design.designer.properties.WidgetPropertyTable; +import com.fr.general.Inter; +import com.fr.stable.ArrayUtils; + +import javax.swing.*; +import java.awt.*; +import java.util.ArrayList; +import java.util.List; /** * 控件属性表Docking @@ -88,7 +88,7 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper tabbedPane.addTab(Inter.getLocText("Form-Properties"), psp); tabbedPane.addTab(Inter.getLocText("Form-Events"), esp); - WidgetPropertyUIProvider[] widgetAttrProviders = ExtraDesignClassManager.getInstance().getWidgetAttrProviders(); + WidgetPropertyUIProvider[] widgetAttrProviders = getExtraPropertyUIProviders(); for (WidgetPropertyUIProvider widgetAttrProvider : widgetAttrProviders) { AbstractPropertyTable propertyTable = widgetAttrProvider.createWidgetAttrTable(); widgetPropertyTables.add(propertyTable); @@ -106,6 +106,25 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper } } + /** + * 获取当前控件扩展的属性tab + * 来源有两个: + * 1, 各个控件从各自的Xcreator里扩展; + * 2, 所有的控件从插件里扩展. + * + * @return 扩展的tab + */ + private WidgetPropertyUIProvider[] getExtraPropertyUIProviders() { + FormSelection selection = designer.getSelectionModel().getSelection(); + WidgetPropertyUIProvider[] embeddedPropertyUIProviders = null; + if (selection != null && selection.getSelectedCreator() != null) { + embeddedPropertyUIProviders = selection.getSelectedCreator().getWidgetPropertyUIProviders(); + } + WidgetPropertyUIProvider[] widgetAttrProviders = ExtraDesignClassManager.getInstance().getWidgetAttrProviders(); + widgetAttrProviders = (WidgetPropertyUIProvider[]) ArrayUtils.addAll(embeddedPropertyUIProviders, widgetAttrProviders); + return widgetAttrProviders; + } + public void setEditingFormDesigner(BaseFormDesigner editor) { FormDesigner fd = (FormDesigner) editor; super.setEditingFormDesigner(fd);