From 3b4d25b2ab2414cc4e781cb72e482016d0ad7b3b Mon Sep 17 00:00:00 2001 From: neil <459208047@qq.com> Date: Tue, 17 May 2016 12:59:43 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E9=80=82=E5=BA=94=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/ReportMobileAttrAction.java | 74 +++++++++++ .../com/fr/design/mainframe/JWorkBook.java | 3 +- .../report/mobile/MobileRadioGroupPane.java | 118 ++++++++++++++++++ .../report/mobile/ReportMobileAttrPane.java | 62 +++++++++ .../com/fr/design/images/m_report/mobile.png | Bin 0 -> 928 bytes .../fr/design/designer/creator/XCreator.java | 10 ++ .../design/designer/creator/XElementCase.java | 8 +- .../designer/creator/XWTitleLayout.java | 13 +- .../mobile/ElementCasePropertyTable.java | 68 ++++++++++ .../mobile/ElementCasePropertyUI.java | 29 +++++ .../mobile/MobileFitAlignmentItems.java | 25 ++++ .../properties/mobile/MobileFitEditor.java | 50 ++++++++ .../properties/mobile/MobileFitRender.java | 10 ++ .../properties/mobile/MobileFitWrapper.java | 9 ++ .../design/gui/xtable/PropertyGroupModel.java | 4 + .../design/mainframe/WidgetPropertyPane.java | 43 +++++-- 16 files changed, 508 insertions(+), 18 deletions(-) create mode 100644 designer/src/com/fr/design/actions/report/ReportMobileAttrAction.java create mode 100644 designer/src/com/fr/design/report/mobile/MobileRadioGroupPane.java create mode 100644 designer/src/com/fr/design/report/mobile/ReportMobileAttrPane.java create mode 100644 designer_base/src/com/fr/design/images/m_report/mobile.png create mode 100644 designer_form/src/com/fr/design/designer/properties/mobile/ElementCasePropertyTable.java create mode 100644 designer_form/src/com/fr/design/designer/properties/mobile/ElementCasePropertyUI.java create mode 100644 designer_form/src/com/fr/design/designer/properties/mobile/MobileFitAlignmentItems.java create mode 100644 designer_form/src/com/fr/design/designer/properties/mobile/MobileFitEditor.java create mode 100644 designer_form/src/com/fr/design/designer/properties/mobile/MobileFitRender.java create mode 100644 designer_form/src/com/fr/design/designer/properties/mobile/MobileFitWrapper.java 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 0000000000..3248370ef6 --- /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 d3e63782df..1455ee011f 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 0000000000..85cee58e8f --- /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 0000000000..67f0ab825b --- /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 0000000000000000000000000000000000000000..69600f5154465877e70b70fb83597d6ecea2ef8d GIT binary patch literal 928 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>P#=1J2l)T-B#IQDo7|%2C!a7=KuP~pm)>g5 zS>0K?|Lx3HkXT+Bc`bMO+Nx43dW2{FKbJN{|K}$cBcl*Q11m!dD^p8| zhFz~O>H{_Sfov$wPb(=;EJ|hY%uP&B^-WCAOwLv?)3eaC&^0tr2sAWPsIV}LH#1Ry zS#M~mkWo@nV5P5LUS6)33DO0`KwWzIMd_?Ob4-CIOMpxc$tcZDva)i?PcF?(%`368 z3IHlCW-wg-e>cc>WHn&Bt*ks!Gt)Cl7>rEKULJOl1ga57G6$+AJTs*v1Ei$NNW=xG zL=s7fZ)R?4No7GQ1K3si1$pWAo5K9i%<&BYs$wuSwzM!bHU?5FonEX4DiK05CpfbT z7~Fbh-cC+m7kcFaWuuT}LxVgS(lT>Wfgzxuk)N9i3WuWn{1R|@q$UE)%C y=qIP->1O7p>%j$+^Yn|0lJyM@P0S1-q=C5}(3y$f8DfC8FnGH9xvX(); + 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 0000000000..5e7721a2e6 --- /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 0000000000..094249bf50 --- /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 0000000000..6591b90592 --- /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 0000000000..6f560e4e36 --- /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 0000000000..164bcc5c06 --- /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 926cbcaa6b..143176553c 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 d0d011328c..57087597e5 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);