From 811d74157e18fda1d793d2bdf1c088ab63b0ae68 Mon Sep 17 00:00:00 2001 From: neil Date: Wed, 18 May 2016 11:40:36 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E7=AB=AF=E8=87=AA=E9=80=82?= =?UTF-8?q?=E5=BA=94master?= 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 | 105 ++++++++++------ .../designer/creator/XWTitleLayout.java | 55 ++++---- .../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 | 92 +++++++------- .../design/mainframe/WidgetPropertyPane.java | 43 +++++-- 16 files changed, 636 insertions(+), 117 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 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..9e6638926 --- /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.base.mobile.MobileFitAttrState; +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.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..1cd04e8d0 --- /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.base.mobile.MobileFitAttrState; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.general.Inter; +import com.fr.report.mobile.ElementCaseMobileAttr; + +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 createNonListenerProperties() throws IntrospectionException { + CRPropertyDescriptor[] propertyTableEditor = { + new CRPropertyDescriptor("widgetName", this.data.getClass()) + .setI18NName(Inter.getLocText("Form-Widget_Name")), + new CRPropertyDescriptor("borderStyle", this.data.getClass()).setEditorClass( + WLayoutBorderStyleEditor.class).setRendererClass(LayoutBorderStyleRenderer.class).setI18NName( + Inter.getLocText("FR-Designer-Widget_Style")).putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"). + setPropertyChangeListener(new PropertyChangeAdapter() { + + @Override + public void propertyChange() { + initStyle(); + } + }), + new CRPropertyDescriptor("margin", this.data.getClass()).setEditorClass(PaddingMarginEditor.class) + .setRendererClass(PaddingMarginCellRenderer.class).setI18NName(Inter.getLocText("FR-Layout_Padding")) + .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), + new CRPropertyDescriptor("showToolBar", this.data.getClass()).setEditorClass(BooleanEditor.class) + .setI18NName(Inter.getLocText("Form-EC_toolbar")) + .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), + new CRPropertyDescriptor("heightRestrict", this.data.getClass()).setEditorClass(InChangeBooleanEditor.class) + .setI18NName(Inter.getLocText("Form-EC_heightrestrict")) + .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") + }; + + List defaultList = new ArrayList<>(); + + for (CRPropertyDescriptor propertyDescriptor : propertyTableEditor) { + defaultList.add(propertyDescriptor); + } + return defaultList; + } + + protected CRPropertyDescriptor[] revealHeightLimit() throws IntrospectionException { + CRPropertyDescriptor heightLimitProperty = new CRPropertyDescriptor("heightPercent", this.data.getClass()) + .setEditorClass(DoubleEditor.class) + .setI18NName(Inter.getLocText("Form-EC_heightpercent")) + .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"); + + ArrayList defaultList = (ArrayList) createNonListenerProperties(); + defaultList.add(heightLimitProperty); + + return defaultList.toArray(new CRPropertyDescriptor[defaultList.size()]); + } + + protected CRPropertyDescriptor[] getDefault() throws IntrospectionException { + ArrayList defaultList = (ArrayList) createNonListenerProperties(); + return defaultList.toArray(new CRPropertyDescriptor[defaultList.size()]); + } + @Override protected String getIconName() { @@ -231,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..c0f45c888 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWTitleLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWTitleLayout.java @@ -1,15 +1,12 @@ /** - * + * */ 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 @@ -25,17 +25,17 @@ import com.fr.general.ComparatorUtils; public class XWTitleLayout extends DedicateLayoutContainer { /** - * + * */ private static final long serialVersionUID = 5274572473978467325L; - + public XWTitleLayout() { super(new WTitleLayout("titlePane"), new Dimension()); } /** * 容器构造函数 - * + * * @param widget 控件widget * @param initSize 尺寸大小 */ @@ -58,17 +58,17 @@ public class XWTitleLayout extends DedicateLayoutContainer { public LayoutAdapter getLayoutAdapter() { return new FRTitleLayoutAdapter(this); } - + /** * 返回容器对应的wlayout - * + * * @return 同上 */ @Override public WTitleLayout toData() { return (WTitleLayout) data; } - + /** * 重置组件的名称 * @param name 名称 @@ -77,20 +77,20 @@ public class XWTitleLayout extends DedicateLayoutContainer { super.resetCreatorName(name); // 有标题的话,标题的名字也要重置下 if (getXCreatorCount() > 1) { - getTitleCreator().toData().setWidgetName(WidgetTitle.TITLE_NAME_INDEX + name); - } + getTitleCreator().toData().setWidgetName(WidgetTitle.TITLE_NAME_INDEX + name); + } } - + /** * 返回默认组件name - * + * * @return 容器名 */ @Override public String createDefaultName() { return "titlePanel"; } - + /** * 返回标题组件 * @return 标题组件 @@ -104,7 +104,7 @@ public class XWTitleLayout extends DedicateLayoutContainer { } return null; } - + /** * 将WLayout转换为XLayoutContainer */ @@ -128,7 +128,7 @@ public class XWTitleLayout extends DedicateLayoutContainer { /** * 组件增加 - * + * * @param e 容器事件 */ @Override @@ -139,17 +139,17 @@ public class XWTitleLayout extends DedicateLayoutContainer { WTitleLayout layout = this.toData(); XWidgetCreator creator = (XWidgetCreator) e.getChild(); FRTitleLayout lay = (FRTitleLayout) getLayout(); - Object constraints = lay.getConstraints(creator); - if (ComparatorUtils.equals(WTitleLayout.TITLE,constraints)) { - layout.addTitle(creator.toData(), creator.getBounds()); - } else if (ComparatorUtils.equals(WTitleLayout.BODY,constraints)) { - layout.addBody(creator.toData(), creator.getBounds()); - } + Object constraints = lay.getConstraints(creator); + if (ComparatorUtils.equals(WTitleLayout.TITLE,constraints)) { + layout.addTitle(creator.toData(), creator.getBounds()); + } else if (ComparatorUtils.equals(WTitleLayout.BODY,constraints)) { + layout.addBody(creator.toData(), creator.getBounds()); + } } /** * 组件删除 - * + * * @param e * 容器事件 */ @@ -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..06e2a520e --- /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..ac0ba0094 --- /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..552589b71 --- /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..1b297fc20 --- /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..e8932459b --- /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..2e4c219b9 --- /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..8e8cadad1 100644 --- a/designer_form/src/com/fr/design/gui/xtable/PropertyGroupModel.java +++ b/designer_form/src/com/fr/design/gui/xtable/PropertyGroupModel.java @@ -17,16 +17,16 @@ import java.lang.reflect.Method; import java.util.ArrayList; public class PropertyGroupModel extends AbstractPropertyGroupModel { - - private FormDesigner designer; + + private FormDesigner designer; public PropertyGroupModel(String name, XCreator creator, CRPropertyDescriptor[] propArray, - FormDesigner designer) { - super(name, creator, propArray); - this.designer = designer; - } + FormDesigner designer) { + super(name, creator, propArray); + this.designer = designer; + } - @Override + @Override public Object getValue(int row, int column) { if (column == 0) { return properties[row].getDisplayName(); @@ -49,9 +49,9 @@ public class PropertyGroupModel extends AbstractPropertyGroupModel { try { Method m = properties[row].getWriteMethod(); m.invoke(dealCreatorData(), value); - //属性名称为控件名时,单独处理下 + //属性名称为控件名时,单独处理下 if(ComparatorUtils.equals(FormConstants.NAME, properties[row].getName())){ - creator.resetCreatorName(value.toString()); + creator.resetCreatorName(value.toString()); } properties[row].firePropertyChanged(); return true; @@ -103,45 +103,49 @@ public class PropertyGroupModel extends AbstractPropertyGroupModel { PROPERTIES.add("Properties"); PROPERTIES.add("Others"); } - + /** * 控件属性赋值和取值时,针对scale和title做下处理 * @return */ private Object dealCreatorData() { - return creator.getPropertyDescriptorCreator().toData(); + return creator.getPropertyDescriptorCreator().toData(); + } + + @Override + protected void initEditor(final int row) throws Exception { + ExtendedPropertyEditor editor = (ExtendedPropertyEditor) properties[row].createPropertyEditor(dealCreatorData()); + if (editor == null) { + Class propType = properties[row].getPropertyType(); + editor = TableUtils.getPropertyEditorClass(propType).newInstance(); + } + if (editor != null) { + final ExtendedPropertyEditor extendEditor = editor; + editors[row] = new PropertyCellEditor(editor); + extendEditor.addPropertyChangeListener(new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + if(ComparatorUtils.equals(extendEditor.getValue(),getValue(row,1))) { + return; + } + if (extendEditor.refreshInTime()) { + 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 { + designer.fireTargetModified(); + } + designer.refreshDesignerUI(); + } + } + }); + } } - - @Override - protected void initEditor(final int row) throws Exception { - ExtendedPropertyEditor editor = (ExtendedPropertyEditor) properties[row].createPropertyEditor(dealCreatorData()); - if (editor == null) { - Class propType = properties[row].getPropertyType(); - editor = TableUtils.getPropertyEditorClass(propType).newInstance(); - } - if (editor != null) { - final ExtendedPropertyEditor extendEditor = editor; - editors[row] = new PropertyCellEditor(editor); - extendEditor.addPropertyChangeListener(new PropertyChangeListener() { - - @Override - public void propertyChange(PropertyChangeEvent evt) { - if(ComparatorUtils.equals(extendEditor.getValue(),getValue(row,1))) { - return; - } - if (extendEditor.refreshInTime()) { - editors[row].stopCellEditing(); - } else { - setValue(extendEditor.getValue(), row, 1); - if ("widgetName".equals(properties[row].getName())) { - designer.getEditListenerTable().fireCreatorModified(creator, DesignerEvent.CREATOR_RENAMED); - } else { - designer.fireTargetModified(); - } - designer.refreshDesignerUI(); - } - } - }); - } - } } \ No newline at end of file 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);