From e4501e1624052b7ae53cb508c1c6e838fd59d4dc Mon Sep 17 00:00:00 2001 From: eason-skx Date: Sun, 19 Jun 2016 13:50:23 +0800 Subject: [PATCH 01/46] =?UTF-8?q?=E7=95=8C=E9=9D=A2populate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/chart/gui/style/datalabel/ChartLabelFontPane.java | 1 + 1 file changed, 1 insertion(+) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/datalabel/ChartLabelFontPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/datalabel/ChartLabelFontPane.java index 2416e3a61..e0919c235 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/datalabel/ChartLabelFontPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/datalabel/ChartLabelFontPane.java @@ -58,6 +58,7 @@ public class ChartLabelFontPane extends BasicScrollPane { } cateTextAttrPane.populate(cateTextAttr); categoryName.setSelected(meterPlot.isShowCateName()); + cateTextAttrPane.setEnabled(meterPlot.isShowCateName()); } From de747cfbd8a1516d0dba00e01c4ec0ccb0f4feb3 Mon Sep 17 00:00:00 2001 From: xiaxiang <1438003374@qq.com> Date: Tue, 28 Jun 2016 14:06:11 +0800 Subject: [PATCH 02/46] rt --- .../src/com/fr/design/mainframe/JForm.java | 15 +++-- .../actions/TemplateParameterAction.java | 60 +++++++++++++++++++ 2 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 designer_form/src/com/fr/design/mainframe/actions/TemplateParameterAction.java diff --git a/designer_form/src/com/fr/design/mainframe/JForm.java b/designer_form/src/com/fr/design/mainframe/JForm.java index e7342fc87..0ab170429 100644 --- a/designer_form/src/com/fr/design/mainframe/JForm.java +++ b/designer_form/src/com/fr/design/mainframe/JForm.java @@ -20,14 +20,12 @@ import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.gui.xpane.FormHyperlinkGroupPane; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.actions.EmbeddedFormExportExportAction; +import com.fr.design.mainframe.actions.TemplateParameterAction; import com.fr.design.mainframe.form.FormECCompositeProvider; import com.fr.design.mainframe.form.FormECDesignerProvider; import com.fr.design.mainframe.toolbar.ToolBarMenuDock; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; -import com.fr.design.menu.KeySetUtils; -import com.fr.design.menu.MenuDef; -import com.fr.design.menu.ShortCut; -import com.fr.design.menu.ToolBarDef; +import com.fr.design.menu.*; import com.fr.design.roleAuthority.RolesAlreadyEditedPane; import com.fr.design.utils.gui.LayoutUtils; import com.fr.file.FILE; @@ -378,8 +376,13 @@ public class JForm extends JTemplate implements BaseJForm { * @return 返回菜单 */ public ShortCut[] shortcut4TemplateMenu() { - return this.index == FORM_TAB ? new ShortCut[0] : - this.elementCaseDesign.shortcut4TemplateMenu(); + if (this.index == FORM_TAB) { + return (ShortCut[]) ArrayUtils.addAll(new ShortCut[]{ + new TemplateParameterAction(this) + }, new ShortCut[0]); + } else { + return this.elementCaseDesign.shortcut4TemplateMenu(); + } } /** diff --git a/designer_form/src/com/fr/design/mainframe/actions/TemplateParameterAction.java b/designer_form/src/com/fr/design/mainframe/actions/TemplateParameterAction.java new file mode 100644 index 000000000..59e08ae03 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/actions/TemplateParameterAction.java @@ -0,0 +1,60 @@ +package com.fr.design.mainframe.actions; + +import com.fr.base.BaseUtils; +import com.fr.base.Parameter; +import com.fr.design.actions.JTemplateAction; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.mainframe.JForm; +import com.fr.design.menu.KeySetUtils; +import com.fr.design.parameter.ParameterArrayPane; +import com.fr.form.main.Form; + +import javax.swing.*; +import java.awt.event.ActionEvent; + +/** + * Created by 夏翔 on 2016/6/18. + */ +public class TemplateParameterAction extends JTemplateAction { + public TemplateParameterAction(JForm jwb) { + super(jwb); + this.setMenuKeySet(KeySetUtils.REPORT_PARAMETER_ATTR); + this.setName(getMenuKeySet().getMenuKeySetName() + "..."); + this.setMnemonic(getMenuKeySet().getMnemonic()); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_report/p.png")); + } + + @Override + public void actionPerformed(ActionEvent e) { + final JForm jwb = getEditingComponent(); + if (jwb == null) { + return; + } + final Form wbTpl = jwb.getTarget(); + + final ParameterArrayPane parameterArrayPane = new ParameterArrayPane(); + BasicDialog parameterArrayDialog = parameterArrayPane.showWindow(SwingUtilities.getWindowAncestor(jwb)); + parameterArrayDialog.setModal(true); + + final Parameter[] copyTemplateParameters = wbTpl.getTemplateParameters(); + parameterArrayPane.populate(copyTemplateParameters); + parameterArrayDialog.addDialogActionListener(new DialogActionAdapter() { + + @Override + public void doOk() { + wbTpl.clearParameters(); + Parameter[] parameters = parameterArrayPane.updateParameters(); + for (int i = 0; i < parameters.length; i++) { + wbTpl.addParameter(parameters[i]); + } + jwb.fireTargetModified(); + jwb.getFormDesign().setParameterArray(parameters); + jwb.getFormDesign().refreshParameter(); + } + }); + parameterArrayDialog.setVisible(true); + + } + +} From 9b56656743816f404bd12c1a7b80c1521a14175f Mon Sep 17 00:00:00 2001 From: Lee Date: Wed, 29 Jun 2016 11:36:58 +0800 Subject: [PATCH 03/46] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D=EF=BC=9A=20?= =?UTF-8?q?=E6=89=8B=E6=9C=BA=E9=87=8D=E5=B8=83=E5=B1=80=E4=B8=8D=E8=83=BD?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=E4=BF=9D=E5=AD=98=E4=BB=A5=E5=8F=8A=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E4=B8=8D=E8=83=BD=E7=94=9F=E6=95=88=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=8C=E5=B7=B2=E7=BB=8F=E5=BE=97=E5=88=B0=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E4=BA=86=EF=BC=8C=E4=B8=8D=E9=87=87=E7=94=A8model?= =?UTF-8?q?=E7=9A=84=E5=86=99=E6=B3=95=EF=BC=8C=E4=BC=9A=E9=A2=9D=E5=A4=96?= =?UTF-8?q?new=E4=B8=80=E4=B8=AA=E5=AF=B9=E8=B1=A1=EF=BC=8C=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E8=AF=BB=E5=B1=9E=E6=80=A7=E5=92=8C=E5=86=99=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=E6=89=80=E5=9C=A8=E5=AF=B9=E8=B1=A1=E4=B8=8D=E6=98=AF?= =?UTF-8?q?=E5=90=8C=E4=B8=80=E4=B8=AA=EF=BC=8C=E4=B8=A5=E9=87=8Dbug?= =?UTF-8?q?=EF=BC=8C=E8=BF=99=E6=A0=B7=E4=BB=A3=E7=A0=81=E4=B9=9F=E5=BE=97?= =?UTF-8?q?=E5=88=B0=E4=BA=86=E5=BE=88=E5=A4=A7=E7=9A=84=E7=B2=BE=E7=AE=80?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../layout/FRBodyFitLayoutAdapter.java | 21 ---- .../designer/creator/XWBodyFitLayout.java | 20 ---- .../design/designer/creator/XWFitLayout.java | 4 +- .../properties/BodyAppRelayoutTable.java | 63 +++++----- .../BodyMobileLayoutPropertiesGroupModel.java | 111 ------------------ .../mobile/BodyMobilePropertyUI.java | 8 +- 6 files changed, 39 insertions(+), 188 deletions(-) delete mode 100644 designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyFitLayoutAdapter.java delete mode 100644 designer_form/src/com/fr/design/designer/creator/XWBodyFitLayout.java delete mode 100644 designer_form/src/com/fr/design/designer/properties/BodyMobileLayoutPropertiesGroupModel.java diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyFitLayoutAdapter.java deleted file mode 100644 index 0dc00045b..000000000 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRBodyFitLayoutAdapter.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.fr.design.designer.beans.adapters.layout; - -import com.fr.design.beans.GroupModel; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWFitLayout; -import com.fr.design.designer.properties.BodyMobileLayoutPropertiesGroupModel; - -public class FRBodyFitLayoutAdapter extends FRFitLayoutAdapter { - - public FRBodyFitLayoutAdapter(XLayoutContainer container) { - super(container); - } - /** - * 返回布局自身属性,方便一些特有设置在layout刷新时处理 - */ - @Override - public GroupModel getLayoutProperties() { - XWFitLayout xfl = (XWFitLayout) container; - return new BodyMobileLayoutPropertiesGroupModel(xfl); - } -} \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/XWBodyFitLayout.java b/designer_form/src/com/fr/design/designer/creator/XWBodyFitLayout.java deleted file mode 100644 index d9a404cb5..000000000 --- a/designer_form/src/com/fr/design/designer/creator/XWBodyFitLayout.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.fr.design.designer.creator; - -import com.fr.design.designer.beans.LayoutAdapter; -import com.fr.design.designer.beans.adapters.layout.FRBodyFitLayoutAdapter; -import com.fr.form.ui.container.WFitLayout; -import java.awt.Dimension; - -public class XWBodyFitLayout extends XWFitLayout { - public XWBodyFitLayout() { - this(new WFitLayout(), new Dimension()); - } - - public XWBodyFitLayout(WFitLayout widget, Dimension initSize) { - super(widget, initSize); - } - @Override - public LayoutAdapter getLayoutAdapter() { - return new FRBodyFitLayoutAdapter(this); - } -} \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java b/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java index 38652b3d4..c4b29d288 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java @@ -51,7 +51,7 @@ public class XWFitLayout extends XLayoutContainer { public XWFitLayout(WFitLayout widget, Dimension initSize) { super(widget, initSize); - + initPercent(); } @@ -1160,7 +1160,7 @@ public class XWFitLayout extends XLayoutContainer { @Override public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { - return new WidgetPropertyUIProvider[]{ new BodyMobilePropertyUI(new XWBodyFitLayout())}; + return new WidgetPropertyUIProvider[]{ new BodyMobilePropertyUI(this)}; } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/properties/BodyAppRelayoutTable.java b/designer_form/src/com/fr/design/designer/properties/BodyAppRelayoutTable.java index e675a81f0..6c10884a4 100644 --- a/designer_form/src/com/fr/design/designer/properties/BodyAppRelayoutTable.java +++ b/designer_form/src/com/fr/design/designer/properties/BodyAppRelayoutTable.java @@ -1,40 +1,39 @@ package com.fr.design.designer.properties; import java.awt.event.MouseEvent; +import java.beans.IntrospectionException; import java.util.ArrayList; - -import javax.swing.JTable; -import javax.swing.table.TableColumn; import javax.swing.table.TableModel; -import com.fr.design.beans.GroupModel; +import com.fr.base.FRContext; +import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.creator.*; +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.designer.beans.LayoutAdapter; +import com.fr.design.gui.xtable.ReportAppPropertyGroupModel; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.WidgetPropertyPane; +import com.fr.design.mainframe.widget.editors.InChangeBooleanEditor; +import com.fr.general.Inter; public class BodyAppRelayoutTable extends AbstractPropertyTable { - private XWBodyFitLayout xwBodyFitLayout; + private XCreator xCreator; + private FormDesigner designer; - public BodyAppRelayoutTable(XWBodyFitLayout xwBodyFitLayout) { - super(); - setDesigner(xwBodyFitLayout); + public BodyAppRelayoutTable(XCreator xCreator) { + this.xCreator = xCreator; } - public static ArrayList getCreatorPropertyGroup(XCreator source) { - ArrayList groups = new ArrayList(); - if (source instanceof XLayoutContainer) { - LayoutAdapter layoutAdapter = ((XLayoutContainer)source).getLayoutAdapter(); - if(layoutAdapter != null){ - GroupModel m = layoutAdapter.getLayoutProperties(); - if (m != null) { - groups.add(new PropertyGroup(m)); - } - } - } - return groups; + public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { + CRPropertyDescriptor[] propertyTableEditor = { + new CRPropertyDescriptor("appRelayout", this.xCreator.toData().getClass()).setEditorClass(InChangeBooleanEditor.class) + .setI18NName(Inter.getLocText("FR-Designer-App_ReLayout")) + .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, Inter.getLocText("FR-Designer-Layout_Adaptive_Layout")) + }; + return propertyTableEditor; } /** @@ -43,20 +42,24 @@ public class BodyAppRelayoutTable extends AbstractPropertyTable { */ public void initPropertyGroups(Object source) { - groups = getCreatorPropertyGroup(xwBodyFitLayout); + this.designer = WidgetPropertyPane.getInstance().getEditingFormDesigner(); + + groups = new ArrayList(); + CRPropertyDescriptor[] propertyTableEditor = null; + + try { + propertyTableEditor = supportedDescriptor(); + }catch (IntrospectionException e) { + FRContext.getLogger().error(e.getMessage()); + } + + groups.add(new PropertyGroup(new ReportAppPropertyGroupModel(Inter.getLocText("FR-Designer-Layout_Adaptive_Layout"), xCreator, propertyTableEditor, designer))); TableModel model = new BeanTableModel(); setModel(model); - this.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN); - TableColumn tc = this.getColumn(this.getColumnName(0)); - tc.setPreferredWidth(30); this.repaint(); } - private void setDesigner(XWBodyFitLayout xwBodyFitLayout) { - this.xwBodyFitLayout = xwBodyFitLayout; - } - /** * 单元格tooltip @@ -78,6 +81,6 @@ public class BodyAppRelayoutTable extends AbstractPropertyTable { * 待说明 */ public void firePropertyEdit() { - + designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_EDITED); } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/properties/BodyMobileLayoutPropertiesGroupModel.java b/designer_form/src/com/fr/design/designer/properties/BodyMobileLayoutPropertiesGroupModel.java deleted file mode 100644 index 7ec437662..000000000 --- a/designer_form/src/com/fr/design/designer/properties/BodyMobileLayoutPropertiesGroupModel.java +++ /dev/null @@ -1,111 +0,0 @@ -package com.fr.design.designer.properties; - -import com.fr.design.beans.GroupModel; -import com.fr.form.ui.container.WFitLayout; -import com.fr.design.designer.creator.XWFitLayout; -import com.fr.design.gui.icheckbox.UICheckBox; -import com.fr.design.mainframe.widget.editors.BooleanEditor; -import com.fr.design.mainframe.widget.editors.PropertyCellEditor; -import com.fr.general.Inter; - -import javax.swing.*; -import javax.swing.table.TableCellEditor; -import javax.swing.table.TableCellRenderer; -import java.awt.*; - -public class BodyMobileLayoutPropertiesGroupModel implements GroupModel { - private PropertyCellEditor reLayoutEditor; - private CheckBoxCellRenderer reLayoutrenderer; - private WFitLayout layout; - private XWFitLayout xfl; - - public BodyMobileLayoutPropertiesGroupModel(XWFitLayout xfl) { - this.xfl = xfl; - this.layout = xfl.toData(); - reLayoutrenderer = new CheckBoxCellRenderer(); - reLayoutEditor = new PropertyCellEditor(new BooleanEditor()); - } - - @Override - public String getGroupName() { - return Inter.getLocText("FR-Designer-Layout_Adaptive_Layout"); - } - - @Override - public int getRowCount() { - return 1; - } - - @Override - public TableCellRenderer getRenderer(int row) { - return reLayoutrenderer; - } - - @Override - public TableCellEditor getEditor(int row) { - return reLayoutEditor; - } - - @Override - public Object getValue(int row, int column) { - if (column == 0) { - return Inter.getLocText("FR-Designer-App_ReLayout"); - }else { - return layout.getAppRelayout(); - } - } - - @Override - public boolean setValue(Object value, int row, int column) { - int state = 0; - boolean appRelayoutState = true; - if(value instanceof Integer) { - state = (Integer)value; - }else if (value instanceof Boolean) { - appRelayoutState = (boolean)value; - } - if (column == 0 || state < 0) { - return false; - } else { - layout.setAppRelayout(appRelayoutState); - return true; - } - } - - /** - * 是否可编辑 - * @param row 行 - * @return 否 - */ - @Override - public boolean isEditable(int row) { - return true; - } - - private class CheckBoxCellRenderer extends UICheckBox implements TableCellRenderer { - - - public CheckBoxCellRenderer() { - super(); - setOpaque(true); - - } - - public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { - if (value instanceof Boolean) { - setSelected(((Boolean) value).booleanValue()); - setEnabled(table.isCellEditable(row, column)); - if (isSelected) { - setBackground(table.getSelectionBackground()); - setForeground(table.getSelectionForeground()); - } else { - setForeground(table.getForeground()); - setBackground(table.getBackground()); - } - } else { - return null; - } - return this; - } - } -} \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/properties/mobile/BodyMobilePropertyUI.java b/designer_form/src/com/fr/design/designer/properties/mobile/BodyMobilePropertyUI.java index 3816b9841..a64de4158 100644 --- a/designer_form/src/com/fr/design/designer/properties/mobile/BodyMobilePropertyUI.java +++ b/designer_form/src/com/fr/design/designer/properties/mobile/BodyMobilePropertyUI.java @@ -1,7 +1,7 @@ package com.fr.design.designer.properties.mobile; import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XWBodyFitLayout; +import com.fr.design.designer.creator.XWFitLayout; import com.fr.design.designer.properties.BodyAppRelayoutTable; import com.fr.design.fun.impl.AbstractWidgetPropertyUIProvider; import com.fr.design.gui.itable.AbstractPropertyTable; @@ -14,13 +14,13 @@ public class BodyMobilePropertyUI extends AbstractWidgetPropertyUIProvider { private XCreator xCreator; - public BodyMobilePropertyUI(XWBodyFitLayout xWBodyFitLayout) { - this.xCreator = xWBodyFitLayout; + public BodyMobilePropertyUI(XWFitLayout xwFitLayout) { + this.xCreator = xwFitLayout; } @Override public AbstractPropertyTable createWidgetAttrTable() { - return new BodyAppRelayoutTable((XWBodyFitLayout) xCreator); + return new BodyAppRelayoutTable(xCreator); } @Override From a371b8d62e6c550dbccfa80cc78ad0d33f034371 Mon Sep 17 00:00:00 2001 From: neil Date: Wed, 29 Jun 2016 15:01:53 +0800 Subject: [PATCH 04/46] module --- .../com/fr/design/module/DesignerModule.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/designer/src/com/fr/design/module/DesignerModule.java b/designer/src/com/fr/design/module/DesignerModule.java index 8ed444c19..13dc722dc 100644 --- a/designer/src/com/fr/design/module/DesignerModule.java +++ b/designer/src/com/fr/design/module/DesignerModule.java @@ -14,15 +14,8 @@ import com.fr.design.actions.insert.flot.ImageFloatAction; import com.fr.design.actions.insert.flot.TextBoxFloatAction; import com.fr.design.actions.server.StyleListAction; import com.fr.design.fun.ElementUIProvider; -import com.fr.design.gui.controlpane.NameObjectCreator; -import com.fr.design.gui.controlpane.NameableCreator; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; -import com.fr.design.hyperlink.ReportletHyperlinkPane; -import com.fr.design.hyperlink.WebHyperlinkPane; -import com.fr.design.javascript.EmailPane; -import com.fr.design.javascript.JavaScriptImplPane; -import com.fr.design.javascript.ParameterJavaScriptPane; import com.fr.design.javascript.ProcessTransitionAdapter; import com.fr.design.mainframe.*; import com.fr.design.mainframe.bbs.BBSGuestPane; @@ -38,7 +31,6 @@ import com.fr.general.*; import com.fr.general.xml.GeneralXMLTools; import com.fr.io.importer.Excel2007ReportImporter; import com.fr.io.importer.ExcelReportImporter; -import com.fr.js.*; import com.fr.main.impl.WorkBook; import com.fr.plugin.ExtraClassManager; import com.fr.quickeditor.ChartQuickEditor; @@ -55,10 +47,11 @@ import com.fr.stable.ParameterProvider; import com.fr.stable.StringUtils; import com.fr.stable.bridge.StableFactory; import com.fr.stable.fun.LogProvider; -import com.fr.stable.module.Module; import com.fr.stable.plugin.PluginSimplify; import com.fr.stable.script.CalculatorProviderContext; import com.fr.stable.script.ValueConverter; +import com.fr.stable.web.ServletContext; +import com.fr.stable.web.ServletContextAdapter; import com.fr.stable.xml.ObjectTokenizer; import com.fr.stable.xml.ObjectXMLWriterFinder; import com.fr.start.BBSGuestPaneProvider; @@ -75,6 +68,15 @@ import java.util.Set; public class DesignerModule extends DesignModule { + static { + ServletContext.addServletContextListener(new ServletContextAdapter() { + + public void onServletStart() { + ModuleContext.startModule(DesignerModule.class.getName()); + } + }); + } + /** * 启动设计器模块 */ From bb7091a4ae8cb4ffa49643205c3b72741a351761 Mon Sep 17 00:00:00 2001 From: neil Date: Mon, 4 Jul 2016 11:25:42 +0800 Subject: [PATCH 05/46] =?UTF-8?q?=E6=96=87=E5=AD=97=E7=AB=96=E6=8E=92?= =?UTF-8?q?=E6=B2=A1=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/gui/style/AlignmentPane.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/gui/style/AlignmentPane.java b/designer_base/src/com/fr/design/gui/style/AlignmentPane.java index 413ad70a4..fba645468 100644 --- a/designer_base/src/com/fr/design/gui/style/AlignmentPane.java +++ b/designer_base/src/com/fr/design/gui/style/AlignmentPane.java @@ -22,6 +22,7 @@ import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import com.fr.plugin.ExtraClassManager; import com.fr.report.fun.VerticalTextProcessor; +import com.fr.report.fun.impl.DefaultVerticalTextProcessor; import com.fr.stable.Constants; import javax.swing.*; @@ -134,7 +135,7 @@ public class AlignmentPane extends AbstractBasicStylePane implements GlobalNameO private void initTextRotationCombox(){ ArrayList selectOption = new ArrayList(); selectOption.add(Inter.getLocText("FR-Designer_Custom-Angle")); - VerticalTextProcessor processor = ExtraClassManager.getInstance().getSingle(VerticalTextProcessor.XML_TAG); + VerticalTextProcessor processor = ExtraClassManager.getInstance().getSingle(VerticalTextProcessor.XML_TAG, DefaultVerticalTextProcessor.class); if (processor != null){ selectOption.addAll(Arrays.asList(processor.getComboxOption())); } From b1d456df4a249e1b9c71fe2f90db42773f344b0d Mon Sep 17 00:00:00 2001 From: xiaxiang <1438003374@qq.com> Date: Mon, 4 Jul 2016 20:00:21 +0800 Subject: [PATCH 06/46] rt --- designer_form/src/com/fr/design/mainframe/JForm.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/designer_form/src/com/fr/design/mainframe/JForm.java b/designer_form/src/com/fr/design/mainframe/JForm.java index 0ab170429..17da0d32c 100644 --- a/designer_form/src/com/fr/design/mainframe/JForm.java +++ b/designer_form/src/com/fr/design/mainframe/JForm.java @@ -381,7 +381,9 @@ public class JForm extends JTemplate implements BaseJForm { new TemplateParameterAction(this) }, new ShortCut[0]); } else { - return this.elementCaseDesign.shortcut4TemplateMenu(); + return (ShortCut[]) ArrayUtils.addAll(new ShortCut[]{ + new TemplateParameterAction(this) + }, this.elementCaseDesign.shortcut4TemplateMenu()); } } From 8cdbfec451da44eea4a67f9f13e63f206794a6ab Mon Sep 17 00:00:00 2001 From: neil Date: Tue, 5 Jul 2016 15:42:15 +0800 Subject: [PATCH 07/46] =?UTF-8?q?=E6=9B=B4=E6=96=B0jar=E5=90=8E=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=B8=8A=E4=BC=A0=E6=8E=A7=E4=BB=B6=E6=8C=82=E4=BA=86?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/write/submit/SubmitVisitorListPane.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/designer/src/com/fr/design/write/submit/SubmitVisitorListPane.java b/designer/src/com/fr/design/write/submit/SubmitVisitorListPane.java index 156af0f96..3dfea6c15 100644 --- a/designer/src/com/fr/design/write/submit/SubmitVisitorListPane.java +++ b/designer/src/com/fr/design/write/submit/SubmitVisitorListPane.java @@ -173,10 +173,9 @@ public class SubmitVisitorListPane extends ObjectJControlPane { comboItemsMap = new HashMap<>(); Set providers = ExtraDesignClassManager.getInstance().getArray(SubmitProvider.MARK_STRING); - providers.add(new DefaultSubmit()); + addSubmitPane(new DefaultSubmit()); for (SubmitProvider provider : providers) { - customSubmitPanes.put(provider.keyForSubmit(), provider.appearanceForSubmit()); - comboItemsMap.put(provider.keyForSubmit(), provider.dataForSubmit()); + addSubmitPane(provider); } configTypes = new ArrayList<>(); @@ -211,6 +210,11 @@ public class SubmitVisitorListPane extends ObjectJControlPane { }); } + private void addSubmitPane(SubmitProvider provider) { + customSubmitPanes.put(provider.keyForSubmit(), provider.appearanceForSubmit()); + comboItemsMap.put(provider.keyForSubmit(), provider.dataForSubmit()); + } + @Override public void populateBean(WClassSubmiterProvider ob) { editing = ob; From 0655c626ba342d0b36c9685b23564d5bf69e88ad Mon Sep 17 00:00:00 2001 From: vito Date: Wed, 6 Jul 2016 11:34:39 +0800 Subject: [PATCH 08/46] =?UTF-8?q?=E7=99=BB=E9=99=86username=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=E6=97=B6=E7=9A=84npe=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/bbs/BBSLoginDialog.java | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/designer/src/com/fr/design/mainframe/bbs/BBSLoginDialog.java b/designer/src/com/fr/design/mainframe/bbs/BBSLoginDialog.java index c56e6547f..2845ccece 100644 --- a/designer/src/com/fr/design/mainframe/bbs/BBSLoginDialog.java +++ b/designer/src/com/fr/design/mainframe/bbs/BBSLoginDialog.java @@ -279,23 +279,26 @@ public class BBSLoginDialog extends UIDialog { * @return 同上 */ public static boolean login(String username, String password) { - try { - username = URLEncoder.encode(username, EncodeConstants.ENCODING_GBK); - } catch (UnsupportedEncodingException e) { - FRLogger.getLogger().error(e.getMessage()); - } - String url = SiteCenter.getInstance().acquireUrlByKind("bbs.login") + "&username=" + username + "&password=" + password; - HttpClient client = new HttpClient(url); - client.setTimeout(TIME_OUT); - if (client.getResponseCodeNoException() == HttpURLConnection.HTTP_OK) { + if (StringUtils.isNotBlank(username) && StringUtils.isNotBlank(password)) { try { - String res = client.getResponseText(EncodeConstants.ENCODING_GBK); - if (res.contains(LOGIN_SUCCESS_FLAG)) { - return true; - } - } catch (Exception e) { + username = URLEncoder.encode(username, EncodeConstants.ENCODING_GBK); + password = URLEncoder.encode(password, EncodeConstants.ENCODING_GBK); + } catch (UnsupportedEncodingException e) { FRLogger.getLogger().error(e.getMessage()); } + String url = SiteCenter.getInstance().acquireUrlByKind("bbs.login") + "&username=" + username + "&password=" + password; + HttpClient client = new HttpClient(url); + client.setTimeout(TIME_OUT); + if (client.getResponseCodeNoException() == HttpURLConnection.HTTP_OK) { + try { + String res = client.getResponseText(EncodeConstants.ENCODING_GBK); + if (res.contains(LOGIN_SUCCESS_FLAG)) { + return true; + } + } catch (Exception e) { + FRLogger.getLogger().error(e.getMessage()); + } + } } return false; } From dff8443a0c8ca8f6df4e98999a768945fd487a5e Mon Sep 17 00:00:00 2001 From: zhouping Date: Wed, 13 Jul 2016 21:13:47 +0800 Subject: [PATCH 09/46] =?UTF-8?q?=E4=B9=8B=E5=89=8D=E5=9B=A0=E4=B8=BA?= =?UTF-8?q?=E5=91=A8=E4=B8=89=E5=90=88master=E5=9B=9E=E9=80=80=E7=9A=84?= =?UTF-8?q?=EF=BC=8C=E5=8F=91=E5=B8=83=E5=90=8E=E5=86=8D=E9=87=8D=E6=96=B0?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E4=B8=80=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapters/layout/FRFitLayoutAdapter.java | 11 +- .../designer/beans/models/SelectionModel.java | 7 + .../design/designer/creator/XChartEditor.java | 101 ++++++++++--- .../fr/design/designer/creator/XCreator.java | 8 + .../designer/creator/XLayoutContainer.java | 26 ++++ .../creator/cardlayout/XCardAddButton.java | 8 + .../creator/cardlayout/XCardSwitchButton.java | 5 + .../creator/cardlayout/XWCardLayout.java | 5 + .../cardlayout/XWCardMainBorderLayout.java | 91 +++++++++++- .../creator/cardlayout/XWCardTagLayout.java | 6 + .../creator/cardlayout/XWCardTitleLayout.java | 6 + .../creator/cardlayout/XWTabFitLayout.java | 7 +- .../mainframe/EditingMouseListener.java | 138 +++++++++++++++--- 13 files changed, 368 insertions(+), 51 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java index 1e052ba6d..840d3a7db 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java @@ -14,6 +14,7 @@ import com.fr.design.designer.beans.ConstraintsGroupModel; import com.fr.design.designer.beans.HoverPainter; import com.fr.design.designer.beans.painters.FRFitLayoutPainter; import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XCreatorUtils; import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.designer.creator.XWFitLayout; import com.fr.design.designer.creator.cardlayout.XWCardLayout; @@ -163,7 +164,7 @@ public class FRFitLayoutAdapter extends AbstractLayoutAdapter { return false; } //如果当前处于边缘地带, 那么就把他贴到父容器上 - matchEdge(x, y); + boolean isMatchEdge = matchEdge(x, y); int componentHeight = comp.getHeight(); int componentWidth = comp.getWidth(); @@ -171,7 +172,13 @@ public class FRFitLayoutAdapter extends AbstractLayoutAdapter { int upHeight = (int) (componentHeight * TOP_HALF) + comp.getY(); //下半部分高度 int downHeight = (int) (componentHeight * BOTTOM_HALF) + comp.getY(); - + + //布局控件要先判断是不是可编辑 + XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator)comp).getTopLayout(); + if(topLayout != null && !isMatchEdge && !topLayout.isEditable()){ + return false; + } + if (isCrossPointArea(comp, x, y)) { return canAcceptWhileCrossPoint(comp, x, y); } diff --git a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java index fd2b48a73..834b28d74 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/SelectionModel.java @@ -66,6 +66,13 @@ public class SelectionModel { // 获取e所在的组件 XCreator comp = designer.getComponentAt(e); + + //布局组件的顶层布局如不可编辑,要获取其顶层布局 + XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer(comp).getTopLayout(); + if(topLayout != null && !topLayout.isEditable()){ + comp = topLayout; + } + // 如果父层是scale和title两个专属容器,返回其父层,组件本身是不让被选中的 if (comp != designer.getRootComponent() && comp != designer.getParaComponent()) { XCreator parentContainer = (XCreator) comp.getParent(); diff --git a/designer_form/src/com/fr/design/designer/creator/XChartEditor.java b/designer_form/src/com/fr/design/designer/creator/XChartEditor.java index 2087dda10..e477b7d7a 100644 --- a/designer_form/src/com/fr/design/designer/creator/XChartEditor.java +++ b/designer_form/src/com/fr/design/designer/creator/XChartEditor.java @@ -1,20 +1,22 @@ package com.fr.design.designer.creator; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; +import java.awt.*; +import java.awt.event.MouseEvent; +import java.awt.image.BufferedImage; import java.beans.IntrospectionException; -import javax.swing.BorderFactory; -import javax.swing.JComponent; -import javax.swing.SwingUtilities; +import javax.swing.*; +import com.fr.base.BaseUtils; import com.fr.base.chart.BaseChart; import com.fr.base.chart.BaseChartCollection; +import com.fr.design.designer.beans.AdapterBus; +import com.fr.design.designer.beans.ComponentAdapter; +import com.fr.design.designer.beans.models.SelectionModel; import com.fr.design.gui.chart.BaseChartPropertyPane; import com.fr.design.gui.chart.MiddleChartComponent; -import com.fr.design.mainframe.BaseJForm; -import com.fr.design.mainframe.FormDesigner; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.mainframe.*; import com.fr.design.mainframe.widget.editors.WLayoutBorderStyleEditor; import com.fr.design.mainframe.widget.renderer.LayoutBorderStyleRenderer; import com.fr.design.module.DesignModuleFactory; @@ -41,6 +43,9 @@ public class XChartEditor extends XBorderStyleWidgetCreator { //marro:无奈的属性,暂时想不出好办法 private boolean isRefreshing = false; + private boolean isEditing = false; + private JPanel coverPanel; + public XChartEditor(BaseChartEditor editor) { this(editor, new Dimension(250, 150)); } @@ -142,17 +147,22 @@ public class XChartEditor extends XBorderStyleWidgetCreator { } }); - final BaseChartPropertyPane propertyPane = DesignModuleFactory.getChartWidgetPropertyPane(formDesigner); - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - if (getDesignerEditor().getEditorTarget() != null) { - propertyPane.setSupportCellData(true); - propertyPane.populateChartPropertyPane(getDesignerEditorTarget().update(), formDesigner); + if (isEditing){ + final BaseChartPropertyPane propertyPane = DesignModuleFactory.getChartPropertyPane(); + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + if (getDesignerEditor().getEditorTarget() != null) { + propertyPane.setSupportCellData(true); + propertyPane.populateChartPropertyPane(getDesignerEditorTarget().update(), formDesigner); + } } - } - }); - return (JComponent)propertyPane; + }); + return (JComponent)propertyPane; + } + else{ + return (JComponent)DesignModuleFactory.getWidgetPropertyPane(formDesigner); + } } private MiddleChartComponent getDesignerEditorTarget() { @@ -167,8 +177,8 @@ public class XChartEditor extends XBorderStyleWidgetCreator { * 渲染Painter */ public void paint(Graphics g) { - super.paint(g); designerEditor.paintEditor(g, this.getSize()); + super.paint(g); } /** @@ -180,6 +190,27 @@ public class XChartEditor extends XBorderStyleWidgetCreator { return new Dimension(250, 100); } + /** + * 响应点击事件 + * + * @param editingMouseListener 鼠标点击,位置处理器 + * @param e 鼠标点击事件 + */ + public void respondClick(EditingMouseListener editingMouseListener,MouseEvent e){ + FormDesigner designer = editingMouseListener.getDesigner(); + SelectionModel selectionModel = editingMouseListener.getSelectionModel(); + isEditing = e.getClickCount() == 2 || designer.getCursor().getType() == Cursor.HAND_CURSOR; + displayCoverPane(!isEditing); + selectionModel.selectACreatorAtMouseEvent(e); + + if (editingMouseListener.stopEditing()) { + if (this != (XCreator)designer.getRootComponent()) { + ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, this); + editingMouseListener.startEditing(this, isEditing ? adapter.getDesignerEditor() : null, adapter); + } + } + } + @Override protected JComponent initEditor() { if (designerEditor == null) { @@ -198,6 +229,36 @@ public class XChartEditor extends XBorderStyleWidgetCreator { }); } } - return null; + + if (editor == null) { + setBorder(DEFALUTBORDER); + editor = new JPanel(); + editor.setBackground(null); + editor.setLayout(null); + editor.setOpaque(false); + + coverPanel = new CoverReportPane(); + coverPanel.setPreferredSize(this.getPreferredSize()); + coverPanel.setBounds(this.getBounds()); + + editor.add(coverPanel); + coverPanel.setVisible(false); + } + return editor; + } + + /** + * 是否展现覆盖的pane + * @param display 是否 + */ + public void displayCoverPane(boolean display){ + coverPanel.setVisible(display); + coverPanel.setPreferredSize(editor.getPreferredSize()); + coverPanel.setBounds(editor.getBounds()); + editor.repaint(); + } + + public JComponent getCoverPane(){ + return coverPanel; } } \ No newline at end of file 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 518e9c27a..c9b05f9b6 100644 --- a/designer_form/src/com/fr/design/designer/creator/XCreator.java +++ b/designer_form/src/com/fr/design/designer/creator/XCreator.java @@ -105,6 +105,14 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public void backupParent() { setBackupParent(XCreatorUtils.getParentXLayoutContainer(this)); } + + /** + * 获取当前布局控件的顶层布局框架,如tab布局、绝对布局 + * @return 封装的顶层布局 + */ + public XLayoutContainer getTopLayout(){ + return null; + } /** * 获取当前XCreator的一个封装父容器 diff --git a/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java b/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java index fec4899a8..ea27490fa 100644 --- a/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java +++ b/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java @@ -41,6 +41,16 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme protected boolean isRefreshing; protected int default_Length = 5; // 取指定点坐在的组件,默认为5保证取四侧相邻的组件时x、y在组件内非边框上 + /** + * 布局是否可编辑,不可则显示编辑层 + */ + protected boolean editable = false; + //鼠标移动到布局画出编辑层 + protected boolean isMouseEnter = false; + public void setMouseEnter(boolean mouseEnter) { + isMouseEnter = mouseEnter; + } + public XLayoutContainer(WLayout widget, Dimension initSize) { super(widget, initSize); this.addContainerListener(this); @@ -446,4 +456,20 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme public void setBackground(Background background){ } + + /** + * 布局是否可编辑,不可则显示编辑蒙层 + * @return 可否编辑 + */ + public boolean isEditable(){ + return this.editable; + } + + /** + * 设置布局是否可编辑,不可则显示编辑蒙层 + * @param isEditable 可否编辑 + */ + public void setEditable(boolean isEditable){ + this.editable = isEditable; + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java index 652331d1f..0c459b61c 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java @@ -12,6 +12,7 @@ import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.models.SelectionModel; import com.fr.design.designer.creator.XButton; +import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.mainframe.EditingMouseListener; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormHierarchyTreePane; @@ -149,6 +150,8 @@ public class XCardAddButton extends XButton{ XCardSwitchButton showButton = new XCardSwitchButton(titleButton,dimension,cardLayout,tagLayout); titleButton.setCustomStyle(true); titleButton.setShowButton(true); + showButton.setBackupParent(tagLayout); + this.tagLayout.setCurrentCard(titleButton); this.tagLayout.setTabFitIndex(index); @@ -180,4 +183,9 @@ public class XCardAddButton extends XButton{ } return newTextName; } + + @Override + public XLayoutContainer getTopLayout() { + return this.getBackupParent().getTopLayout(); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java index c10287d00..c75fc2542 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java @@ -292,5 +292,10 @@ public class XCardSwitchButton extends XButton { FormHierarchyTreePane.getInstance().refreshRoot(); selectionModel.setSelectedCreator(designer.getRootComponent()); } + + @Override + public XLayoutContainer getTopLayout() { + return this.getBackupParent().getTopLayout(); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java index 49eeb9211..621f4c5f5 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java @@ -367,4 +367,9 @@ public class XWCardLayout extends XLayoutContainer { mainLayout.setBorder(border); } } + + @Override + public XLayoutContainer getTopLayout() { + return this.getBackupParent().getTopLayout(); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java index 003bde4a4..b9039b1d6 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java @@ -3,18 +3,24 @@ */ package com.fr.design.designer.creator.cardlayout; -import java.awt.Color; -import java.awt.Component; -import java.awt.Dimension; +import java.awt.*; +import java.awt.event.MouseEvent; +import java.awt.image.BufferedImage; import java.util.ArrayList; - - - +import com.fr.design.designer.beans.AdapterBus; +import com.fr.design.designer.beans.ComponentAdapter; +import com.fr.design.designer.beans.models.SelectionModel; import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.designer.creator.XWBorderLayout; +import com.fr.design.icon.IconPathConstants; +import com.fr.design.mainframe.EditingMouseListener; +import com.fr.design.mainframe.FormDesigner; import com.fr.form.ui.container.WBorderLayout; import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; +import com.fr.general.IOUtils; +import com.fr.general.Inter; /** * card布局主体框架 @@ -31,6 +37,9 @@ public class XWCardMainBorderLayout extends XWBorderLayout{ private static final int LAYOUT_INDEX = 0; private static final int TITLE_STYLE = 2; private static final int NORMAL_STYLE = 1; + + private static final int EDIT_BTN_WIDTH = 60; + private static final int EDIT_BTN_HEIGHT = 24; /** * 构造函数 @@ -124,7 +133,7 @@ public class XWCardMainBorderLayout extends XWBorderLayout{ /** * 重新调整子组件的宽度 - * @param 宽度 + * @param width 宽度 */ public void recalculateChildWidth(int width){ ArrayList childrenList = this.getTargetChildrenList(); @@ -188,4 +197,72 @@ public class XWCardMainBorderLayout extends XWBorderLayout{ } } + + public void paint(Graphics g) { + super.paint(g); + //如果鼠标移动到布局内且布局不可编辑,画出编辑蒙层 + if (isMouseEnter && !editable) { + int x = 0; + int y = 0; + int w = getWidth(); + int h = getHeight(); + + Graphics2D g2d = (Graphics2D) g; + Composite oldComposite = g2d.getComposite(); + //画白色的编辑层 + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 60 / 100.0F)); + g2d.setColor(Color.WHITE); + g2d.fillRect(x, y, w, h); + //画编辑按钮所在框 + g2d.setComposite(oldComposite); + g2d.setColor(new Color(176, 196, 222)); + g2d.fillRect((x + w / 2 - EDIT_BTN_WIDTH / 2), (y + h / 2 - EDIT_BTN_HEIGHT / 2), EDIT_BTN_WIDTH, EDIT_BTN_HEIGHT); + //画编辑按钮图标 + BufferedImage image = IOUtils.readImage(IconPathConstants.TD_EDIT_ICON_PATH); + g2d.drawImage( + image, + (x + w / 2 - 23), + (y + h / 2 - image.getHeight() / 2), + image.getWidth(), + image.getHeight(), + null, + this + ); + g2d.setColor(Color.BLACK); + //画编辑文字 + g2d.drawString(Inter.getLocText("Edit"), x + w / 2 - 2, y + h / 2 + 5); + } + } + + /** + * 响应点击事件 + * + * @param editingMouseListener 鼠标点击,位置处理器 + * @param e 鼠标点击事件 + */ + public void respondClick(EditingMouseListener editingMouseListener,MouseEvent e){ + FormDesigner designer = editingMouseListener.getDesigner(); + SelectionModel selectionModel = editingMouseListener.getSelectionModel(); + boolean isEditing = designer.getCursor().getType() == Cursor.HAND_CURSOR || e.getClickCount() == 2; + setEditable(isEditing); + + selectionModel.selectACreatorAtMouseEvent(e); + designer.repaint(); + + if (editingMouseListener.stopEditing()) { + if (this != designer.getRootComponent()) { + ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, this); + editingMouseListener.startEditing(this, isEditing ? adapter.getDesignerEditor() : null, adapter); + } + } + } + + /** + * XWCardMainBorderLayout是card布局主体框架,tab的顶层布局 + * @return + */ + @Override + public XLayoutContainer getTopLayout() { + return this; + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java index bd844b53e..e40a7ca87 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java @@ -13,6 +13,7 @@ import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.models.SelectionModel; import com.fr.design.designer.creator.XCreatorUtils; +import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.designer.creator.XWHorizontalBoxLayout; import com.fr.design.designer.creator.XWidgetCreator; import com.fr.design.mainframe.EditingMouseListener; @@ -214,4 +215,9 @@ public class XWCardTagLayout extends XWHorizontalBoxLayout { } } } + + @Override + public XLayoutContainer getTopLayout() { + return this.getBackupParent().getTopLayout(); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTitleLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTitleLayout.java index 8f83a1fab..1514ed403 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTitleLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTitleLayout.java @@ -12,6 +12,7 @@ import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.models.SelectionModel; import com.fr.design.designer.creator.XCreatorUtils; +import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.designer.creator.XWBorderLayout; import com.fr.design.designer.creator.XWidgetCreator; import com.fr.design.mainframe.EditingMouseListener; @@ -146,4 +147,9 @@ public class XWCardTitleLayout extends XWBorderLayout { } } } + + @Override + public XLayoutContainer getTopLayout() { + return this.getBackupParent().getTopLayout(); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java index d8a5e0b43..b247d0bfc 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java @@ -188,7 +188,7 @@ public class XWTabFitLayout extends XWFitLayout { /** * 该布局需要隐藏,无需对边框进行操作 - * @param 边框 + * @param border 边框 * */ public void setBorder(Border border) { @@ -362,4 +362,9 @@ public class XWTabFitLayout extends XWFitLayout { this.hasCalGap = true; } + + @Override + public XLayoutContainer getTopLayout() { + return this.getBackupParent().getTopLayout(); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java index 00dd905b1..e66b37552 100644 --- a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java +++ b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java @@ -18,12 +18,7 @@ import com.fr.design.designer.beans.location.Direction; import com.fr.design.designer.beans.location.Location; import com.fr.design.designer.beans.models.SelectionModel; import com.fr.design.designer.beans.models.StateModel; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XCreatorUtils; -import com.fr.design.designer.creator.XEditorHolder; -import com.fr.design.designer.creator.XElementCase; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWFitLayout; +import com.fr.design.designer.creator.*; import com.fr.design.form.util.XCreatorConstants; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.xpane.ToolTipEditor; @@ -45,6 +40,10 @@ public class EditingMouseListener extends MouseInputAdapter { * 普通模式下对应的model */ private StateModel stateModel; + + + private XLayoutContainer xTopLayoutContainer; + private XLayoutContainer clickTopLayout; /** * 获取表单设计器 @@ -84,10 +83,14 @@ public class EditingMouseListener extends MouseInputAdapter { private int minDragSize = 5; private int minMoveSize = 8; + + private static final int EDIT_BTN_WIDTH = 60; + private static final int EDIT_BTN_HEIGHT = 24; //报表块的编辑按钮不灵敏,范围扩大一点 private static final int GAP = 10; private XElementCase xElementCase; + private XChartEditor xChartEditor; private JWindow promptWindow = new JWindow(); @@ -244,6 +247,12 @@ public class EditingMouseListener extends MouseInputAdapter { */ public void mouseMoved(MouseEvent e) { XCreator component = designer.getComponentAt(e); + + setCoverPaneNotDisplay(); + + if(processTopLayoutMouseMove(component, e)){ + return; + } if (component instanceof XEditorHolder) { XEditorHolder xcreator = (XEditorHolder) component; Rectangle rect = xcreator.getBounds(); @@ -267,17 +276,15 @@ public class EditingMouseListener extends MouseInputAdapter { if (!BaseUtils.isAuthorityEditing()) { stateModel.setDirection(dir); } - if(xElementCase != null){ - xElementCase.displayCoverPane(false); - } + if (component.isReport()) { xElementCase = (XElementCase)component; UIButton button = (UIButton)xElementCase.getCoverPane().getComponent(0); if(designer.getCursor().getType() ==Cursor.HAND_CURSOR) { designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } // component.getParent() 是报表块所在的XWTitleLayout - int minX = button.getX() + component.getX() + component.getParent().getX() - designer.getArea().getHorizontalValue(); - int minY = button.getY() + component.getY() + component.getParent().getY() + designer.getParaHeight() - designer.getArea().getVerticalValue(); + int minX = button.getX() + getParentPositionX(component, 0) - designer.getArea().getHorizontalValue(); + int minY = button.getY() + getParentPositionY(component, 0) - designer.getArea().getVerticalValue(); if(e.getX() + GAP > minX && e.getX() - GAP < minX + button.getWidth()){ if( e.getY() + GAP > minY && e.getY() - GAP < minY + button.getHeight()){ designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); @@ -285,16 +292,84 @@ public class EditingMouseListener extends MouseInputAdapter { } xElementCase.displayCoverPane(true); xElementCase.setDirections(Direction.TOP_BOTTOM_LEFT_RIGHT); + designer.repaint(); - } else { - if(xElementCase != null){ - xElementCase.displayCoverPane(false); - designer.repaint(); - } + return; } + + processChartEditorMouseMove(component, e); + + designer.repaint(); } - /** + private void setCoverPaneNotDisplay(){ + if (xElementCase != null){ + xElementCase.displayCoverPane(false); + } + if (xChartEditor != null){ + xChartEditor.displayCoverPane(false); + } + + if (xTopLayoutContainer != null) { + xTopLayoutContainer.setMouseEnter(false); + } + designer.repaint(); + } + + private boolean processTopLayoutMouseMove(XCreator component, MouseEvent e){ + XLayoutContainer parent = XCreatorUtils.getHotspotContainer(component).getTopLayout(); + if (parent != null){ + xTopLayoutContainer = parent; + xTopLayoutContainer.setMouseEnter(true); + designer.repaint(); + if(!xTopLayoutContainer.isEditable()) { + if (designer.getCursor().getType() == Cursor.HAND_CURSOR) { + designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } + if (e.getX() > (parent.getX() + parent.getWidth() / 2 - EDIT_BTN_WIDTH / 2 - GAP) + && e.getX() < (parent.getX() + parent.getWidth() / 2 + EDIT_BTN_WIDTH / 2 + GAP)) { + if (e.getY() > (parent.getY() + parent.getHeight() / 2 - EDIT_BTN_HEIGHT / 2 - GAP) + && e.getY() < (parent.getY() + parent.getHeight() / 2 + EDIT_BTN_HEIGHT / 2 + GAP + designer.getParaHeight())) { + designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + } + } + return true; + } + } + return false; + } + + private void processChartEditorMouseMove(XCreator component, MouseEvent e){ + if (component instanceof XChartEditor) { + xChartEditor = (XChartEditor)component; + UIButton button = (UIButton)xChartEditor.getCoverPane().getComponent(0); + if(designer.getCursor().getType() ==Cursor.HAND_CURSOR) { + designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } + int minX = button.getX() + getParentPositionX(component, 0) - designer.getArea().getHorizontalValue(); + int minY = button.getY() + getParentPositionY(component, 0) - designer.getArea().getVerticalValue(); + if(e.getX() + GAP > minX && e.getX() - GAP < minX + button.getWidth()){ + if( e.getY() + GAP > minY && e.getY() - GAP < minY + button.getHeight()){ + designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + } + } + xChartEditor.displayCoverPane(true); + xChartEditor.setDirections(Direction.TOP_BOTTOM_LEFT_RIGHT); + designer.repaint(); + } + } + + private int getParentPositionX(XCreator comp, int x){ + return comp.getParent() == null ? + x : getParentPositionX((XCreator)comp.getParent(), comp.getParent().getX() + x); + } + + private int getParentPositionY(XCreator comp, int y) { + return comp.getParent() == null ? + y : getParentPositionY((XCreator) comp.getParent(), comp.getParent().getY() + y); + } + + /** * 拖拽 * @param e 鼠标事件 */ @@ -342,6 +417,25 @@ public class EditingMouseListener extends MouseInputAdapter { designer.repaint(); } + private XCreator processTopLayoutMouseClick(XCreator creator){ + XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer(creator).getTopLayout(); + if(topLayout != null){ + if (clickTopLayout != null && clickTopLayout != topLayout){ + clickTopLayout.setEditable(false); + } + clickTopLayout = topLayout; + if(!topLayout.isEditable()) { + creator = topLayout; + } + } + else{ + if(clickTopLayout != null){ + clickTopLayout.setEditable(false); + } + } + + return creator; + } /** * 点击 * @param e 鼠标事件 @@ -351,6 +445,9 @@ public class EditingMouseListener extends MouseInputAdapter { return; } XCreator creator = designer.getComponentAt(e); + + creator = processTopLayoutMouseClick(creator); + if(creator != null){ creator.respondClick(this, e); } @@ -368,10 +465,9 @@ public class EditingMouseListener extends MouseInputAdapter { if (designer.getCursor().getType() != Cursor.DEFAULT_CURSOR) { designer.setCursor(Cursor.getDefaultCursor()); } - if (xElementCase != null){ - xElementCase.displayCoverPane(false); - designer.repaint(); - } + + setCoverPaneNotDisplay(); + cancelPromptWidgetForbidEnter(); } From 2d1e52a9def24550e9fa789a9ea25836b9512ad8 Mon Sep 17 00:00:00 2001 From: xiaohu Date: Thu, 14 Jul 2016 15:56:55 +0800 Subject: [PATCH 10/46] =?UTF-8?q?=E8=B6=85=E9=93=BE=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ChartHyperPoplinkPane.java | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java b/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java index 308df92b2..676f2567a 100644 --- a/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java +++ b/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java @@ -44,7 +44,22 @@ public class ChartHyperPoplinkPane extends BasicBeanPane { hyperEditPane = new ChartHyperEditPane(getChartParaType(), getValueEditorPane(), getValueEditorPane()); this.add(hyperEditPane, BorderLayout.CENTER); - ChartCollection cc = new ChartCollection(); + ChartCollection cc = createChartCollection(); + + chartComponent = new ChartComponent(); + chartComponent.setPreferredSize(new Dimension(220, 170));// �ڵ�Ԫ�񵯳�ʱ ��Ҫ������֤���Ա�Ĵ�С. + chartComponent.setSupportEdit(false); + chartComponent.populate(cc); + + this.add(chartComponent, BorderLayout.EAST); + + hyperEditPane.populate(cc); + + hyperEditPane.useChartComponent(chartComponent); + } + + private ChartCollection createChartCollection() { + ChartCollection cc = new ChartCollection(); Chart chart = ChartTypeManager.getFirstChart(); if (chart != null){ @@ -68,9 +83,11 @@ public class ChartHyperPoplinkPane extends BasicBeanPane { hyperEditPane.populate(cc); hyperEditPane.useChartComponent(chartComponent); - } - - protected int getChartParaType() { + + return cc; + } + + protected int getChartParaType() { return ParameterTableModel.CHART_NORMAL_USE; } @@ -99,8 +116,7 @@ public class ChartHyperPoplinkPane extends BasicBeanPane { BaseChartCollection cc = chartHyperlink.getChartCollection(); if (cc == null || cc.getChartCount() < 1) { - cc = new ChartCollection(); - cc.addChart(new Chart(ChartFactory.createBar2DPlot())); + cc = createChartCollection(); chartHyperlink.setChartCollection(cc); } From 6b64af1c3bbd8ab7e69bf9196a1a9a3f4ba92db5 Mon Sep 17 00:00:00 2001 From: xiaohu Date: Thu, 14 Jul 2016 16:20:40 +0800 Subject: [PATCH 11/46] update --- .../impl/ChartHyperPoplinkPane.java | 32 ++++++------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java b/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java index 676f2567a..252e0b751 100644 --- a/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java +++ b/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java @@ -23,7 +23,7 @@ import com.fr.general.Inter; import java.awt.*; /** - * 类说明: 图表超链 -- 弹出 悬浮窗. + * 类说明: 图表超链 -- 弹出 悬浮窗. * @author kunsnat E-mail:kunsnat@gmail.com * @version 创建时间:2011-12-28 上午10:41:39 */ @@ -32,7 +32,7 @@ public class ChartHyperPoplinkPane extends BasicBeanPane { private UITextField itemNameTextField; private ChartHyperEditPane hyperEditPane; private ChartComponent chartComponent; - + public ChartHyperPoplinkPane() { this.setLayout(FRGUIPaneFactory.createM_BorderLayout()); @@ -43,18 +43,18 @@ public class ChartHyperPoplinkPane extends BasicBeanPane { hyperEditPane = new ChartHyperEditPane(getChartParaType(), getValueEditorPane(), getValueEditorPane()); this.add(hyperEditPane, BorderLayout.CENTER); - - ChartCollection cc = createChartCollection(); + + ChartCollection cc = createChartCollection(); chartComponent = new ChartComponent(); - chartComponent.setPreferredSize(new Dimension(220, 170));// �ڵ�Ԫ�񵯳�ʱ ��Ҫ������֤���Ա�Ĵ�С. + chartComponent.setPreferredSize(new Dimension(220, 170));// 在单元格弹出时 需要调整保证属性表的大小. chartComponent.setSupportEdit(false); chartComponent.populate(cc); - + this.add(chartComponent, BorderLayout.EAST); - + hyperEditPane.populate(cc); - + hyperEditPane.useChartComponent(chartComponent); } @@ -72,22 +72,10 @@ public class ChartHyperPoplinkPane extends BasicBeanPane { }else { cc.addChart(new Chart(new Bar2DPlot())); } - - chartComponent = new ChartComponent(); - chartComponent.setPreferredSize(new Dimension(220, 170));// 在单元格弹出时 需要调整保证属性表的大小. - chartComponent.setSupportEdit(false); - chartComponent.populate(cc); - - this.add(chartComponent, BorderLayout.EAST); - - hyperEditPane.populate(cc); - - hyperEditPane.useChartComponent(chartComponent); - return cc; } - protected int getChartParaType() { + protected int getChartParaType() { return ParameterTableModel.CHART_NORMAL_USE; } @@ -102,7 +90,7 @@ public class ChartHyperPoplinkPane extends BasicBeanPane { protected boolean needRenamePane(){ return true; } - + @Override protected String title4PopupWindow() { return Inter.getLocText("FR-Chart-Pop_Chart"); From 69483fcc2fa04533f22bf12667c6c63e2ee64a67 Mon Sep 17 00:00:00 2001 From: xiaohu Date: Thu, 14 Jul 2016 16:27:09 +0800 Subject: [PATCH 12/46] update --- .../impl/ChartHyperPoplinkPane.java | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java b/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java index 308df92b2..614cbd350 100644 --- a/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java +++ b/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java @@ -43,8 +43,22 @@ public class ChartHyperPoplinkPane extends BasicBeanPane { hyperEditPane = new ChartHyperEditPane(getChartParaType(), getValueEditorPane(), getValueEditorPane()); this.add(hyperEditPane, BorderLayout.CENTER); + ChartCollection cc = createChartCollection(); - ChartCollection cc = new ChartCollection(); + chartComponent = new ChartComponent(); + chartComponent.setPreferredSize(new Dimension(220, 170));// 在单元格弹出时 需要调整保证属性表的大小. + chartComponent.setSupportEdit(false); + chartComponent.populate(cc); + + this.add(chartComponent, BorderLayout.EAST); + + hyperEditPane.populate(cc); + + hyperEditPane.useChartComponent(chartComponent); + } + + private ChartCollection createChartCollection() { + ChartCollection cc = new ChartCollection(); Chart chart = ChartTypeManager.getFirstChart(); if (chart != null){ @@ -57,20 +71,10 @@ public class ChartHyperPoplinkPane extends BasicBeanPane { }else { cc.addChart(new Chart(new Bar2DPlot())); } - - chartComponent = new ChartComponent(); - chartComponent.setPreferredSize(new Dimension(220, 170));// 在单元格弹出时 需要调整保证属性表的大小. - chartComponent.setSupportEdit(false); - chartComponent.populate(cc); - - this.add(chartComponent, BorderLayout.EAST); - - hyperEditPane.populate(cc); - - hyperEditPane.useChartComponent(chartComponent); - } - - protected int getChartParaType() { + return cc; + } + + protected int getChartParaType() { return ParameterTableModel.CHART_NORMAL_USE; } @@ -99,8 +103,7 @@ public class ChartHyperPoplinkPane extends BasicBeanPane { BaseChartCollection cc = chartHyperlink.getChartCollection(); if (cc == null || cc.getChartCount() < 1) { - cc = new ChartCollection(); - cc.addChart(new Chart(ChartFactory.createBar2DPlot())); + cc = createChartCollection(); chartHyperlink.setChartCollection(cc); } From 2c7bd711c77ee96db0b2bde352c8d021027c054e Mon Sep 17 00:00:00 2001 From: kerry Date: Thu, 14 Jul 2016 17:11:35 +0800 Subject: [PATCH 13/46] new file: FillBugSpinner.java --- .../design/gui/ispinner/FillBugSpinner.java | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 designer_base/src/com/fr/design/gui/ispinner/FillBugSpinner.java diff --git a/designer_base/src/com/fr/design/gui/ispinner/FillBugSpinner.java b/designer_base/src/com/fr/design/gui/ispinner/FillBugSpinner.java new file mode 100644 index 000000000..f4a83d046 --- /dev/null +++ b/designer_base/src/com/fr/design/gui/ispinner/FillBugSpinner.java @@ -0,0 +1,123 @@ +package com.fr.design.gui.ispinner; + +import java.text.ParseException; +import java.util.List; + +import javax.swing.JComponent; +import javax.swing.JFormattedTextField; +import javax.swing.JSpinner; +import javax.swing.SpinnerDateModel; +import javax.swing.SpinnerListModel; +import javax.swing.SpinnerModel; +import javax.swing.SpinnerNumberModel; +import javax.swing.text.AttributeSet; +import javax.swing.text.BadLocationException; +import javax.swing.text.DefaultFormatterFactory; +import javax.swing.text.DocumentFilter; + +import com.fr.stable.StableUtils; +//_kerry: 用来修复Spinner输入数字自动填充的bug +public class FillBugSpinner extends UIBasicSpinner { + public FillBugSpinner(SpinnerModel model) { + super(model); + } + + protected JComponent createEditor(SpinnerModel model) { + if (model instanceof SpinnerDateModel) { + return new DateEditor(this); + } else if (model instanceof SpinnerListModel) { + return new FillBugEditor(this); + } else if (model instanceof SpinnerNumberModel) { + return new NumberEditor(this); + } else { + return new DefaultEditor(this); + } + } + + private class FillBugEditor extends DefaultEditor { + public FillBugEditor(JSpinner spinner) { + super(spinner); + if (!(spinner.getModel() instanceof SpinnerListModel)) { + throw new IllegalArgumentException( + "model not a SpinnerListModel"); + } + getTextField().setEditable(true); + getTextField().setFormatterFactory( + new DefaultFormatterFactory(new ListFormatter())); + } + + public SpinnerListModel getModel() { + return (SpinnerListModel) (getSpinner().getModel()); + } + + private class ListFormatter extends + JFormattedTextField.AbstractFormatter { + private DocumentFilter filter; + + public String valueToString(Object value) throws ParseException { + if (value == null) { + return ""; + } + return value.toString(); + } + + public Object stringToValue(String string) + throws ParseException { + //add将行数转换成ABC + return string; + } + + protected DocumentFilter getDocumentFilter() { + if (filter == null) { + filter = new Filter(); + } + return filter; + } + + private class Filter extends DocumentFilter { + public void replace(FilterBypass fb, int offset, + int length, String string, AttributeSet attrs) + throws BadLocationException { + if (string != null + && (offset + length) == fb.getDocument() + .getLength()) { + List list = getModel().getList(); + Object next = null; + for (int counter = 0; counter < list.size(); counter++) { + Object value = list.get(counter); + String str = value.toString(); + + if (str != null + && str.startsWith(fb.getDocument() + .getText(0, offset) + + string)) { + next = value; + break; + } + } + + String value = (next != null) ? next.toString() + : null; + + if (value != null) { + fb.remove(0, offset + length); + fb.insertString(0, value, null); + getFormattedTextField().select( + offset + string.length(), + value.length()); + return; + } + } + super.replace(fb, offset, length, string, attrs); + } + + public void insertString(FilterBypass fb, int offset, + String string, AttributeSet attr) + throws BadLocationException { + replace(fb, offset, 0, string, attr); + } + } + } + } + +} \ No newline at end of file From bd157e87caf7737bb0b1add78b1c40dd461f6cab Mon Sep 17 00:00:00 2001 From: kerry Date: Thu, 14 Jul 2016 17:18:22 +0800 Subject: [PATCH 14/46] modified: ../columnrow/ColumnRowPane.java --- .../src/com/fr/design/gui/columnrow/ColumnRowPane.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/gui/columnrow/ColumnRowPane.java b/designer_base/src/com/fr/design/gui/columnrow/ColumnRowPane.java index c599c5ce8..4df552986 100644 --- a/designer_base/src/com/fr/design/gui/columnrow/ColumnRowPane.java +++ b/designer_base/src/com/fr/design/gui/columnrow/ColumnRowPane.java @@ -22,6 +22,7 @@ import com.fr.design.event.UIObserverListener; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.gui.ispinner.UIBasicSpinner; import com.fr.design.gui.ispinner.UpperCaseSpinner; +import com.fr.design.gui.ispinner.FillBugSpinner; import com.fr.general.ComparatorUtils; import com.fr.stable.ColumnRow; import com.fr.stable.StableUtils; @@ -119,7 +120,7 @@ public class ColumnRowPane extends JPanel implements UIObserver { protected void initRowSpinner() { - rowSpinner = new UIBasicSpinner((new SpinnerListModel(rowarray))) { + rowSpinner = new FillBugSpinner((new SpinnerListModel(rowarray))) { public boolean shouldResponseChangeListener() { return false; } From cf9bc90531395a6b0fc896ec64ad99e0808a51b1 Mon Sep 17 00:00:00 2001 From: kerry Date: Thu, 14 Jul 2016 17:48:56 +0800 Subject: [PATCH 15/46] modified: ../columnrow/ColumnRowPane.java --- .../src/com/fr/design/gui/columnrow/ColumnRowPane.java | 4 ++-- .../ispinner/{FillBugSpinner.java => ColumnRowSpinner.java} | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename designer_base/src/com/fr/design/gui/ispinner/{FillBugSpinner.java => ColumnRowSpinner.java} (97%) diff --git a/designer_base/src/com/fr/design/gui/columnrow/ColumnRowPane.java b/designer_base/src/com/fr/design/gui/columnrow/ColumnRowPane.java index 4df552986..f0622bf85 100644 --- a/designer_base/src/com/fr/design/gui/columnrow/ColumnRowPane.java +++ b/designer_base/src/com/fr/design/gui/columnrow/ColumnRowPane.java @@ -22,7 +22,7 @@ import com.fr.design.event.UIObserverListener; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.gui.ispinner.UIBasicSpinner; import com.fr.design.gui.ispinner.UpperCaseSpinner; -import com.fr.design.gui.ispinner.FillBugSpinner; +import com.fr.design.gui.ispinner.ColumnRowSpinner; import com.fr.general.ComparatorUtils; import com.fr.stable.ColumnRow; import com.fr.stable.StableUtils; @@ -120,7 +120,7 @@ public class ColumnRowPane extends JPanel implements UIObserver { protected void initRowSpinner() { - rowSpinner = new FillBugSpinner((new SpinnerListModel(rowarray))) { + rowSpinner = new ColumnRowSpinner((new SpinnerListModel(rowarray))) { public boolean shouldResponseChangeListener() { return false; } diff --git a/designer_base/src/com/fr/design/gui/ispinner/FillBugSpinner.java b/designer_base/src/com/fr/design/gui/ispinner/ColumnRowSpinner.java similarity index 97% rename from designer_base/src/com/fr/design/gui/ispinner/FillBugSpinner.java rename to designer_base/src/com/fr/design/gui/ispinner/ColumnRowSpinner.java index f4a83d046..adce548df 100644 --- a/designer_base/src/com/fr/design/gui/ispinner/FillBugSpinner.java +++ b/designer_base/src/com/fr/design/gui/ispinner/ColumnRowSpinner.java @@ -17,8 +17,8 @@ import javax.swing.text.DocumentFilter; import com.fr.stable.StableUtils; //_kerry: 用来修复Spinner输入数字自动填充的bug -public class FillBugSpinner extends UIBasicSpinner { - public FillBugSpinner(SpinnerModel model) { +public class ColumnRowSpinner extends UIBasicSpinner { + public ColumnRowSpinner(SpinnerModel model) { super(model); } From eb4f5cfd2226cd88aba8889a8d49546766a3a8d3 Mon Sep 17 00:00:00 2001 From: xiaohu Date: Fri, 15 Jul 2016 09:30:57 +0800 Subject: [PATCH 16/46] =?UTF-8?q?=E5=9C=96=E6=A8=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/beans/BasicBeanPane.java | 1 + .../images/form/toolbar/ChartF-MultiPie.png | Bin 861 -> 0 bytes .../design/images/form/toolbar/ChartF-TreeMap.png | Bin 269 -> 0 bytes .../poly/toolbar/Plugin-ChartF_NewMultiPie.png | Bin 861 -> 0 bytes .../poly/toolbar/Plugin-ChartF_NewTreeMap.png | Bin 269 -> 0 bytes 5 files changed, 1 insertion(+) delete mode 100644 designer_base/src/com/fr/design/images/form/toolbar/ChartF-MultiPie.png delete mode 100644 designer_base/src/com/fr/design/images/form/toolbar/ChartF-TreeMap.png delete mode 100644 designer_base/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewMultiPie.png delete mode 100644 designer_base/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewTreeMap.png diff --git a/designer_base/src/com/fr/design/beans/BasicBeanPane.java b/designer_base/src/com/fr/design/beans/BasicBeanPane.java index ac0ab63d8..6648bf786 100644 --- a/designer_base/src/com/fr/design/beans/BasicBeanPane.java +++ b/designer_base/src/com/fr/design/beans/BasicBeanPane.java @@ -6,6 +6,7 @@ import com.fr.design.dialog.BasicPane; * Update Pane */ public abstract class BasicBeanPane extends BasicPane { + /** * Populate. diff --git a/designer_base/src/com/fr/design/images/form/toolbar/ChartF-MultiPie.png b/designer_base/src/com/fr/design/images/form/toolbar/ChartF-MultiPie.png deleted file mode 100644 index b6bca9a3ebe316d1f83cbcd8357652531cdf02fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 861 zcmV-j1ETziP)vCP|^=Aq{$;pU{n0m+>E3`b|ebZaBoG} z@Ci)a)eJ=Dl7(BgtpN+c5)^!kE3hQ$TpHzOe!B`7(gIHBJrvDIM6fn%bz+p*tCnZ( zY*a*Io!qdA;MmJ6X$^#t3^g$fiHjQ3Dwjk=U{rD)L?g&SDG0Bw8r&|mrjw?SO_+{c zWMdI%$EegXB0QgiY%i*L49aVas zXZ&Ijb(b7^&XN*;bR n-0O_nDgF5CfAqihM}PqUQ)GI6k}nhj00000NkvXXu0mjft-O5f diff --git a/designer_base/src/com/fr/design/images/form/toolbar/ChartF-TreeMap.png b/designer_base/src/com/fr/design/images/form/toolbar/ChartF-TreeMap.png deleted file mode 100644 index 09edd2b77ec413c2eead3db6bcddafc3ecafbc74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|&H|6fVg?3oVGw3ym^DWNC@5Lt z8c`CQpH@+2u$DqB_b`ZBbhKY7Yyk0WJBDTtpeq?X MUHx3vIVCg!01hT#rT_o{ diff --git a/designer_base/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewMultiPie.png b/designer_base/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewMultiPie.png deleted file mode 100644 index b6bca9a3ebe316d1f83cbcd8357652531cdf02fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 861 zcmV-j1ETziP)vCP|^=Aq{$;pU{n0m+>E3`b|ebZaBoG} z@Ci)a)eJ=Dl7(BgtpN+c5)^!kE3hQ$TpHzOe!B`7(gIHBJrvDIM6fn%bz+p*tCnZ( zY*a*Io!qdA;MmJ6X$^#t3^g$fiHjQ3Dwjk=U{rD)L?g&SDG0Bw8r&|mrjw?SO_+{c zWMdI%$EegXB0QgiY%i*L49aVas zXZ&Ijb(b7^&XN*;bR n-0O_nDgF5CfAqihM}PqUQ)GI6k}nhj00000NkvXXu0mjft-O5f diff --git a/designer_base/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewTreeMap.png b/designer_base/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewTreeMap.png deleted file mode 100644 index 09edd2b77ec413c2eead3db6bcddafc3ecafbc74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|&H|6fVg?3oVGw3ym^DWNC@5Lt z8c`CQpH@+2u$DqB_b`ZBbhKY7Yyk0WJBDTtpeq?X MUHx3vIVCg!01hT#rT_o{ From db4e6bfe47cdea73295315bc3ef5657e094aa0ba Mon Sep 17 00:00:00 2001 From: xiaohu Date: Fri, 15 Jul 2016 09:35:14 +0800 Subject: [PATCH 17/46] =?UTF-8?q?=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/beans/BasicBeanPane.java | 1 + .../images/form/toolbar/ChartF-MultiPie.png | Bin 861 -> 0 bytes .../design/images/form/toolbar/ChartF-TreeMap.png | Bin 269 -> 0 bytes .../poly/toolbar/Plugin-ChartF_NewMultiPie.png | Bin 861 -> 0 bytes .../poly/toolbar/Plugin-ChartF_NewTreeMap.png | Bin 269 -> 0 bytes 5 files changed, 1 insertion(+) delete mode 100644 designer_base/src/com/fr/design/images/form/toolbar/ChartF-MultiPie.png delete mode 100644 designer_base/src/com/fr/design/images/form/toolbar/ChartF-TreeMap.png delete mode 100644 designer_base/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewMultiPie.png delete mode 100644 designer_base/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewTreeMap.png diff --git a/designer_base/src/com/fr/design/beans/BasicBeanPane.java b/designer_base/src/com/fr/design/beans/BasicBeanPane.java index ac0ab63d8..73209de08 100644 --- a/designer_base/src/com/fr/design/beans/BasicBeanPane.java +++ b/designer_base/src/com/fr/design/beans/BasicBeanPane.java @@ -7,6 +7,7 @@ import com.fr.design.dialog.BasicPane; */ public abstract class BasicBeanPane extends BasicPane { + /** * Populate. */ diff --git a/designer_base/src/com/fr/design/images/form/toolbar/ChartF-MultiPie.png b/designer_base/src/com/fr/design/images/form/toolbar/ChartF-MultiPie.png deleted file mode 100644 index b6bca9a3ebe316d1f83cbcd8357652531cdf02fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 861 zcmV-j1ETziP)vCP|^=Aq{$;pU{n0m+>E3`b|ebZaBoG} z@Ci)a)eJ=Dl7(BgtpN+c5)^!kE3hQ$TpHzOe!B`7(gIHBJrvDIM6fn%bz+p*tCnZ( zY*a*Io!qdA;MmJ6X$^#t3^g$fiHjQ3Dwjk=U{rD)L?g&SDG0Bw8r&|mrjw?SO_+{c zWMdI%$EegXB0QgiY%i*L49aVas zXZ&Ijb(b7^&XN*;bR n-0O_nDgF5CfAqihM}PqUQ)GI6k}nhj00000NkvXXu0mjft-O5f diff --git a/designer_base/src/com/fr/design/images/form/toolbar/ChartF-TreeMap.png b/designer_base/src/com/fr/design/images/form/toolbar/ChartF-TreeMap.png deleted file mode 100644 index 09edd2b77ec413c2eead3db6bcddafc3ecafbc74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|&H|6fVg?3oVGw3ym^DWNC@5Lt z8c`CQpH@+2u$DqB_b`ZBbhKY7Yyk0WJBDTtpeq?X MUHx3vIVCg!01hT#rT_o{ diff --git a/designer_base/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewMultiPie.png b/designer_base/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewMultiPie.png deleted file mode 100644 index b6bca9a3ebe316d1f83cbcd8357652531cdf02fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 861 zcmV-j1ETziP)vCP|^=Aq{$;pU{n0m+>E3`b|ebZaBoG} z@Ci)a)eJ=Dl7(BgtpN+c5)^!kE3hQ$TpHzOe!B`7(gIHBJrvDIM6fn%bz+p*tCnZ( zY*a*Io!qdA;MmJ6X$^#t3^g$fiHjQ3Dwjk=U{rD)L?g&SDG0Bw8r&|mrjw?SO_+{c zWMdI%$EegXB0QgiY%i*L49aVas zXZ&Ijb(b7^&XN*;bR n-0O_nDgF5CfAqihM}PqUQ)GI6k}nhj00000NkvXXu0mjft-O5f diff --git a/designer_base/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewTreeMap.png b/designer_base/src/com/fr/design/images/poly/toolbar/Plugin-ChartF_NewTreeMap.png deleted file mode 100644 index 09edd2b77ec413c2eead3db6bcddafc3ecafbc74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|&H|6fVg?3oVGw3ym^DWNC@5Lt z8c`CQpH@+2u$DqB_b`ZBbhKY7Yyk0WJBDTtpeq?X MUHx3vIVCg!01hT#rT_o{ From 7163190d0b9cfb154cb7321fc895b56a3dace7c8 Mon Sep 17 00:00:00 2001 From: fr_shine Date: Fri, 15 Jul 2016 13:55:01 +0800 Subject: [PATCH 18/46] bug --- .../mainframe/chart/gui/data/NormalChartDataPane.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/NormalChartDataPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/NormalChartDataPane.java index 55c645181..7c60161f4 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/NormalChartDataPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/NormalChartDataPane.java @@ -102,8 +102,14 @@ public class NormalChartDataPane extends DataContentsPane { public void populate(ChartCollection collection) { reportDataPane.refreshContentPane(collection); tableDataPane.refreshContentPane(collection); - - dataPane.populateBean(collection); + + if(collection != null && collection.getSelectedChart().getFilterDefinition() == null) { + reportDataPane.populateBean(collection); + tableDataPane.populateBean(collection); + } else { + dataPane.populateBean(collection); + } + this.initAllListeners(); this.addAttributeChangeListener(listener); From 5ea797919958a090f2647ab45bb12cc155ebe4d3 Mon Sep 17 00:00:00 2001 From: fr_shine Date: Sat, 16 Jul 2016 23:26:09 +0800 Subject: [PATCH 19/46] bug --- .../mainframe/chart/gui/data/NormalChartDataPane.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/NormalChartDataPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/NormalChartDataPane.java index 55c645181..56ffb3615 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/NormalChartDataPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/NormalChartDataPane.java @@ -102,9 +102,13 @@ public class NormalChartDataPane extends DataContentsPane { public void populate(ChartCollection collection) { reportDataPane.refreshContentPane(collection); tableDataPane.refreshContentPane(collection); - - dataPane.populateBean(collection); - this.initAllListeners(); + + if(collection != null && collection.getSelectedChart().getFilterDefinition() == null) { + reportDataPane.populateBean(collection); + tableDataPane.populateBean(collection); + } else { + dataPane.populateBean(collection); + } this.initAllListeners(); this.addAttributeChangeListener(listener); reportDataPane.checkBoxUse(); From 364cfb1257b460b764edfd4fe2e69f6b2f1e0bb5 Mon Sep 17 00:00:00 2001 From: fr_shine Date: Sat, 16 Jul 2016 23:27:05 +0800 Subject: [PATCH 20/46] bug --- .../design/mainframe/chart/gui/data/NormalChartDataPane.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/NormalChartDataPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/NormalChartDataPane.java index 56ffb3615..bf64e4957 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/NormalChartDataPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/NormalChartDataPane.java @@ -108,7 +108,8 @@ public class NormalChartDataPane extends DataContentsPane { tableDataPane.populateBean(collection); } else { dataPane.populateBean(collection); - } this.initAllListeners(); + } + this.initAllListeners(); this.addAttributeChangeListener(listener); reportDataPane.checkBoxUse(); From 56b0f337f5814c672ba564847b13f0bb5476611e Mon Sep 17 00:00:00 2001 From: richie Date: Wed, 20 Jul 2016 11:02:50 +0800 Subject: [PATCH 21/46] =?UTF-8?q?sonar=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sonar-project.properties | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 sonar-project.properties diff --git a/sonar-project.properties b/sonar-project.properties new file mode 100644 index 000000000..05253b02f --- /dev/null +++ b/sonar-project.properties @@ -0,0 +1,15 @@ +# must be unique in a given SonarQube instance +sonar.projectKey=finereport.design +# this is the name displayed in the SonarQube UI +sonar.projectName=finereport.design +sonar.projectVersion=1.0 +sonar.branch=dev + +# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. +# Since SonarQube 4.2, this property is optional if sonar.modules is set. +# If not set, SonarQube starts looking for source code from the directory containing +# the sonar-project.properties file. +sonar.sources=. + +# Encoding of the source code. Default is default system encoding +#sonar.sourceEncoding=UTF-8 \ No newline at end of file From ee5c5ee1a2a965de26f5bbd0e7ebffcdf274475c Mon Sep 17 00:00:00 2001 From: richie Date: Wed, 20 Jul 2016 11:03:54 +0800 Subject: [PATCH 22/46] =?UTF-8?q?sonar=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sonar-project.properties | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 sonar-project.properties diff --git a/sonar-project.properties b/sonar-project.properties new file mode 100644 index 000000000..f3ad57a2d --- /dev/null +++ b/sonar-project.properties @@ -0,0 +1,15 @@ +# must be unique in a given SonarQube instance +sonar.projectKey=finereport.design +# this is the name displayed in the SonarQube UI +sonar.projectName=finereport.design +sonar.projectVersion=1.0 +sonar.branch=master + +# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. +# Since SonarQube 4.2, this property is optional if sonar.modules is set. +# If not set, SonarQube starts looking for source code from the directory containing +# the sonar-project.properties file. +sonar.sources=. + +# Encoding of the source code. Default is default system encoding +#sonar.sourceEncoding=UTF-8 \ No newline at end of file From 0555774776602906ca7a2034ade35173abd8c50f Mon Sep 17 00:00:00 2001 From: neil Date: Wed, 20 Jul 2016 14:09:47 +0800 Subject: [PATCH 23/46] =?UTF-8?q?=E6=9C=89=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E5=90=8E,=20web=E5=B1=9E=E6=80=A7=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E6=A0=8F=E8=AE=BE=E7=BD=AE=E4=BF=9D=E5=AD=98=E4=B8=8D?= =?UTF-8?q?=E4=B8=8A.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer/src/com/fr/design/webattr/EditToolBar.java | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/designer/src/com/fr/design/webattr/EditToolBar.java b/designer/src/com/fr/design/webattr/EditToolBar.java index c147b1b0f..da5ebe2b0 100644 --- a/designer/src/com/fr/design/webattr/EditToolBar.java +++ b/designer/src/com/fr/design/webattr/EditToolBar.java @@ -63,16 +63,8 @@ public class EditToolBar extends BasicPane { private ListSelectionListener listSelectionListener = new ListSelectionListener() { public void valueChanged(ListSelectionEvent evt) { - if (lastButton != null && lastButton.getWidget() instanceof Button) { - if (!((list.getSelectedValue() instanceof ToolBarButton) - && ((ToolBarButton)(list.getSelectedValue())).getWidget() instanceof CustomToolBarButton)) { - lastButton.setWidget(bp.update()); - } else { - ((Button) lastButton.getWidget()).setShowIcon(bp.icon.isSelected()); - ((Button) lastButton.getWidget()).setShowText(bp.text.isSelected()); - ((Button) lastButton.getWidget()).setText(bp.nameField.getText()); - ((Button) lastButton.getWidget()).setIconName(bp.iconPane.update()); - } + if (lastButton != null) { + lastButton.setWidget(bp.update()); } if (list.getSelectedValue() instanceof ToolBarButton) { lastButton = (ToolBarButton) list.getSelectedValue(); From 3f4465ff1d18f79681f786b3f872376513f3b731 Mon Sep 17 00:00:00 2001 From: zhouping Date: Wed, 20 Jul 2016 15:42:26 +0800 Subject: [PATCH 24/46] =?UTF-8?q?=E8=A1=A8=E5=8D=95=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E6=B5=8B=E8=AF=95bug=E4=BF=AE=E6=94=B9=201.?= =?UTF-8?q?=E4=BB=8Etoolbarbtn=E4=B8=8A=E6=8B=96=E4=B8=8Btab=E5=B8=83?= =?UTF-8?q?=E5=B1=80=E5=90=8E=E5=BD=93=E5=89=8D=E7=9A=84=E9=80=89=E4=B8=AD?= =?UTF-8?q?=E5=AF=B9=E8=B1=A1=E5=B9=B6=E9=9D=9E=E9=A1=B6=E5=B1=82=E5=B8=83?= =?UTF-8?q?=E5=B1=80=202.tab=E5=B8=83=E5=B1=80=E9=A1=B6=E5=B1=82=E5=B8=83?= =?UTF-8?q?=E5=B1=80=E7=9A=84=E5=90=8D=E5=AD=97=E4=BF=AE=E6=94=B9=E4=B8=BA?= =?UTF-8?q?tablayout=203.=E6=94=AF=E6=8C=81tab=E5=B8=83=E5=B1=80=E7=9A=84?= =?UTF-8?q?=E5=B5=8C=E5=A5=97=E5=90=8E=E6=AD=A3=E7=A1=AE=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../creator/cardlayout/XWCardLayout.java | 3 +- .../cardlayout/XWCardMainBorderLayout.java | 9 +++- .../mainframe/EditingMouseListener.java | 50 +++++++++++++++---- .../mainframe/FormCreatorDropTarget.java | 7 ++- 4 files changed, 56 insertions(+), 13 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java index 621f4c5f5..346a5ce3a 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java @@ -219,8 +219,7 @@ public class XWCardLayout extends XLayoutContainer { * */ protected void setWrapperName(XLayoutContainer parentPanel, String widgetName) { - //先随便set一个, 以后还是要隐藏的 - parentPanel.toData().setWidgetName("border_card_" + widgetName); + parentPanel.toData().setWidgetName("tablayout" + widgetName.replaceAll(createDefaultName(),"")); } /** diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java index b9039b1d6..42a45c53c 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java @@ -11,6 +11,7 @@ import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.models.SelectionModel; import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XCreatorUtils; import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.designer.creator.XWBorderLayout; import com.fr.design.icon.IconPathConstants; @@ -263,6 +264,12 @@ public class XWCardMainBorderLayout extends XWBorderLayout{ */ @Override public XLayoutContainer getTopLayout() { - return this; + XLayoutContainer xTopLayout = XCreatorUtils.getParentXLayoutContainer(this).getTopLayout(); + if (xTopLayout != null && !xTopLayout.isEditable()){ + return xTopLayout; + } + else{ + return this; + } } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java index e66b37552..a4ccae7c2 100644 --- a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java +++ b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java @@ -1,9 +1,6 @@ package com.fr.design.mainframe; -import java.awt.Color; -import java.awt.Container; -import java.awt.Cursor; -import java.awt.Rectangle; +import java.awt.*; import java.awt.event.MouseEvent; import javax.swing.*; @@ -326,10 +323,12 @@ public class EditingMouseListener extends MouseInputAdapter { if (designer.getCursor().getType() == Cursor.HAND_CURSOR) { designer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } - if (e.getX() > (parent.getX() + parent.getWidth() / 2 - EDIT_BTN_WIDTH / 2 - GAP) - && e.getX() < (parent.getX() + parent.getWidth() / 2 + EDIT_BTN_WIDTH / 2 + GAP)) { - if (e.getY() > (parent.getY() + parent.getHeight() / 2 - EDIT_BTN_HEIGHT / 2 - GAP) - && e.getY() < (parent.getY() + parent.getHeight() / 2 + EDIT_BTN_HEIGHT / 2 + GAP + designer.getParaHeight())) { + int minX = getParentPositionX(parent, parent.getX()) + parent.getWidth() / 2; + int minY = getParentPositionY(parent, parent.getY()) + parent.getHeight() / 2; + int offsetX = EDIT_BTN_WIDTH / 2 + GAP; + int offsetY = EDIT_BTN_HEIGHT / 2 + GAP; + if (e.getX() > (minX - offsetX) && e.getX() < (minX + offsetX)) { + if (e.getY() > (minY - offsetY) && e.getY() < (minY + offsetY + designer.getParaHeight())) { designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); } } @@ -417,11 +416,43 @@ public class EditingMouseListener extends MouseInputAdapter { designer.repaint(); } + //当前编辑的组件是在布局中,鼠标点击布局外部,需要一次性将布局及其父布局都置为不可编辑 + private void setTopLayoutUnEditable(XLayoutContainer clickedTopLayout, XLayoutContainer clickingTopLayout){ + //双击的前后点击click为相同对象,过滤掉 + if (clickedTopLayout == null || clickedTopLayout == clickingTopLayout){ + return; + } + //位于同一层级的控件,父布局相同,过滤掉 + if (clickingTopLayout != null && clickedTopLayout.getParent() == clickingTopLayout.getParent()){ + return; + } + //前后点击的位于不同层级,要置为不可编辑 + XLayoutContainer xLayoutContainer = (XLayoutContainer)clickedTopLayout.getParent(); + if (xLayoutContainer == clickingTopLayout){ + return; + } + if (xLayoutContainer != null){ + xLayoutContainer.setEditable(false); + setTopLayoutUnEditable((XLayoutContainer) clickedTopLayout.getParent(), clickingTopLayout); + } + } + + private boolean isCreatorInLayout(XCreator creator, XCreator layout){ + if (creator == layout){ + return true; + } + if(layout.getParent() != null){ + return isCreatorInLayout(creator, (XCreator)layout.getParent()); + } + return false; + } + private XCreator processTopLayoutMouseClick(XCreator creator){ XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer(creator).getTopLayout(); if(topLayout != null){ - if (clickTopLayout != null && clickTopLayout != topLayout){ + if (clickTopLayout != null && clickTopLayout != topLayout && !isCreatorInLayout(clickTopLayout, topLayout)){ clickTopLayout.setEditable(false); + setTopLayoutUnEditable(clickTopLayout, topLayout); } clickTopLayout = topLayout; if(!topLayout.isEditable()) { @@ -431,6 +462,7 @@ public class EditingMouseListener extends MouseInputAdapter { else{ if(clickTopLayout != null){ clickTopLayout.setEditable(false); + setTopLayoutUnEditable(clickTopLayout, null); } } diff --git a/designer_form/src/com/fr/design/mainframe/FormCreatorDropTarget.java b/designer_form/src/com/fr/design/mainframe/FormCreatorDropTarget.java index a90ba7fb6..ed4cf4190 100644 --- a/designer_form/src/com/fr/design/mainframe/FormCreatorDropTarget.java +++ b/designer_form/src/com/fr/design/mainframe/FormCreatorDropTarget.java @@ -9,6 +9,7 @@ import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetDragEvent; import java.awt.dnd.DropTargetDropEvent; import java.awt.dnd.DropTargetEvent; +import java.util.ArrayList; import javax.swing.BorderFactory; import javax.swing.JWindow; @@ -85,8 +86,12 @@ public class FormCreatorDropTarget extends DropTarget { if (success) { // 如果添加成功,则触发相应事件 XCreator xCreator = container.acceptType(XWParameterLayout.class) ? designer.getParaComponent() : designer.getRootComponent(); + //SetSelection时要确保选中的是最顶层的布局 + //tab布局添加的时候是初始化了XWCardLayout,实际上最顶层的布局是XWCardMainBorderLayout + XCreator addingXCreator = addingModel.getXCreator(); + Widget widget = (addingXCreator.getTopLayout() != null) ? (addingXCreator.getTopLayout().toData()) : addingXCreator.toData(); designer.getSelectionModel().setSelectedCreators( - FormSelectionUtils.rebuildSelection(xCreator, new Widget[]{addingModel.getXCreator().toData()})); + FormSelectionUtils.rebuildSelection(xCreator, new Widget[]{widget})); designer.getEditListenerTable().fireCreatorModified(addingModel.getXCreator(), DesignerEvent.CREATOR_ADDED); } else { Toolkit.getDefaultToolkit().beep(); From eff1fe04a853f2a5de9af876f52345d7dd996cb9 Mon Sep 17 00:00:00 2001 From: richie Date: Wed, 20 Jul 2016 17:17:36 +0800 Subject: [PATCH 25/46] =?UTF-8?q?=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- start.bat | 1 + 1 file changed, 1 insertion(+) create mode 100644 start.bat diff --git a/start.bat b/start.bat new file mode 100644 index 000000000..7535291df --- /dev/null +++ b/start.bat @@ -0,0 +1 @@ +sonar-scanner \ No newline at end of file From 66d133546cc02b000b5bafb1744ce8c918e294a2 Mon Sep 17 00:00:00 2001 From: richie Date: Wed, 20 Jul 2016 17:18:00 +0800 Subject: [PATCH 26/46] =?UTF-8?q?=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- start.bat | 1 + 1 file changed, 1 insertion(+) create mode 100644 start.bat diff --git a/start.bat b/start.bat new file mode 100644 index 000000000..7535291df --- /dev/null +++ b/start.bat @@ -0,0 +1 @@ +sonar-scanner \ No newline at end of file From a97ae8cc0e487e76cff3cb0760cc1bbf7dbefe9e Mon Sep 17 00:00:00 2001 From: zpc Date: Thu, 21 Jul 2016 17:14:45 +0800 Subject: [PATCH 27/46] =?UTF-8?q?=E5=8E=BB=E6=8E=89qq=E5=B8=AE=E5=8A=A9?= =?UTF-8?q?=EF=BC=8C=E5=B9=B6=E5=9C=A8=E5=85=B3=E4=BA=8E=E8=BD=AF=E4=BB=B6?= =?UTF-8?q?=E4=B8=AD=E6=98=BE=E7=A4=BAqq=E5=8F=B7=E7=A0=81=EF=BC=8C?= =?UTF-8?q?=E5=86=BB=E7=BB=93=E6=97=B6=E7=BB=99=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 去掉qq帮助,并在关于软件中显示qq号码,冻结时给提示 --- .../freeze/RepeatAndFreezeSettingPane.java | 77 ++++++++++++++++++- .../com/fr/design/actions/help/AboutPane.java | 3 + .../mainframe/toolbar/ToolBarMenuDock.java | 2 +- 3 files changed, 77 insertions(+), 5 deletions(-) diff --git a/designer/src/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java b/designer/src/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java index f707e0500..3fa4d349a 100644 --- a/designer/src/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java +++ b/designer/src/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java @@ -1,17 +1,23 @@ package com.fr.design.report.freeze; -import java.awt.BorderLayout; -import java.awt.Color; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; -import javax.swing.BorderFactory; -import javax.swing.JPanel; +import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import com.fr.design.dialog.BasicPane; +import com.fr.design.dialog.UIDialog; +import com.fr.design.extra.PluginManagerPane; +import com.fr.design.extra.PluginShopDialog; +import com.fr.design.extra.PluginWebBridge; import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.ilable.ActionLabel; import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.DesignerContext; import com.fr.general.Inter; import com.fr.page.ReportPageAttrProvider; import com.fr.stable.ColumnRow; @@ -51,6 +57,7 @@ public class RepeatAndFreezeSettingPane extends BasicPane { // 填报冻结 private UICheckBox useWriteFrozenCCheckBox; private UICheckBox useWriteFrozenRCheckBox; + private static final int LABEL_HEIGHT = 45; /** * 重复标题行 @@ -206,7 +213,15 @@ public class RepeatAndFreezeSettingPane extends BasicPane { JPanel repeatPanel = FRGUIPaneFactory.createNColumnGridInnerContainer_S_Pane(1); repeatPanel.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0)); JPanel freezePanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + + //自适应插件 + JPanel infoPane = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("Attention")); + + BoxCenterAligmentPane actionLabel = getURLActionLabel(Inter.getLocText("FR-Designer_Form-Fit-Tip")); + infoPane.add(actionLabel, BorderLayout.SOUTH); + outfreezePanel.add(freezePanel); + this.add(infoPane, BorderLayout.SOUTH); // 重复打印部分 // 重复打印标题的起始行 JPanel labelPanel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); @@ -536,4 +551,58 @@ public class RepeatAndFreezeSettingPane extends BasicPane { return null; } + private BoxCenterAligmentPane getURLActionLabel(final String text) { + ActionLabel actionLabel = new ActionLabel(text); + + actionLabel.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + try { + //Desktop.getDesktop().browse(new URI(url)); + final PluginManagerPane managerPane = new PluginManagerPane(); + UIDialog dlg = new PluginShopDialog(DesignerContext.getDesignerFrame(),managerPane); + PluginWebBridge.getHelper().setDialogHandle(dlg); + dlg.setVisible(true); + RepeatAndFreezeSettingPane.this.getTopLevelAncestor().setVisible(false); + } catch (Exception exp) { + + } + } + }); + + return new BoxCenterAligmentPane(actionLabel); + } + + class BoxCenterAligmentPane extends JPanel { + + private UILabel textLabel; + + public BoxCenterAligmentPane(String text) { + this(new UILabel(text)); + } + + public BoxCenterAligmentPane(UILabel label) { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + + JPanel centerPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + this.add(centerPane, BorderLayout.CENTER); + UILabel label1 = new UILabel(Inter.getLocText("FR-Designer_Form-Frozen-Tip")); + label1.setForeground(new Color(255, 0, 0)); + UILabel label2 = new UILabel(Inter.getLocText("FR-Designer_Form-Forzen-Speed")); + label2.setForeground(new Color(255, 0, 0)); + this.textLabel = label; + centerPane.add(label1); + centerPane.add(textLabel); + centerPane.add(label2); + } + + public void setFont(Font font) { + super.setFont(font); + + if (textLabel != null) { + textLabel.setFont(font); + } + } + } + } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/actions/help/AboutPane.java b/designer_base/src/com/fr/design/actions/help/AboutPane.java index caa319088..680aa9b95 100644 --- a/designer_base/src/com/fr/design/actions/help/AboutPane.java +++ b/designer_base/src/com/fr/design/actions/help/AboutPane.java @@ -11,6 +11,7 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.general.ComparatorUtils; import com.fr.general.GeneralUtils; import com.fr.general.Inter; +import com.fr.general.SiteCenter; import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; import com.fr.stable.bridge.StableFactory; @@ -69,6 +70,8 @@ public class AboutPane extends JPanel { boxCenterAlignmentPane = new BoxCenterAligmentPane(Inter.getLocText("Service_Phone") + ProductConstants.COMPARE_TELEPHONE); contentPane.add(boxCenterAlignmentPane); } + boxCenterAlignmentPane = new BoxCenterAligmentPane("QQ:" + SiteCenter.getInstance().acquireUrlByKind("help.qq")); + contentPane.add(boxCenterAlignmentPane); BoxCenterAligmentPane actionLabel = getURLActionLabel(ProductConstants.WEBSITE_URL); BoxCenterAligmentPane emailLabel = getEmailActionLabel(ProductConstants.SUPPORT_EMAIL); diff --git a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index f0b1eac9f..364a11cee 100644 --- a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -301,7 +301,7 @@ public abstract class ToolBarMenuDock { if (ComparatorUtils.equals(ProductConstants.APP_NAME,FINEREPORT)) { shortCuts.add(new FeedBackAction()); shortCuts.add(SeparatorDef.DEFAULT); - shortCuts.add(new SupportQQAction()); + //shortCuts.add(new SupportQQAction()); shortCuts.add(SeparatorDef.DEFAULT); // shortCuts.add(new ForumAction()); } From 7b6df7ae61d5da9c73b5ed4fb67d8458e3809088 Mon Sep 17 00:00:00 2001 From: zpc Date: Fri, 22 Jul 2016 13:02:09 +0800 Subject: [PATCH 28/46] =?UTF-8?q?=E8=A3=85=E4=BA=86=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E5=90=8E,=20=E5=8F=AF=E4=BB=A5=E8=AE=BE=E7=BD=AE=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E6=88=96=E8=80=85=E4=B8=8D=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 装了插件后, 可以设置显示或者不显示 --- .../fr/design/fun/ShowParameterWindow.java | 20 +++++++++++++ .../AbstractShowParameterWindowProvider.java | 30 +++++++++++++++++++ .../designer/creator/XWParameterLayout.java | 26 ++++++++++++++-- 3 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 designer_base/src/com/fr/design/fun/ShowParameterWindow.java create mode 100644 designer_base/src/com/fr/design/fun/impl/AbstractShowParameterWindowProvider.java diff --git a/designer_base/src/com/fr/design/fun/ShowParameterWindow.java b/designer_base/src/com/fr/design/fun/ShowParameterWindow.java new file mode 100644 index 000000000..6775deaa4 --- /dev/null +++ b/designer_base/src/com/fr/design/fun/ShowParameterWindow.java @@ -0,0 +1,20 @@ +package com.fr.design.fun; + +import com.fr.stable.fun.mark.Immutable; + + +/** + * Created by zpc on 16/7/21. + */ +public interface ShowParameterWindow extends Immutable { + + String MARK_STRING = "ShowParameter"; + + int CURRENT_LEVEL = 1; + + /** + * 生成属性表 + */ + void add(); +} + diff --git a/designer_base/src/com/fr/design/fun/impl/AbstractShowParameterWindowProvider.java b/designer_base/src/com/fr/design/fun/impl/AbstractShowParameterWindowProvider.java new file mode 100644 index 000000000..98d7d92b4 --- /dev/null +++ b/designer_base/src/com/fr/design/fun/impl/AbstractShowParameterWindowProvider.java @@ -0,0 +1,30 @@ +package com.fr.design.fun.impl; + +import com.fr.design.fun.ShowParameterWindow; +import com.fr.stable.fun.mark.API; + + +/** + * Created by zpc on 2016/7/21. + */ +@API(level = ShowParameterWindow.CURRENT_LEVEL) +public abstract class AbstractShowParameterWindowProvider implements ShowParameterWindow { + + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + public int layerIndex() { + return DEFAULT_LAYER_INDEX; + } + + + + /** + * 生成属性表 + */ + @Override + public void add() { + + } +} \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/XWParameterLayout.java b/designer_form/src/com/fr/design/designer/creator/XWParameterLayout.java index 9f92b9786..1b57aa565 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWParameterLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWParameterLayout.java @@ -3,6 +3,7 @@ */ package com.fr.design.designer.creator; +import com.fr.design.ExtraDesignClassManager; import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.adapters.layout.FRParameterLayoutAdapter; import com.fr.design.form.util.XCreatorConstants; @@ -16,6 +17,7 @@ import com.fr.form.ui.container.WFitLayout; import com.fr.form.ui.container.WParameterLayout; import com.fr.general.Background; import com.fr.general.Inter; +import com.fr.design.fun.ShowParameterWindow; import java.awt.*; import java.beans.IntrospectionException; @@ -51,19 +53,39 @@ public class XWParameterLayout extends XWAbsoluteLayout { * @throws java.beans.IntrospectionException */ public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { - return new CRPropertyDescriptor[]{ + ShowParameterWindow processor = ExtraDesignClassManager.getInstance().getSingle(ShowParameterWindow.MARK_STRING); + if (processor == null) { + return new CRPropertyDescriptor[]{ + new CRPropertyDescriptor("widgetName", this.data.getClass()).setI18NName(Inter + .getLocText("FR-Designer_Form-Widget_Name")), + new CRPropertyDescriptor("background", this.data.getClass()).setEditorClass(BackgroundEditor.class) + .setRendererClass(BackgroundRenderer.class).setI18NName(Inter.getLocText("Background")) + .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), + new CRPropertyDescriptor("delayDisplayContent", this.data.getClass()).setEditorClass(BooleanEditor.class) + .setI18NName(Inter.getLocText("FR-Designer_DisplayNothingBeforeQuery")) + .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), + new CRPropertyDescriptor("position", this.data.getClass()).setEditorClass(WidgetDisplayPosition.class) + .setRendererClass(WidgetDisplayPositionRender.class).setI18NName(Inter.getLocText("FR-Designer_WidgetDisplyPosition")) + .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), + }; + } + return new CRPropertyDescriptor[]{ new CRPropertyDescriptor("widgetName", this.data.getClass()).setI18NName(Inter .getLocText("FR-Designer_Form-Widget_Name")), new CRPropertyDescriptor("background", this.data.getClass()).setEditorClass(BackgroundEditor.class) .setRendererClass(BackgroundRenderer.class).setI18NName(Inter.getLocText("Background")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), + new CRPropertyDescriptor("display", this.data.getClass()).setEditorClass(BooleanEditor.class) + .setI18NName(Inter.getLocText("ParameterD-Show_Parameter_Window")) + .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), new CRPropertyDescriptor("delayDisplayContent", this.data.getClass()).setEditorClass(BooleanEditor.class) .setI18NName(Inter.getLocText("FR-Designer_DisplayNothingBeforeQuery")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), new CRPropertyDescriptor("position", this.data.getClass()).setEditorClass(WidgetDisplayPosition.class) - .setRendererClass(WidgetDisplayPositionRender.class).setI18NName(Inter.getLocText("FR-Designer_WidgetDisplyPosition")) + .setRendererClass(WidgetDisplayPositionRender.class).setI18NName(Inter.getLocText("FR-Designer_WidgetDisplyPosition")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), }; + } @Override From fd400ec7b66bfc32ee9fcd8ada615f6f7870076e Mon Sep 17 00:00:00 2001 From: zpc Date: Mon, 25 Jul 2016 14:21:15 +0800 Subject: [PATCH 29/46] =?UTF-8?q?=E8=A3=85=E4=BA=86=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E5=90=8E,=20=E5=8F=AF=E4=BB=A5=E8=AE=BE=E7=BD=AE=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E6=88=96=E8=80=85=E4=B8=8D=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 装了插件后, 可以设置显示或者不显示 --- .../fr/design/fun/ShowParameterWindow.java | 3 +- .../AbstractShowParameterWindowProvider.java | 5 ++-- .../designer/creator/XWParameterLayout.java | 30 +++++++------------ 3 files changed, 15 insertions(+), 23 deletions(-) diff --git a/designer_base/src/com/fr/design/fun/ShowParameterWindow.java b/designer_base/src/com/fr/design/fun/ShowParameterWindow.java index 6775deaa4..c8cacb1f0 100644 --- a/designer_base/src/com/fr/design/fun/ShowParameterWindow.java +++ b/designer_base/src/com/fr/design/fun/ShowParameterWindow.java @@ -1,6 +1,7 @@ package com.fr.design.fun; import com.fr.stable.fun.mark.Immutable; +import java.beans.PropertyDescriptor; /** @@ -15,6 +16,6 @@ public interface ShowParameterWindow extends Immutable { /** * 生成属性表 */ - void add(); + PropertyDescriptor[] add(Class temp); } diff --git a/designer_base/src/com/fr/design/fun/impl/AbstractShowParameterWindowProvider.java b/designer_base/src/com/fr/design/fun/impl/AbstractShowParameterWindowProvider.java index 98d7d92b4..6eec6e54b 100644 --- a/designer_base/src/com/fr/design/fun/impl/AbstractShowParameterWindowProvider.java +++ b/designer_base/src/com/fr/design/fun/impl/AbstractShowParameterWindowProvider.java @@ -2,6 +2,7 @@ package com.fr.design.fun.impl; import com.fr.design.fun.ShowParameterWindow; import com.fr.stable.fun.mark.API; +import java.beans.PropertyDescriptor; /** @@ -24,7 +25,7 @@ public abstract class AbstractShowParameterWindowProvider implements ShowParamet * 生成属性表 */ @Override - public void add() { - + public PropertyDescriptor[] add(Class temp) { + return null; } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/XWParameterLayout.java b/designer_form/src/com/fr/design/designer/creator/XWParameterLayout.java index 1b57aa565..58e9dd455 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWParameterLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWParameterLayout.java @@ -18,9 +18,11 @@ import com.fr.form.ui.container.WParameterLayout; import com.fr.general.Background; import com.fr.general.Inter; import com.fr.design.fun.ShowParameterWindow; +import com.fr.stable.ArrayUtils; import java.awt.*; import java.beans.IntrospectionException; +import java.beans.PropertyDescriptor; /** * 表单参数界面container @@ -53,31 +55,12 @@ public class XWParameterLayout extends XWAbsoluteLayout { * @throws java.beans.IntrospectionException */ public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { - ShowParameterWindow processor = ExtraDesignClassManager.getInstance().getSingle(ShowParameterWindow.MARK_STRING); - if (processor == null) { - return new CRPropertyDescriptor[]{ - new CRPropertyDescriptor("widgetName", this.data.getClass()).setI18NName(Inter - .getLocText("FR-Designer_Form-Widget_Name")), - new CRPropertyDescriptor("background", this.data.getClass()).setEditorClass(BackgroundEditor.class) - .setRendererClass(BackgroundRenderer.class).setI18NName(Inter.getLocText("Background")) - .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), - new CRPropertyDescriptor("delayDisplayContent", this.data.getClass()).setEditorClass(BooleanEditor.class) - .setI18NName(Inter.getLocText("FR-Designer_DisplayNothingBeforeQuery")) - .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), - new CRPropertyDescriptor("position", this.data.getClass()).setEditorClass(WidgetDisplayPosition.class) - .setRendererClass(WidgetDisplayPositionRender.class).setI18NName(Inter.getLocText("FR-Designer_WidgetDisplyPosition")) - .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), - }; - } - return new CRPropertyDescriptor[]{ + CRPropertyDescriptor[] propertyTableEditor = new CRPropertyDescriptor[]{ new CRPropertyDescriptor("widgetName", this.data.getClass()).setI18NName(Inter .getLocText("FR-Designer_Form-Widget_Name")), new CRPropertyDescriptor("background", this.data.getClass()).setEditorClass(BackgroundEditor.class) .setRendererClass(BackgroundRenderer.class).setI18NName(Inter.getLocText("Background")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), - new CRPropertyDescriptor("display", this.data.getClass()).setEditorClass(BooleanEditor.class) - .setI18NName(Inter.getLocText("ParameterD-Show_Parameter_Window")) - .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), new CRPropertyDescriptor("delayDisplayContent", this.data.getClass()).setEditorClass(BooleanEditor.class) .setI18NName(Inter.getLocText("FR-Designer_DisplayNothingBeforeQuery")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), @@ -86,6 +69,13 @@ public class XWParameterLayout extends XWAbsoluteLayout { .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), }; + ShowParameterWindow processor = ExtraDesignClassManager.getInstance().getSingle(ShowParameterWindow.MARK_STRING); + if (processor == null) { + return propertyTableEditor; + } + PropertyDescriptor[] extraEditor = processor.add(this.data.getClass()); + + return (CRPropertyDescriptor[]) ArrayUtils.addAll(propertyTableEditor, extraEditor); } @Override From 373b724b76f5a325f38b2a1d8b0b683c442ff481 Mon Sep 17 00:00:00 2001 From: zpc Date: Mon, 25 Jul 2016 14:48:58 +0800 Subject: [PATCH 30/46] =?UTF-8?q?=E4=BB=96=E8=A3=85=E4=BA=86=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E5=90=8E,=20=E5=8F=AF=E4=BB=A5=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E6=88=96=E8=80=85=E4=B8=8D=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 他装了插件后, 可以设置显示或者不显示 --- ...terWindow.java => ParameterWindowEditorProcessor.java} | 4 ++-- ...r.java => AbstractParameterWindowEditorProcessor.java} | 8 ++++---- .../com/fr/design/designer/creator/XWParameterLayout.java | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) rename designer_base/src/com/fr/design/fun/{ShowParameterWindow.java => ParameterWindowEditorProcessor.java} (66%) rename designer_base/src/com/fr/design/fun/impl/{AbstractShowParameterWindowProvider.java => AbstractParameterWindowEditorProcessor.java} (55%) diff --git a/designer_base/src/com/fr/design/fun/ShowParameterWindow.java b/designer_base/src/com/fr/design/fun/ParameterWindowEditorProcessor.java similarity index 66% rename from designer_base/src/com/fr/design/fun/ShowParameterWindow.java rename to designer_base/src/com/fr/design/fun/ParameterWindowEditorProcessor.java index c8cacb1f0..6d8b6a33f 100644 --- a/designer_base/src/com/fr/design/fun/ShowParameterWindow.java +++ b/designer_base/src/com/fr/design/fun/ParameterWindowEditorProcessor.java @@ -7,7 +7,7 @@ import java.beans.PropertyDescriptor; /** * Created by zpc on 16/7/21. */ -public interface ShowParameterWindow extends Immutable { +public interface ParameterWindowEditorProcessor extends Immutable { String MARK_STRING = "ShowParameter"; @@ -16,6 +16,6 @@ public interface ShowParameterWindow extends Immutable { /** * 生成属性表 */ - PropertyDescriptor[] add(Class temp); + PropertyDescriptor[] createPropertyDescriptor(Class temp); } diff --git a/designer_base/src/com/fr/design/fun/impl/AbstractShowParameterWindowProvider.java b/designer_base/src/com/fr/design/fun/impl/AbstractParameterWindowEditorProcessor.java similarity index 55% rename from designer_base/src/com/fr/design/fun/impl/AbstractShowParameterWindowProvider.java rename to designer_base/src/com/fr/design/fun/impl/AbstractParameterWindowEditorProcessor.java index 6eec6e54b..57375903d 100644 --- a/designer_base/src/com/fr/design/fun/impl/AbstractShowParameterWindowProvider.java +++ b/designer_base/src/com/fr/design/fun/impl/AbstractParameterWindowEditorProcessor.java @@ -1,6 +1,6 @@ package com.fr.design.fun.impl; -import com.fr.design.fun.ShowParameterWindow; +import com.fr.design.fun.ParameterWindowEditorProcessor; import com.fr.stable.fun.mark.API; import java.beans.PropertyDescriptor; @@ -8,8 +8,8 @@ import java.beans.PropertyDescriptor; /** * Created by zpc on 2016/7/21. */ -@API(level = ShowParameterWindow.CURRENT_LEVEL) -public abstract class AbstractShowParameterWindowProvider implements ShowParameterWindow { +@API(level = ParameterWindowEditorProcessor.CURRENT_LEVEL) +public abstract class AbstractParameterWindowEditorProcessor implements ParameterWindowEditorProcessor { public int currentAPILevel() { return CURRENT_LEVEL; @@ -25,7 +25,7 @@ public abstract class AbstractShowParameterWindowProvider implements ShowParamet * 生成属性表 */ @Override - public PropertyDescriptor[] add(Class temp) { + public PropertyDescriptor[] createPropertyDescriptor(Class temp) { return null; } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/XWParameterLayout.java b/designer_form/src/com/fr/design/designer/creator/XWParameterLayout.java index 58e9dd455..6f13b32b7 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWParameterLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWParameterLayout.java @@ -17,7 +17,7 @@ import com.fr.form.ui.container.WFitLayout; import com.fr.form.ui.container.WParameterLayout; import com.fr.general.Background; import com.fr.general.Inter; -import com.fr.design.fun.ShowParameterWindow; +import com.fr.design.fun.ParameterWindowEditorProcessor; import com.fr.stable.ArrayUtils; import java.awt.*; @@ -69,11 +69,11 @@ public class XWParameterLayout extends XWAbsoluteLayout { .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), }; - ShowParameterWindow processor = ExtraDesignClassManager.getInstance().getSingle(ShowParameterWindow.MARK_STRING); + ParameterWindowEditorProcessor processor = ExtraDesignClassManager.getInstance().getSingle(ParameterWindowEditorProcessor.MARK_STRING); if (processor == null) { return propertyTableEditor; } - PropertyDescriptor[] extraEditor = processor.add(this.data.getClass()); + PropertyDescriptor[] extraEditor = processor.createPropertyDescriptor(this.data.getClass()); return (CRPropertyDescriptor[]) ArrayUtils.addAll(propertyTableEditor, extraEditor); } From e3be3575eeb68ed6d92f16b788ba83655f1fb19d Mon Sep 17 00:00:00 2001 From: zpc Date: Mon, 25 Jul 2016 15:33:31 +0800 Subject: [PATCH 31/46] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E8=A7=84=E8=8C=83=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修改一些规范问题 --- .../fr/design/report/freeze/RepeatAndFreezeSettingPane.java | 5 ++++- .../com/fr/design/fun/ParameterWindowEditorProcessor.java | 2 +- .../fun/impl/AbstractParameterWindowEditorProcessor.java | 2 +- .../src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java | 1 - 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/designer/src/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java b/designer/src/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java index 3fa4d349a..7cf176302 100644 --- a/designer/src/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java +++ b/designer/src/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java @@ -28,6 +28,10 @@ import com.fr.stable.bridge.StableFactory; * Sets Report Page Attributes */ public class RepeatAndFreezeSettingPane extends BasicPane { + + //边框高度 + private static final int LABEL_HEIGHT = 45; + // 重复标题行 private RepeatRowPane repeatTitleRowPane; // 重复标题列 @@ -57,7 +61,6 @@ public class RepeatAndFreezeSettingPane extends BasicPane { // 填报冻结 private UICheckBox useWriteFrozenCCheckBox; private UICheckBox useWriteFrozenRCheckBox; - private static final int LABEL_HEIGHT = 45; /** * 重复标题行 diff --git a/designer_base/src/com/fr/design/fun/ParameterWindowEditorProcessor.java b/designer_base/src/com/fr/design/fun/ParameterWindowEditorProcessor.java index 6d8b6a33f..869556065 100644 --- a/designer_base/src/com/fr/design/fun/ParameterWindowEditorProcessor.java +++ b/designer_base/src/com/fr/design/fun/ParameterWindowEditorProcessor.java @@ -9,7 +9,7 @@ import java.beans.PropertyDescriptor; */ public interface ParameterWindowEditorProcessor extends Immutable { - String MARK_STRING = "ShowParameter"; + String MARK_STRING = "ParameterWindowEditorProcessor"; int CURRENT_LEVEL = 1; diff --git a/designer_base/src/com/fr/design/fun/impl/AbstractParameterWindowEditorProcessor.java b/designer_base/src/com/fr/design/fun/impl/AbstractParameterWindowEditorProcessor.java index 57375903d..fcdd432b2 100644 --- a/designer_base/src/com/fr/design/fun/impl/AbstractParameterWindowEditorProcessor.java +++ b/designer_base/src/com/fr/design/fun/impl/AbstractParameterWindowEditorProcessor.java @@ -26,6 +26,6 @@ public abstract class AbstractParameterWindowEditorProcessor implements Paramete */ @Override public PropertyDescriptor[] createPropertyDescriptor(Class temp) { - return null; + return new PropertyDescriptor[0]; } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index 364a11cee..d0177d404 100644 --- a/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -301,7 +301,6 @@ public abstract class ToolBarMenuDock { if (ComparatorUtils.equals(ProductConstants.APP_NAME,FINEREPORT)) { shortCuts.add(new FeedBackAction()); shortCuts.add(SeparatorDef.DEFAULT); - //shortCuts.add(new SupportQQAction()); shortCuts.add(SeparatorDef.DEFAULT); // shortCuts.add(new ForumAction()); } From 181473e663020e1bb4ac35a507a0665cfac749d4 Mon Sep 17 00:00:00 2001 From: zpc Date: Mon, 25 Jul 2016 17:48:01 +0800 Subject: [PATCH 32/46] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 代码规范 --- .../fr/design/report/freeze/RepeatAndFreezeSettingPane.java | 2 +- .../fr/design/designer/creator/CRPropertyDescriptor.java | 4 ++-- .../com/fr/design/fun/ParameterWindowEditorProcessor.java | 5 ++--- .../fun/impl/AbstractParameterWindowEditorProcessor.java | 6 +++--- .../com/fr/design/designer/creator/XWParameterLayout.java | 4 ++-- 5 files changed, 10 insertions(+), 11 deletions(-) rename {designer_form => designer_base}/src/com/fr/design/designer/creator/CRPropertyDescriptor.java (92%) diff --git a/designer/src/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java b/designer/src/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java index 7cf176302..fd24573fe 100644 --- a/designer/src/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java +++ b/designer/src/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java @@ -218,7 +218,7 @@ public class RepeatAndFreezeSettingPane extends BasicPane { JPanel freezePanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); //自适应插件 - JPanel infoPane = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("Attention")); + JPanel infoPane = FRGUIPaneFactory.createTitledBorderPane(Inter.getLocText("FR-Designer_Attention")); BoxCenterAligmentPane actionLabel = getURLActionLabel(Inter.getLocText("FR-Designer_Form-Fit-Tip")); infoPane.add(actionLabel, BorderLayout.SOUTH); diff --git a/designer_form/src/com/fr/design/designer/creator/CRPropertyDescriptor.java b/designer_base/src/com/fr/design/designer/creator/CRPropertyDescriptor.java similarity index 92% rename from designer_form/src/com/fr/design/designer/creator/CRPropertyDescriptor.java rename to designer_base/src/com/fr/design/designer/creator/CRPropertyDescriptor.java index c56e150c0..315565324 100644 --- a/designer_form/src/com/fr/design/designer/creator/CRPropertyDescriptor.java +++ b/designer_base/src/com/fr/design/designer/creator/CRPropertyDescriptor.java @@ -3,7 +3,6 @@ */ package com.fr.design.designer.creator; -import com.fr.design.gui.xtable.AbstractPropertyGroupModel; import com.fr.stable.StringUtils; import com.fr.stable.core.PropertyChangeAdapter; @@ -15,6 +14,7 @@ import java.beans.PropertyDescriptor; * @since 6.5.3 */ public final class CRPropertyDescriptor extends PropertyDescriptor { + public static final String RENDERER = "renderer"; private PropertyChangeAdapter l; @@ -51,7 +51,7 @@ public final class CRPropertyDescriptor extends PropertyDescriptor { } public CRPropertyDescriptor setRendererClass(Class clazz) { - this.putKeyValue(AbstractPropertyGroupModel.RENDERER, clazz); + this.putKeyValue(RENDERER, clazz); return this; } diff --git a/designer_base/src/com/fr/design/fun/ParameterWindowEditorProcessor.java b/designer_base/src/com/fr/design/fun/ParameterWindowEditorProcessor.java index 869556065..d1eb60a88 100644 --- a/designer_base/src/com/fr/design/fun/ParameterWindowEditorProcessor.java +++ b/designer_base/src/com/fr/design/fun/ParameterWindowEditorProcessor.java @@ -1,8 +1,7 @@ package com.fr.design.fun; +import com.fr.design.designer.creator.CRPropertyDescriptor; import com.fr.stable.fun.mark.Immutable; -import java.beans.PropertyDescriptor; - /** * Created by zpc on 16/7/21. @@ -16,6 +15,6 @@ public interface ParameterWindowEditorProcessor extends Immutable { /** * 生成属性表 */ - PropertyDescriptor[] createPropertyDescriptor(Class temp); + CRPropertyDescriptor[] createPropertyDescriptor(Class temp); } diff --git a/designer_base/src/com/fr/design/fun/impl/AbstractParameterWindowEditorProcessor.java b/designer_base/src/com/fr/design/fun/impl/AbstractParameterWindowEditorProcessor.java index fcdd432b2..0d449090f 100644 --- a/designer_base/src/com/fr/design/fun/impl/AbstractParameterWindowEditorProcessor.java +++ b/designer_base/src/com/fr/design/fun/impl/AbstractParameterWindowEditorProcessor.java @@ -1,8 +1,8 @@ package com.fr.design.fun.impl; +import com.fr.design.designer.creator.CRPropertyDescriptor; import com.fr.design.fun.ParameterWindowEditorProcessor; import com.fr.stable.fun.mark.API; -import java.beans.PropertyDescriptor; /** @@ -25,7 +25,7 @@ public abstract class AbstractParameterWindowEditorProcessor implements Paramete * 生成属性表 */ @Override - public PropertyDescriptor[] createPropertyDescriptor(Class temp) { - return new PropertyDescriptor[0]; + public CRPropertyDescriptor[] createPropertyDescriptor(Class temp) { + return new CRPropertyDescriptor[0]; } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/XWParameterLayout.java b/designer_form/src/com/fr/design/designer/creator/XWParameterLayout.java index 6f13b32b7..9e5520716 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWParameterLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWParameterLayout.java @@ -73,9 +73,9 @@ public class XWParameterLayout extends XWAbsoluteLayout { if (processor == null) { return propertyTableEditor; } - PropertyDescriptor[] extraEditor = processor.createPropertyDescriptor(this.data.getClass()); + CRPropertyDescriptor[] extraEditor = processor.createPropertyDescriptor(this.data.getClass()); - return (CRPropertyDescriptor[]) ArrayUtils.addAll(propertyTableEditor, extraEditor); + return ArrayUtils.addAll(propertyTableEditor, extraEditor); } @Override From 3b59e40059f17061ad59073449c4f03ba79c6afb Mon Sep 17 00:00:00 2001 From: fr_shine Date: Thu, 28 Jul 2016 11:21:00 +0800 Subject: [PATCH 33/46] read plugin --- .../com/fr/design/ChartTypeInterfaceManager.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java b/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java index 500ece8b4..d6facd731 100644 --- a/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java +++ b/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java @@ -58,13 +58,12 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh if (classManager == null) { classManager = new ChartTypeInterfaceManager(); chartTypeInterfaces.clear(); - classManager.readXMLFile(); } return classManager; } static { - GeneralContext.addEnvChangedListener(new EnvChangedListener() { + GeneralContext.addSwitchEnvListener(new EnvChangedListener() { public void envChanged() { ChartTypeInterfaceManager.envChanged(); } @@ -85,6 +84,8 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh } public static WidgetOption[] initWidgetOption(){ + checkDefault(); + ChartInternationalNameContentBean[] typeName = ChartTypeManager.getInstance().getAllChartBaseNames(); ChartWidgetOption[] child = new ChartWidgetOption[typeName.length]; for (int i = 0; i < typeName.length; i++) { @@ -132,6 +133,11 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh } } + private static void checkDefault() { + if(chartTypeInterfaces.size() == 0){ + readDefault(); + } + } /** * 增加界面接口定义 * @@ -141,7 +147,7 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh public void addChartInterface(String className, String plotID, PluginSimplify simplify) { if (StringUtils.isNotBlank(className)) { try { - Class clazz = loader.loadClass(className); + Class clazz = Class.forName(className); Authorize authorize = clazz.getAnnotation(Authorize.class); if (authorize != null) { PluginLicenseManager.getInstance().registerPaid(authorize, simplify); @@ -171,6 +177,7 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh * @param paneList pane容器 */ public void addPlotTypePaneList(List> paneList) { + checkDefault(); Iterator iterator = chartTypeInterfaces.entrySet().iterator(); while (iterator.hasNext()) { From ecfdfacebe598468cf68f6fe038c78954e984272 Mon Sep 17 00:00:00 2001 From: neil Date: Thu, 28 Jul 2016 13:53:56 +0800 Subject: [PATCH 34/46] =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E4=BF=9D=E5=AD=98=E6=96=87=E5=AD=97=E7=AB=96=E6=8E=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/gui/style/AlignmentPane.java | 6 ++---- designer_base/src/com/fr/design/style/AlignmentPane.java | 8 -------- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/designer_base/src/com/fr/design/gui/style/AlignmentPane.java b/designer_base/src/com/fr/design/gui/style/AlignmentPane.java index fba645468..aff23e952 100644 --- a/designer_base/src/com/fr/design/gui/style/AlignmentPane.java +++ b/designer_base/src/com/fr/design/gui/style/AlignmentPane.java @@ -136,9 +136,7 @@ public class AlignmentPane extends AbstractBasicStylePane implements GlobalNameO ArrayList selectOption = new ArrayList(); selectOption.add(Inter.getLocText("FR-Designer_Custom-Angle")); VerticalTextProcessor processor = ExtraClassManager.getInstance().getSingle(VerticalTextProcessor.XML_TAG, DefaultVerticalTextProcessor.class); - if (processor != null){ - selectOption.addAll(Arrays.asList(processor.getComboxOption())); - } + selectOption.addAll(Arrays.asList(processor.getComboxOption())); textRotationComboBox = new UIComboBox(selectOption.toArray(new String[selectOption.size()])); } @@ -242,7 +240,7 @@ public class AlignmentPane extends AbstractBasicStylePane implements GlobalNameO } else { this.textComboBox.setSelectedIndex(0); } - if (style.getVerticalText() == Style.VERTICALTEXT && ExtraClassManager.getInstance().getSingle(VerticalTextProcessor.XML_TAG) != null) { + if (style.getVerticalText() == Style.VERTICALTEXT) { textRotationComboBox.setSelectedIndex(style.getTextDirection() == Style.LEFT_TO_RIGHT ? 1 : 2); } else { textRotationComboBox.setSelectedIndex(0); diff --git a/designer_base/src/com/fr/design/style/AlignmentPane.java b/designer_base/src/com/fr/design/style/AlignmentPane.java index d95d4bcea..0cae29707 100644 --- a/designer_base/src/com/fr/design/style/AlignmentPane.java +++ b/designer_base/src/com/fr/design/style/AlignmentPane.java @@ -16,8 +16,6 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; -import com.fr.plugin.ExtraClassManager; -import com.fr.report.fun.VerticalTextProcessor; import com.fr.stable.CoreConstants; import javax.swing.*; @@ -126,9 +124,6 @@ public class AlignmentPane extends BasicPane { directionBG.add(rightToLeftRB); rightToLeftRB.setSelected(true); - if (ExtraClassManager.getInstance().getSingle(VerticalTextProcessor.XML_TAG) == null){ - return; - } isVerticalTextPanel.add(isVerticalTextCheckBox); isVerticalTextPanel.add(leftToRightRB); isVerticalTextPanel.add(rightToLeftRB); @@ -302,9 +297,6 @@ public class AlignmentPane extends BasicPane { } private void populateVertical(Style style){ - if (ExtraClassManager.getInstance().getSingle(VerticalTextProcessor.XML_TAG) == null){ - return; - } this.isVerticalTextCheckBox.setSelected(true); this.rotationSpinner.setEnabled(false); if (style.getTextDirection() == Style.LEFT_TO_RIGHT) { From d57ab06309f99175a6cdd0589b7d1980e3b953ce Mon Sep 17 00:00:00 2001 From: fr_shine Date: Thu, 28 Jul 2016 14:15:18 +0800 Subject: [PATCH 35/46] =?UTF-8?q?=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/ChartTypeInterfaceManager.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java b/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java index d6facd731..08875b22f 100644 --- a/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java +++ b/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java @@ -84,7 +84,6 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh } public static WidgetOption[] initWidgetOption(){ - checkDefault(); ChartInternationalNameContentBean[] typeName = ChartTypeManager.getInstance().getAllChartBaseNames(); ChartWidgetOption[] child = new ChartWidgetOption[typeName.length]; @@ -133,11 +132,6 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh } } - private static void checkDefault() { - if(chartTypeInterfaces.size() == 0){ - readDefault(); - } - } /** * 增加界面接口定义 * @@ -177,7 +171,6 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh * @param paneList pane容器 */ public void addPlotTypePaneList(List> paneList) { - checkDefault(); Iterator iterator = chartTypeInterfaces.entrySet().iterator(); while (iterator.hasNext()) { From 272fa2236e105e72be45dabecf5ea7fe10444bf3 Mon Sep 17 00:00:00 2001 From: eason-skx Date: Thu, 28 Jul 2016 15:11:59 +0800 Subject: [PATCH 36/46] =?UTF-8?q?exe=E5=90=AF=E5=8A=A8=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E8=A2=AB=E7=A6=81=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/ChartTypeInterfaceManager.java | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java b/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java index 500ece8b4..dd272644a 100644 --- a/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java +++ b/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java @@ -5,6 +5,7 @@ import com.fr.chart.base.ChartInternationalNameContentBean; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; import com.fr.chart.charttypes.ChartTypeManager; +import com.fr.chart.fun.IndependentChartProvider; import com.fr.design.beans.BasicBeanPane; import com.fr.design.beans.FurtherBasicBeanPane; import com.fr.design.chart.fun.IndependentChartUIProvider; @@ -58,7 +59,6 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh if (classManager == null) { classManager = new ChartTypeInterfaceManager(); chartTypeInterfaces.clear(); - classManager.readXMLFile(); } return classManager; } @@ -75,11 +75,9 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh GeneralContext.addPluginReadListener(new PluginReadListener() { @Override public void success() { - if (chartTypeInterfaces != null) { - readDefault(); - //重新注册designModuleFactory - DesignModuleFactory.registerExtraWidgetOptions(initWidgetOption()); - } + ChartTypeInterfaceManager.getInstance().readDefault(); + //重新注册designModuleFactory + DesignModuleFactory.registerExtraWidgetOptions(initWidgetOption()); } }); } @@ -101,7 +99,7 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh } private synchronized static void envChanged() { - chartTypeInterfaces.clear(); + classManager = null; } private static void readDefault() { @@ -132,6 +130,12 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh } } + public static void addChartTypeInterface(IndependentChartUIProvider provider, String plotID) { + if (chartTypeInterfaces != null && !chartTypeInterfaces.containsKey(plotID)) { + chartTypeInterfaces.put(plotID, provider); + } + } + /** * 增加界面接口定义 * @@ -141,7 +145,7 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh public void addChartInterface(String className, String plotID, PluginSimplify simplify) { if (StringUtils.isNotBlank(className)) { try { - Class clazz = loader.loadClass(className); + Class clazz = Class.forName(className); Authorize authorize = clazz.getAnnotation(Authorize.class); if (authorize != null) { PluginLicenseManager.getInstance().registerPaid(authorize, simplify); @@ -149,8 +153,8 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh IndependentChartUIProvider provider = (IndependentChartUIProvider) clazz.newInstance(); if (PluginCollector.getCollector().isError(provider, IndependentChartUIProvider.CURRENT_API_LEVEL, simplify.getPluginName()) || !containsChart(plotID)) { PluginMessage.remindUpdate(className); - } else if (!chartTypeInterfaces.containsKey(plotID)) { - chartTypeInterfaces.put(plotID, provider); + } else { + ChartTypeInterfaceManager.getInstance().addChartTypeInterface(provider, plotID); } } catch (ClassNotFoundException e) { FRLogger.getLogger().error("class not found:" + e.getMessage()); From f85be59351daeb78e9781df5bdba2e70214c5b7e Mon Sep 17 00:00:00 2001 From: eason-skx Date: Thu, 28 Jul 2016 15:21:11 +0800 Subject: [PATCH 37/46] =?UTF-8?q?=E7=A9=BAimport?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java | 1 - 1 file changed, 1 deletion(-) diff --git a/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java b/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java index dd272644a..64a4d1808 100644 --- a/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java +++ b/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java @@ -5,7 +5,6 @@ import com.fr.chart.base.ChartInternationalNameContentBean; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; import com.fr.chart.charttypes.ChartTypeManager; -import com.fr.chart.fun.IndependentChartProvider; import com.fr.design.beans.BasicBeanPane; import com.fr.design.beans.FurtherBasicBeanPane; import com.fr.design.chart.fun.IndependentChartUIProvider; From a65ce61dd5e4e90829b0fdb283d42466ace21ba6 Mon Sep 17 00:00:00 2001 From: eason-skx Date: Thu, 28 Jul 2016 15:41:01 +0800 Subject: [PATCH 38/46] =?UTF-8?q?=E6=96=B9=E6=B3=95=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java b/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java index 86eab5e9c..3144ca1d9 100644 --- a/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java +++ b/designer_chart/src/com/fr/design/ChartTypeInterfaceManager.java @@ -63,7 +63,7 @@ public class ChartTypeInterfaceManager extends XMLFileManager implements ExtraCh } static { - GeneralContext.addSwitchEnvListener(new EnvChangedListener() { + GeneralContext.addEnvChangedListener(new EnvChangedListener() { public void envChanged() { ChartTypeInterfaceManager.envChanged(); } From 9d7085cd0fc07094d492300c3b27300c6f801156 Mon Sep 17 00:00:00 2001 From: zhouping Date: Thu, 28 Jul 2016 20:36:41 +0800 Subject: [PATCH 39/46] =?UTF-8?q?=E8=A1=A8=E5=8D=95=E7=BB=9D=E5=AF=B9?= =?UTF-8?q?=E5=B8=83=E5=B1=80=E7=9A=84=E5=9F=BA=E6=9C=AC=E5=8A=9F=E8=83=BD?= =?UTF-8?q?1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hanlder/BottomCornerMouseHanlder.java | 42 +++- .../design/beans/location/Absorptionline.java | 165 ++++++++++++- .../fr/design/beans/location/MoveUtils.java | 227 +++++++++++++++++- .../beans/location/WidgetForbidWindow.java | 48 ++++ .../layout/FRAbsoluteLayoutAdapter.java | 35 ++- .../adapters/layout/FRFitLayoutAdapter.java | 3 - .../beans/location/AccessDirection.java | 60 +++-- .../design/designer/beans/location/Inner.java | 76 +++++- .../designer/beans/models/StateModel.java | 13 + .../painters/FRAbsoluteLayoutPainter.java | 26 ++ .../designer/creator/XWAbsoluteLayout.java | 90 ++++++- .../design/designer/creator/XWFitLayout.java | 2 +- .../designer/creator/XWParameterLayout.java | 11 + .../fr/design/gui/core/FormWidgetOption.java | 2 +- .../mainframe/EditingMouseListener.java | 23 +- .../com/fr/design/mainframe/FormDesigner.java | 17 ++ 16 files changed, 796 insertions(+), 44 deletions(-) create mode 100644 designer_base/src/com/fr/design/beans/location/WidgetForbidWindow.java create mode 100644 designer_form/src/com/fr/design/designer/beans/painters/FRAbsoluteLayoutPainter.java diff --git a/designer/src/com/fr/poly/hanlder/BottomCornerMouseHanlder.java b/designer/src/com/fr/poly/hanlder/BottomCornerMouseHanlder.java index e98ce6d02..7668411c8 100644 --- a/designer/src/com/fr/poly/hanlder/BottomCornerMouseHanlder.java +++ b/designer/src/com/fr/poly/hanlder/BottomCornerMouseHanlder.java @@ -103,7 +103,7 @@ public class BottomCornerMouseHanlder extends MouseInputAdapter { Rectangle bounds = block.getBounds().toRectangle(resolution); Point resultPoint = MoveUtils.sorption(bounds.x + dragStart.x < 0 ? 0 : bounds.x + dragStart.x, bounds.y - + dragStart.y < 0 ? 0 : bounds.y + dragStart.y, bounds.width, bounds.height, rectDesigner); + + dragStart.y < 0 ? 0 : bounds.y + dragStart.y, bounds.width, bounds.height, rectDesigner, false); block.setBounds(new UnitRectangle(new Rectangle(resultPoint.x, resultPoint.y, bounds.width, bounds.height), resolution)); designer.repaint(); @@ -124,7 +124,17 @@ public class BottomCornerMouseHanlder extends MouseInputAdapter { public RectangleIterator createRectangleIterator() { return getRectangleIt(); } - + + /** + * 设置等距线 + * + * @param line 吸附线 + */ + @Override + public void setEquidistantLine(Absorptionline line) { + + } + /** * 获取当前选中块的垂直线数组 * @@ -145,6 +155,34 @@ public class BottomCornerMouseHanlder extends MouseInputAdapter { return editor.getValue().getHorizontalLine(); } + /** + * 设置designer内部组件是否重叠的标志位 + * + * @param isIntersects 是否重叠 + */ + @Override + public void setWidgetsIntersects(boolean isIntersects) { + } + + /** + * 获取designer内部组件是否重叠的标志位 + * + * @return 重叠 + */ + @Override + public boolean getWidgetsIntersects() { + return false; + } + + /** + * 获取designer相对屏幕的位置 + * + * @return 位置 + */ + @Override + public Point getDesignerLocationOnScreen() { + return null; + } }; private RectangleIterator getRectangleIt(){ diff --git a/designer_base/src/com/fr/design/beans/location/Absorptionline.java b/designer_base/src/com/fr/design/beans/location/Absorptionline.java index f72892eef..a0ff0d0e4 100644 --- a/designer_base/src/com/fr/design/beans/location/Absorptionline.java +++ b/designer_base/src/com/fr/design/beans/location/Absorptionline.java @@ -1,23 +1,42 @@ package com.fr.design.beans.location; -import java.awt.Color; -import java.awt.Graphics; +import java.awt.*; import com.fr.base.GraphHelper; import com.fr.design.scrollruler.ScrollRulerComponent; import com.fr.stable.ArrayUtils; +import com.fr.third.org.hsqldb.lib.Collection; public class Absorptionline { + //箭头线前段为4px的等边三角形,给定了一个点的坐标,计算一下剩下两个点的坐标偏移量 + //而且箭头分为四个朝向,故有四组坐标(2根号3 约为 3) + // 1.(x,y)(x+2,y±2根号3)(x-2,y±2根号3) + // 2.(x,y)(x±2根号3,y-2)(x±2根号3,y+2) + private static int RECTANGLE_OFFSET_X = 2; + private static int RECTANGLE_OFFSET_Y = 3; + //控件周围八个拖拽框的大小 + private static int RESIZE_BOX_SIZE = 5; + private static Absorptionline lineInX = new Absorptionline(null, null, null, true); private static Absorptionline lineInY = new Absorptionline(null, null, null, false); + private static Absorptionline lineEquidistant = new Absorptionline(null, null, null, true); + private Color lineColor = new Color(228, 225, 199); private Color midLineColor = new Color(196, 227, 237); + private Color equidistantLineColor = new Color(0xff, 0x0d, 0x7b); + private Integer x1; private Integer x2; private Integer middle; private int[] verticalLines; private int[] horizontalLines; + + private int top; + private int left; + private int bottom; + private int right; + private Rectangle equidistantStart; private boolean trans; @@ -89,6 +108,19 @@ public class Absorptionline { return lineInY; } + /** + * 创建等距线 + * @return 等距线 + */ + public static Absorptionline createEquidistantAbsorptionline(Rectangle equidistantStart, int top, int left, int bottom, int right) { + lineEquidistant.equidistantStart = equidistantStart; + lineEquidistant.top = top; + lineEquidistant.left = left; + lineEquidistant.bottom = bottom; + lineEquidistant.right = right; + return lineEquidistant; + } + private Absorptionline(Integer x1, Integer x2, Integer middleInX, boolean trans) { this.x1 = x1; this.x2 = x2; @@ -186,5 +218,134 @@ public class Absorptionline { } } + //画等距线 + if (equidistantStart != null) { + g.setColor(equidistantLineColor); + if (top > 0) { + paintTopEquidistantLine(g); + } + if (left > 0) { + paintLeftEquidistantLine(g); + } + if (bottom > 0) { + paintBottomEquidistantLine(g); + } + if (right > 0) { + paintRightEquidistantLine(g); + } + } + } + + //朝向上方的等距线 + private void paintTopEquidistantLine(Graphics g){ + int x1[] = { + equidistantStart.x + equidistantStart.width / 2, + equidistantStart.x + equidistantStart.width / 2 - RECTANGLE_OFFSET_X, + equidistantStart.x + equidistantStart.width / 2 + RECTANGLE_OFFSET_X + }; + int y1[] = { + top, + top + RECTANGLE_OFFSET_Y, + top + RECTANGLE_OFFSET_Y + }; + int x2[] = { + equidistantStart.x + equidistantStart.width / 2, + equidistantStart.x + equidistantStart.width / 2 + RECTANGLE_OFFSET_X, + equidistantStart.x + equidistantStart.width / 2 - RECTANGLE_OFFSET_X + }; + int y2[] = { + equidistantStart.y - RESIZE_BOX_SIZE, + equidistantStart.y - RESIZE_BOX_SIZE - RECTANGLE_OFFSET_Y, + equidistantStart.y - RESIZE_BOX_SIZE - RECTANGLE_OFFSET_Y + }; + g.fillPolygon(x1, y1, 3); + g.fillPolygon(x2, y2, 3); + GraphHelper.drawLine(g, + equidistantStart.x + equidistantStart.width / 2, top, + equidistantStart.x + equidistantStart.width / 2, equidistantStart.y - RESIZE_BOX_SIZE); + } + //朝向左侧的等距线 + private void paintLeftEquidistantLine(Graphics g){ + int x1[] = { + left, + left + RECTANGLE_OFFSET_Y, + left + RECTANGLE_OFFSET_Y, + }; + int y1[] = { + equidistantStart.y + equidistantStart.height / 2, + equidistantStart.y + equidistantStart.height / 2 - RECTANGLE_OFFSET_X, + equidistantStart.y + equidistantStart.height / 2 + RECTANGLE_OFFSET_X, + }; + int x2[] = { + equidistantStart.x - RESIZE_BOX_SIZE, + equidistantStart.x - RESIZE_BOX_SIZE - RECTANGLE_OFFSET_Y, + equidistantStart.x - RESIZE_BOX_SIZE - RECTANGLE_OFFSET_Y + }; + int y2[] = { + equidistantStart.y + equidistantStart.height / 2, + equidistantStart.y + equidistantStart.height / 2 + RECTANGLE_OFFSET_X, + equidistantStart.y + equidistantStart.height / 2 - RECTANGLE_OFFSET_X + }; + g.fillPolygon(x1, y1, 3); + g.fillPolygon(x2, y2, 3); + GraphHelper.drawLine(g, + left, equidistantStart.y + equidistantStart.height / 2, + equidistantStart.x - RESIZE_BOX_SIZE, equidistantStart.y + equidistantStart.height / 2); + } + //朝向下方的等距线 + private void paintBottomEquidistantLine(Graphics g) { + int x1[] = { + equidistantStart.x + equidistantStart.width / 2, + equidistantStart.x + equidistantStart.width / 2 + RECTANGLE_OFFSET_X, + equidistantStart.x + equidistantStart.width / 2 - RECTANGLE_OFFSET_X, + }; + int y1[] = { + equidistantStart.y + equidistantStart.height + RESIZE_BOX_SIZE, + equidistantStart.y + equidistantStart.height + RESIZE_BOX_SIZE + RECTANGLE_OFFSET_Y, + equidistantStart.y + equidistantStart.height + RESIZE_BOX_SIZE + RECTANGLE_OFFSET_Y, + }; + int x2[] = { + equidistantStart.x + equidistantStart.width / 2, + equidistantStart.x + equidistantStart.width / 2 + RECTANGLE_OFFSET_X, + equidistantStart.x + equidistantStart.width / 2 - RECTANGLE_OFFSET_X + }; + int y2[] = { + bottom, + bottom - RECTANGLE_OFFSET_Y, + bottom - RECTANGLE_OFFSET_Y + }; + g.fillPolygon(x1, y1, 3); + g.fillPolygon(x2, y2, 3); + GraphHelper.drawLine(g, + equidistantStart.x + equidistantStart.width / 2, equidistantStart.y + equidistantStart.height + RESIZE_BOX_SIZE, + equidistantStart.x + equidistantStart.width / 2, bottom); + } + //朝向右侧的等距线 + private void paintRightEquidistantLine(Graphics g){ + int x1[] = { + right, + right - 3, + right - 3 + }; + int y1[] = { + equidistantStart.y + equidistantStart.height / 2, + equidistantStart.y + equidistantStart.height / 2 - RECTANGLE_OFFSET_X, + equidistantStart.y + equidistantStart.height / 2 + RECTANGLE_OFFSET_X + }; + int x2[] = { + equidistantStart.x + equidistantStart.width + RESIZE_BOX_SIZE, + equidistantStart.x + equidistantStart.width + RESIZE_BOX_SIZE + RECTANGLE_OFFSET_Y, + equidistantStart.x + equidistantStart.width + RESIZE_BOX_SIZE + RECTANGLE_OFFSET_Y + }; + int y2[] = { + equidistantStart.y + equidistantStart.height / 2, + equidistantStart.y + equidistantStart.height / 2 - RECTANGLE_OFFSET_X, + equidistantStart.y + equidistantStart.height / 2 + RECTANGLE_OFFSET_X, + }; + g.fillPolygon(x1, y1, 3); + g.fillPolygon(x2, y2, 3); + GraphHelper.drawLine(g, + equidistantStart.x + equidistantStart.width + RESIZE_BOX_SIZE, equidistantStart.y + equidistantStart.height / 2, + right, equidistantStart.y + equidistantStart.height / 2); } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/beans/location/MoveUtils.java b/designer_base/src/com/fr/design/beans/location/MoveUtils.java index fddb87648..e0bed7ca1 100644 --- a/designer_base/src/com/fr/design/beans/location/MoveUtils.java +++ b/designer_base/src/com/fr/design/beans/location/MoveUtils.java @@ -3,6 +3,8 @@ */ package com.fr.design.beans.location; +import com.fr.stable.ArrayUtils; + import javax.swing.*; import java.awt.*; import java.util.ArrayList; @@ -17,6 +19,10 @@ public class MoveUtils { public static final int SORPTION_UNIT = 5; + public static WidgetForbidWindow widgetForbidWindow = new WidgetForbidWindow(); + + public static ArrayList equidistantLines = new ArrayList<>(); + private MoveUtils() { } @@ -68,6 +74,30 @@ public class MoveUtils { * */ int[] getHorizontalLine(); + + /** + * 设置designer内部组件是否重叠的标志位 + * @param isIntersects 是否重叠 + */ + void setWidgetsIntersects(boolean isIntersects); + + /** + * 获取designer内部组件是否重叠的标志位 + * @return 重叠 + */ + boolean getWidgetsIntersects(); + + /** + * 获取designer相对屏幕的位置 + * @return 位置 + */ + Point getDesignerLocationOnScreen(); + + /** + * 设置等距线 + * @param line 吸附线 + */ + void setEquidistantLine(Absorptionline line); } public interface RectangleIterator { @@ -183,6 +213,53 @@ public class MoveUtils { } } + private static void findEquidistantLine(Rectangle bounds, int left, int top, int height, int width) { + //最近的距离与坐标 + EquidistantLine equidistantLineInfo = new EquidistantLine(0, 0, 0); + //等距线从各边中点画出,先要判断是不是在范围内 + int topMiddleX = left + width / 2; + int leftMiddleY = top + height / 2; + if ((topMiddleX > bounds.getX()) && (topMiddleX < (bounds.getX() + bounds.getWidth()))){ + //当前操作rec在bounds的下方 + if (top > (bounds.getY() + bounds.getHeight())){ + equidistantLineInfo.setDistance(top - (bounds.y + bounds.height)); + equidistantLineInfo.setReference(bounds.y + bounds.height); + equidistantLineInfo.setDirection(SwingConstants.TOP); + } + //当前操作rec在bounds上方 + if ((top + height) < bounds.getY()){ + equidistantLineInfo.setDistance(bounds.y - (top + height)); + equidistantLineInfo.setReference(bounds.y); + equidistantLineInfo.setDirection(SwingConstants.BOTTOM); + } + } + else if ((leftMiddleY > bounds.getY()) && (leftMiddleY < (bounds.getY() + bounds.getHeight()))){ + //当前操作rec在bounds的右侧 + if (left > (bounds.getX() + bounds.getWidth())){ + equidistantLineInfo.setDistance(left - (bounds.x + bounds.width)); + equidistantLineInfo.setReference(bounds.x + bounds.width); + equidistantLineInfo.setDirection(SwingConstants.LEFT); + } + //当前操作rec在bounds的左侧 + if ((left + width) < bounds.getX()){ + equidistantLineInfo.setDistance(bounds.x - (left + width)); + equidistantLineInfo.setReference(bounds.x); + equidistantLineInfo.setDirection(SwingConstants.RIGHT); + } + } + if(equidistantLineInfo.getDistance() > 0) { + equidistantLines.add(equidistantLineInfo); + } + } + + public static void displayForbidWindow(int x, int y) { + widgetForbidWindow.showWindow(x, y); + } + + public static void hideForbidWindow() { + widgetForbidWindow.hideWindow(); + } + /** * 吸附 * @@ -197,28 +274,67 @@ public class MoveUtils { * @date 2015-2-12-下午2:39:16 * */ - public static Point sorption(int x, int y, int width, int height, RectangleDesigner designer) { + public static Point sorption(int x, int y, int width, int height, RectangleDesigner designer, boolean isParameterLayout) { int left = x, top = y, bottom = top + height, right = left + width; + Rectangle operatingRectangle = new Rectangle(x, y, width, height); + + equidistantLines.clear(); + PlacePointing px = new PlacePointing(x); PlacePointing py = new PlacePointing(y); + + PlacePointing pEquidistantX = new PlacePointing(x); + PlacePointing pEquidistantY = new PlacePointing(y); + RectangleIterator iterator = designer.createRectangleIterator(); java.util.List cacheRecs = new ArrayList(); + //是否存在控件重叠 + boolean isWidgetsIntersects = false; while (iterator.hasNext()) { Rectangle bounds = iterator.nextRectangle(); cacheRecs.add(bounds); + boolean isIntersects = operatingRectangle.intersects(bounds); findX(px, bounds, left, right, width); findY(py, bounds, top, bottom, height); - if (px.isFind() && py.isFind()) { - break; + + if(isIntersects && !isParameterLayout){ + isWidgetsIntersects = true; + } + else{ + findEquidistantLine(bounds, left, top, height, width); } } + showForbiddenWindow(designer, x, y, isWidgetsIntersects); createXAbsorptionline(px, designer, width, cacheRecs); createYAbsorptionline(py, designer, height, cacheRecs); - return new Point(px.palce, py.palce); + operatingRectangle.x = px.palce; + operatingRectangle.y = py.palce; + createEquidistantLine(pEquidistantX, pEquidistantY, operatingRectangle, designer); + Point sorptionPoint = new Point(px.palce,py.palce); + if (!px.isFind()){ + sorptionPoint.x = pEquidistantX.palce; + } + if (!py.isFind()){ + sorptionPoint.y = pEquidistantY.palce; + } + return sorptionPoint; + } + + public static void showForbiddenWindow(RectangleDesigner designer, int x, int y, boolean isIntersects){ + if (isIntersects){ + if(designer.getDesignerLocationOnScreen() != null) { + displayForbidWindow(x + designer.getDesignerLocationOnScreen().x, y + designer.getDesignerLocationOnScreen().y); + } + designer.setWidgetsIntersects(true); + } + else{ + designer.setWidgetsIntersects(false); + hideForbidWindow(); + } } private static void createXAbsorptionline(PlacePointing px, RectangleDesigner designer, int width, java.util.List cacheRecs) { @@ -300,6 +416,70 @@ public class MoveUtils { } designer.setYAbsorptionline(line); } + + private static void createEquidistantLine(PlacePointing px, PlacePointing py, Rectangle operatingRectangle, RectangleDesigner designer){ + processEquidistantLinesList(px, py, operatingRectangle); + Absorptionline line = null; + if(equidistantLines.size() > 0) { + int top = -1; + int left = -1; + int bottom = -1; + int right = -1; + for(int i = 0; i < equidistantLines.size(); i++){ + if (equidistantLines.get(i).getDirection() == SwingConstants.TOP){ + top = equidistantLines.get(i).getReference(); + } + if (equidistantLines.get(i).getDirection() == SwingConstants.LEFT){ + left = equidistantLines.get(i).getReference(); + } + if (equidistantLines.get(i).getDirection() == SwingConstants.BOTTOM){ + bottom = equidistantLines.get(i).getReference(); + } + if (equidistantLines.get(i).getDirection() == SwingConstants.RIGHT){ + right = equidistantLines.get(i).getReference(); + } + } + line = Absorptionline.createEquidistantAbsorptionline(operatingRectangle, top, left, bottom, right); + } + designer.setEquidistantLine(line); + } + + private static void processEquidistantLinesList(PlacePointing pEquidistantX, PlacePointing pEquidistantY, Rectangle operatingRectangle){ + EquidistantLine[] equidistantLines1 = new EquidistantLine[4]; + //先按方向处理,只保留四个方向上距离最近 + for(int count = 0; count < equidistantLines.size(); count++){ + for (int direction = 0; direction < 4; direction++){ + if(equidistantLines.get(count).getDirection() == (direction + 1)){//direction 1,2,3,4 分别对应top,left,bottom,right + if(equidistantLines1[direction] != null + && equidistantLines1[direction].getDistance() > equidistantLines.get(count).getDistance() + || equidistantLines1[direction] == null) { + equidistantLines1[direction] = equidistantLines.get(count); + } + } + } + } + + equidistantLines.clear(); + //找list中横纵分别等距的组合 + if (equidistantLines1[0] != null && equidistantLines1[2] != null){//top, bottom + int offset = equidistantLines1[0].getDistance() - equidistantLines1[2].getDistance(); + if (Math.abs(offset) <= SORPTION_UNIT * 2){ + pEquidistantY.direction = SwingConstants.TOP; + equidistantLines.add(equidistantLines1[0]); + equidistantLines.add(equidistantLines1[2]); + pEquidistantY.palce = operatingRectangle.y - offset / 2; + } + } + if (equidistantLines1[1] != null && equidistantLines1[3] != null){//left, right + int offset = equidistantLines1[1].getDistance() - equidistantLines1[3].getDistance(); + if (Math.abs(offset) <= SORPTION_UNIT * 2){ + pEquidistantX.direction = SwingConstants.LEFT; + equidistantLines.add(equidistantLines1[1]); + equidistantLines.add(equidistantLines1[3]); + pEquidistantX.palce = operatingRectangle.x - offset / 2; + } + } + } //更新纵向行列线 private static void updateVerticalLine(int[] selfVertical, RectangleIterator iterator, Absorptionline line){ @@ -329,4 +509,43 @@ public class MoveUtils { return false; } + + private static class EquidistantLine{ + //与操作rectangle的距离 + private int distance; + //参考rectangle的位置 + private int reference; + //等距线的方向 + private int direction; + + EquidistantLine(int distance, int reference, int direction){ + this.distance = distance; + this.reference = reference; + this.direction = direction; + } + + public void setDistance(int distance){ + this.distance = distance; + } + + public int getDistance(){ + return this.distance; + } + + public void setReference(int reference){ + this.reference = reference; + } + + public int getReference(){ + return this.reference; + } + + public void setDirection(int direction){ + this.direction = direction; + } + + public int getDirection(){ + return this.direction; + } + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/beans/location/WidgetForbidWindow.java b/designer_base/src/com/fr/design/beans/location/WidgetForbidWindow.java new file mode 100644 index 000000000..089a242da --- /dev/null +++ b/designer_base/src/com/fr/design/beans/location/WidgetForbidWindow.java @@ -0,0 +1,48 @@ +package com.fr.design.beans.location; + +import com.fr.base.BaseUtils; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.icon.IconPathConstants; +import com.fr.general.Inter; + +import javax.swing.*; + +/** + * Created by zhouping on 2016/7/24. + */ +public class WidgetForbidWindow extends JWindow { + + private static final int WIDTH = 150; + private static final int HEIGHT = 20; + + private UIButton promptButton = new UIButton("禁止组件相互重叠", BaseUtils.readIcon(IconPathConstants.FORBID_ICON_PATH)); + + /** + * 构造函数 + */ + public WidgetForbidWindow() { + this.add(promptButton); + + this.setSize(WIDTH, HEIGHT); + } + + /** + * 在指定位置显示窗口, 默认将window的中心点放到指定位置上 + * + * @param x x坐标 + * @param y y坐标 + * + */ + public void showWindow(int x, int y){ + this.setLocation(x - WIDTH / 2, y - HEIGHT / 2); + this.setVisible(true); + } + + /** + * 隐藏当前窗口 + * + */ + public void hideWindow(){ + this.setVisible(false); + } +} diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java index dadfed504..8ce0d0529 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java @@ -1,8 +1,10 @@ package com.fr.design.designer.beans.adapters.layout; -import java.awt.Rectangle; +import java.awt.*; import com.fr.design.designer.beans.ConstraintsGroupModel; +import com.fr.design.designer.beans.HoverPainter; +import com.fr.design.designer.beans.painters.FRAbsoluteLayoutPainter; import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XCreatorUtils; import com.fr.design.designer.creator.XLayoutContainer; @@ -13,10 +15,16 @@ import com.fr.design.utils.ComponentUtils; import com.fr.design.utils.gui.LayoutUtils; public class FRAbsoluteLayoutAdapter extends AbstractLayoutAdapter { - + private HoverPainter painter; public FRAbsoluteLayoutAdapter(XLayoutContainer container) { super(container); + painter = new FRAbsoluteLayoutPainter(container); } + + @Override + public HoverPainter getPainter() { + return painter; + } /** * 是否能在指定位置添加组件 @@ -27,8 +35,15 @@ public class FRAbsoluteLayoutAdapter extends AbstractLayoutAdapter { */ @Override public boolean accept(XCreator creator, int x, int y) { - return x >= 0 && y >= 0 && creator.getHeight() <= container.getHeight() + Component comp = container.getComponentAt(x, y); + //布局控件要先判断是不是可编辑 + XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer((XCreator)comp).getTopLayout(); + if(topLayout != null && !topLayout.isEditable()){ + return false; + } + boolean isAccept = x >= 0 && y >= 0 && creator.getHeight() <= container.getHeight() && creator.getWidth() <= container.getWidth(); + return isAccept; } @Override @@ -46,10 +61,20 @@ public class FRAbsoluteLayoutAdapter extends AbstractLayoutAdapter { } fix(creator, x, y); - container.add(creator); + + if (creator.shouldScaleCreator() || creator.hasTitleStyle()) { + addParentCreator(creator); + } else { + container.add(creator, creator.toData().getWidgetName()); + } LayoutUtils.layoutRootContainer(container); } - + + private void addParentCreator(XCreator child) { + XLayoutContainer parentPanel = child.initCreatorWrapper(child.getHeight()); + container.add(parentPanel, child.toData().getWidgetName()); + } + /** * 组件拖拽后调整大小 * @param creator 组件 diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java index 840d3a7db..2777c4476 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java @@ -117,9 +117,6 @@ public class FRFitLayoutAdapter extends AbstractLayoutAdapter { */ @Override public void addComp(XCreator child, int x, int y) { - if (ComparatorUtils.equals(child.getIconPath(), WIDGETPANEICONPATH)) { - return; - } fix(child, x, y); if (child.shouldScaleCreator() || child.hasTitleStyle()) { addParentCreator(child); diff --git a/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java b/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java index a5758639b..b44145c0c 100644 --- a/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java +++ b/designer_form/src/com/fr/design/designer/beans/location/AccessDirection.java @@ -3,20 +3,17 @@ */ package com.fr.design.designer.beans.location; -import java.awt.Cursor; -import java.awt.Point; -import java.awt.Rectangle; +import java.awt.*; import com.fr.design.beans.location.Absorptionline; import com.fr.design.beans.location.MoveUtils; +import com.fr.design.designer.creator.*; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormSelection; -import com.fr.design.designer.creator.XCreatorUtils; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWBorderLayout; -import com.fr.design.designer.creator.XWParameterLayout; +import com.fr.design.utils.ComponentUtils; import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; +import com.fr.form.ui.container.WParameterLayout; /** * @author richer @@ -39,10 +36,7 @@ public abstract class AccessDirection implements Direction { return new int[] { x, y }; } else { int posy = current_bounds.y; - if (posy >= designer.getParaHeight() && !designer.isFormParaDesigner()) { - return new int[] { x, y }; - } - + Point relativePoint = getRelativePoint(x, y, current_bounds,designer); sorptionPoint(relativePoint,current_bounds, designer); return new int[] { relativePoint.x, relativePoint.y }; @@ -72,12 +66,14 @@ public abstract class AccessDirection implements Direction { WAbsoluteLayout layout =getLayout(designer); FormSelection selection = designer.getSelectionModel().getSelection(); + + boolean isWidgetsIntersect = false; for (int i = 0, count = layout.getWidgetCount(); i < count; i++) { BoundsWidget temp = (BoundsWidget) layout.getWidget(i); if (!temp.isVisible() || selection.contains(temp.getWidget())) { continue; } - Rectangle bounds = temp.getBounds(); + Rectangle bounds = getWidgetRelativeBounds(temp.getBounds(), selection); if (!findInX) { int x1 = bounds.x; if (Math.abs(x1 - point.x) <= MoveUtils.SORPTION_UNIT) { @@ -106,18 +102,54 @@ public abstract class AccessDirection implements Direction { if (findInX && findInY) { break; } + + if (current_bounds.intersects(bounds) && !(layout instanceof WParameterLayout)){ + isWidgetsIntersect = true; + } } + processRectangleIntersects(designer, point.x, point.y, isWidgetsIntersect); designer.getStateModel().setXAbsorptionline(findInX && current_bounds.getWidth() > MoveUtils.SORPTION_UNIT ? Absorptionline.createXAbsorptionline(point.x) : null); designer.getStateModel().setYAbsorptionline(findInY && current_bounds.getHeight() > MoveUtils.SORPTION_UNIT ? Absorptionline.createYAbsorptionline(point.y) : null); } + private Rectangle getWidgetRelativeBounds(Rectangle bounds, FormSelection selection){ + Rectangle relativeRec = new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height); + XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); + if (parent == null) { + return relativeRec; + } + Rectangle rec = ComponentUtils.getRelativeBounds(parent); + relativeRec.x += rec.x; + relativeRec.y += rec.y; + return relativeRec; + } + + private void processRectangleIntersects(FormDesigner designer, int x, int y, boolean isIntersects){ + if(isIntersects){ + if(designer.getLocationOnScreen() != null) { + MoveUtils.displayForbidWindow(x + designer.getLocationOnScreen().x, y + designer.getLocationOnScreen().y); + } + designer.setWidgetsIntersect(true); + } + else{ + MoveUtils.hideForbidWindow(); + designer.setWidgetsIntersect(false); + } + } + private WAbsoluteLayout getLayout(final FormDesigner designer){ XLayoutContainer formLayoutContainer = (XLayoutContainer) XCreatorUtils.createXCreator( designer.getTarget().getContainer()); WAbsoluteLayout layout; - if (formLayoutContainer.acceptType(XWBorderLayout.class)){ - layout = (WAbsoluteLayout) designer.getParaComponent().toData(); + if (formLayoutContainer.acceptType(XWBorderLayout.class)){//看起来这边的作用应该是为了区别cpt(得到XWParameterLayout)还是frm(得到XWBorderLayout)的参数界面 + Container container = designer.getSelectionModel().getSelection().getSelectedCreator().getParent(); + if(container instanceof XWAbsoluteLayout){ + layout = ((XWAbsoluteLayout)container).toData(); + } + else { + layout = (WAbsoluteLayout) designer.getParaComponent().toData(); + } } else{ layout = (WAbsoluteLayout) designer.getTarget().getContainer(); } diff --git a/designer_form/src/com/fr/design/designer/beans/location/Inner.java b/designer_form/src/com/fr/design/designer/beans/location/Inner.java index 68db5241e..f6c5bdef6 100644 --- a/designer_form/src/com/fr/design/designer/beans/location/Inner.java +++ b/designer_form/src/com/fr/design/designer/beans/location/Inner.java @@ -4,16 +4,17 @@ import com.fr.design.beans.location.Absorptionline; import com.fr.design.beans.location.MoveUtils; import com.fr.design.beans.location.MoveUtils.RectangleDesigner; import com.fr.design.beans.location.MoveUtils.RectangleIterator; -import com.fr.design.designer.creator.XCreatorUtils; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWBorderLayout; +import com.fr.design.designer.creator.*; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormSelection; +import com.fr.design.utils.ComponentUtils; import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.stable.ArrayUtils; +import com.fr.third.com.lowagie.text.*; import java.awt.*; +import java.awt.Rectangle; public class Inner extends AccessDirection { @@ -78,17 +79,72 @@ public class Inner extends AccessDirection { public RectangleIterator createRectangleIterator() { return getRectangleIterator(designer); } + + /** + * 设置designer内部组件是否重叠的标志位 + * + * @param isIntersects 是否重叠 + */ + @Override + public void setWidgetsIntersects(boolean isIntersects) { + designer.setWidgetsIntersect(isIntersects); + } + + /** + * 获取designer内部组件是否重叠的标志位 + * + * @return 重叠 + */ + @Override + public boolean getWidgetsIntersects() { + return designer.isWidgetsIntersect(); + } + + /** + * 获取designer相对屏幕的位置 + * + * @return 位置 + */ + @Override + public Point getDesignerLocationOnScreen() { + return designer.getLocationOnScreen(); + } + + /** + * 设置等距线 + * + * @param line 吸附线 + */ + @Override + public void setEquidistantLine(Absorptionline line) { + designer.getStateModel().setEquidistantLine(line); + } }; - point.setLocation(MoveUtils.sorption(point.x, point.y, current_bounds.width, current_bounds.height, rd)); + //判断当前操作的是不是参数面板,要特殊处理 + boolean isParameterLayout = (designer.getSelectionModel().getSelection().getSelectedCreator().getParent()) instanceof XWParameterLayout; + point.setLocation(MoveUtils.sorption(point.x, point.y, current_bounds.width, current_bounds.height, rd, isParameterLayout)); } private RectangleIterator getRectangleIterator(final FormDesigner designer){ + return new RectangleIterator() { private int i; private WAbsoluteLayout layout = getLayout(designer); private int count = layout.getWidgetCount(); private FormSelection selection = designer.getSelectionModel().getSelection(); + private Rectangle getWidgetRelativeBounds(Rectangle bounds){ + Rectangle relativeRec = new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height); + XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(selection.getSelectedCreator()); + if (parent == null) { + return relativeRec; + } + Rectangle rec = ComponentUtils.getRelativeBounds(parent); + relativeRec.x += rec.x; + relativeRec.y += rec.y; + return relativeRec; + } + public boolean hasNext() { if (i >= count) { return false; @@ -110,7 +166,7 @@ public class Inner extends AccessDirection { } public Rectangle nextRectangle() { BoundsWidget temp = (BoundsWidget) layout.getWidget(i++); - return temp.getBounds(); + return getWidgetRelativeBounds(temp.getBounds()); } }; } @@ -119,8 +175,14 @@ public class Inner extends AccessDirection { XLayoutContainer formLayoutContainer = (XLayoutContainer) XCreatorUtils.createXCreator( designer.getTarget().getContainer()); WAbsoluteLayout layout; - if (formLayoutContainer.acceptType(XWBorderLayout.class)){ - layout = (WAbsoluteLayout) designer.getParaComponent().toData(); + if (formLayoutContainer.acceptType(XWBorderLayout.class)){//看起来这边的作用应该是为了区别cpt(得到XWParameterLayout)还是frm(得到XWBorderLayout)的参数界面 + Container container = designer.getSelectionModel().getSelection().getSelectedCreator().getParent(); + if(container instanceof XWAbsoluteLayout){ + layout = ((XWAbsoluteLayout)container).toData(); + } + else { + layout = (WAbsoluteLayout) designer.getParaComponent().toData(); + } } else{ layout = (WAbsoluteLayout) designer.getTarget().getContainer(); } diff --git a/designer_form/src/com/fr/design/designer/beans/models/StateModel.java b/designer_form/src/com/fr/design/designer/beans/models/StateModel.java index d92cd9c76..a623caddc 100644 --- a/designer_form/src/com/fr/design/designer/beans/models/StateModel.java +++ b/designer_form/src/com/fr/design/designer/beans/models/StateModel.java @@ -44,6 +44,8 @@ public class StateModel { private Absorptionline lineInX; private Absorptionline lineInY; + //等距线 + private Absorptionline lineEquidistant; // 当前是否处于拖拽选择状态 private boolean selecting; @@ -357,6 +359,14 @@ public class StateModel { this.lineInY = line; } + /** + * 等距线赋值 + * @param line 线 + */ + public void setEquidistantLine(Absorptionline line){ + this.lineEquidistant = line; + } + /** *画吸附线 * @param g Graphics类 @@ -368,6 +378,9 @@ public class StateModel { if(lineInY != null) { lineInY.paint(g,designer.getArea()); } + if(lineEquidistant != null){ + lineEquidistant.paint(g,designer.getArea()); + } } /** diff --git a/designer_form/src/com/fr/design/designer/beans/painters/FRAbsoluteLayoutPainter.java b/designer_form/src/com/fr/design/designer/beans/painters/FRAbsoluteLayoutPainter.java new file mode 100644 index 000000000..04e6018fc --- /dev/null +++ b/designer_form/src/com/fr/design/designer/beans/painters/FRAbsoluteLayoutPainter.java @@ -0,0 +1,26 @@ +package com.fr.design.designer.beans.painters; + +import com.fr.design.designer.creator.XLayoutContainer; + +import java.awt.*; + +/** + * Created by zhouping on 2016/7/11. + */ +public class FRAbsoluteLayoutPainter extends AbstractPainter { + public FRAbsoluteLayoutPainter(XLayoutContainer container) { + super(container); + } + + /** + * 组件渲染 + * + * @param g 画图类 + * @param startX 开始位置x + * @param startY 开始位置y + */ + @Override + public void paint(Graphics g, int startX, int startY) { + super.paint(g, startX, startY); + } +} diff --git a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java index 6cf0fc216..46e1c42c2 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java @@ -3,26 +3,38 @@ */ package com.fr.design.designer.creator; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Rectangle; +import java.awt.*; import java.awt.event.ContainerEvent; +import java.awt.event.MouseEvent; +import java.awt.image.BufferedImage; import java.util.HashMap; +import com.fr.design.designer.beans.AdapterBus; +import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.LayoutAdapter; +import com.fr.design.designer.beans.adapters.layout.AbsoluteLayoutAdapter; import com.fr.design.designer.beans.adapters.layout.FRAbsoluteLayoutAdapter; import com.fr.design.designer.beans.location.Direction; +import com.fr.design.designer.beans.models.SelectionModel; import com.fr.design.form.layout.FRAbsoluteLayout; +import com.fr.design.icon.IconPathConstants; +import com.fr.design.mainframe.EditingMouseListener; +import com.fr.design.mainframe.FormDesigner; import com.fr.form.ui.Connector; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; +import com.fr.general.IOUtils; +import com.fr.general.Inter; /** * @author richer * @since 6.5.3 */ public class XWAbsoluteLayout extends XLayoutContainer { + + private static final int EDIT_BTN_WIDTH = 60; + private static final int EDIT_BTN_HEIGHT = 24; private HashMap xConnectorMap; @@ -158,7 +170,7 @@ public class XWAbsoluteLayout extends XLayoutContainer { WAbsoluteLayout wabs = this.toData(); if (!creator.acceptType(XWFitLayout.class)) { creator.setDirections(Direction.ALL); - } + } wabs.addWidget(new BoundsWidget(creator.toData(), creator.getBounds())); } @@ -187,4 +199,74 @@ public class XWAbsoluteLayout extends XLayoutContainer { public LayoutAdapter getLayoutAdapter() { return new FRAbsoluteLayoutAdapter(this); } + + @Override + public XLayoutContainer getTopLayout() { + XLayoutContainer xTopLayout = XCreatorUtils.getParentXLayoutContainer(this).getTopLayout(); + if (xTopLayout != null && !xTopLayout.isEditable()){ + return xTopLayout; + } + else{ + return this; + } + } + + public void paint(Graphics g) { + super.paint(g); + //如果鼠标移动到布局内且布局不可编辑,画出编辑蒙层 + if (isMouseEnter && !this.editable) { + int x = 0; + int y = 0; + int w = getWidth(); + int h = getHeight(); + + Graphics2D g2d = (Graphics2D) g; + Composite oldComposite = g2d.getComposite(); + //画白色的编辑层 + g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 60 / 100.0F)); + g2d.setColor(Color.WHITE); + g2d.fillRect(x, y, w, h); + //画编辑按钮所在框 + g2d.setComposite(oldComposite); + g2d.setColor(new Color(176, 196, 222)); + g2d.fillRect((x + w / 2 - EDIT_BTN_WIDTH / 2), (y + h / 2 - EDIT_BTN_HEIGHT / 2), EDIT_BTN_WIDTH, EDIT_BTN_HEIGHT); + //画编辑按钮图标 + BufferedImage image = IOUtils.readImage(IconPathConstants.TD_EDIT_ICON_PATH); + g2d.drawImage( + image, + (x + w / 2 - 23), + (y + h / 2 - image.getHeight() / 2), + image.getWidth(), + image.getHeight(), + null, + this + ); + g2d.setColor(Color.BLACK); + //画编辑文字 + g2d.drawString(Inter.getLocText("Edit"), x + w / 2 - 2, y + h / 2 + 5); + } + } + + /** + * 响应点击事件 + * + * @param editingMouseListener 鼠标点击,位置处理器 + * @param e 鼠标点击事件 + */ + public void respondClick(EditingMouseListener editingMouseListener,MouseEvent e){ + FormDesigner designer = editingMouseListener.getDesigner(); + SelectionModel selectionModel = editingMouseListener.getSelectionModel(); + boolean isEditing = isEditable() || designer.getCursor().getType() == Cursor.HAND_CURSOR || e.getClickCount() == 2; + setEditable(isEditing); + + selectionModel.selectACreatorAtMouseEvent(e); + designer.repaint(); + + if (editingMouseListener.stopEditing()) { + if (this != designer.getRootComponent()) { + ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, this); + editingMouseListener.startEditing(this, isEditing ? adapter.getDesignerEditor() : null, adapter); + } + } + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java b/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java index 38652b3d4..489aab52b 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java @@ -825,7 +825,7 @@ public class XWFitLayout extends XLayoutContainer { /** * 处理自适应布局的directions - * @param creator 组件 + * @param xcreator 组件 */ private void dealDirections(XCreator xcreator, boolean isInit) { if (xcreator == null) { diff --git a/designer_form/src/com/fr/design/designer/creator/XWParameterLayout.java b/designer_form/src/com/fr/design/designer/creator/XWParameterLayout.java index 9e5520716..890612ccc 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWParameterLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWParameterLayout.java @@ -163,4 +163,15 @@ public class XWParameterLayout extends XWAbsoluteLayout { public void setBackground(Background background){ this.toData().setBackground(background); } + + @Override + public void paint(Graphics g) { + //参数面板特殊处理,不出现编辑层 + setEditable(true); + super.paint(g); + } + @Override + public XLayoutContainer getTopLayout() { + return this; + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/gui/core/FormWidgetOption.java b/designer_form/src/com/fr/design/gui/core/FormWidgetOption.java index 229b54943..76287c30f 100644 --- a/designer_form/src/com/fr/design/gui/core/FormWidgetOption.java +++ b/designer_form/src/com/fr/design/gui/core/FormWidgetOption.java @@ -1 +1 @@ -package com.fr.design.gui.core; import javax.swing.Icon; import com.fr.base.BaseUtils; import com.fr.form.ui.ElementCaseEditor; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WBorderLayout; import com.fr.form.ui.container.WCardLayout; import com.fr.form.ui.container.WFitLayout; import com.fr.form.ui.container.WHorizontalBoxLayout; import com.fr.form.ui.container.WParameterLayout; import com.fr.form.ui.container.WVerticalBoxLayout; import com.fr.general.Inter; /** * Author : Shockway * Date: 13-6-17 * Time: 上午10:40 */ public class FormWidgetOption extends WidgetOption { /** * 返回名字 * @return 名字 */ @Override public String optionName() { return null; } /** * 返回图标 * @return 图标 */ @Override public Icon optionIcon() { return null; } /** * 组件类 * @return 类 */ @Override public Class widgetClass() { return null; } /** * 返回组件 * @return 控件 */ @Override public Widget createWidget() { return null; } /* * 表单容器 */ public static WidgetOption[] getFormContainerInstance() { return new WidgetOption[] { ABSOLUTELAYOUTCONTAINER, BORDERLAYOUTCONTAINER, HORIZONTALBOXLAYOUTCONTAINER, VERTICALBOXLAYOUTCONTAINER, CARDLAYOUTCONTAINER, FITLAYOUTCONTAINER }; } /** * 表单工具栏上的布局 * @return 控件 */ public static WidgetOption[] getFormLayoutInstance() { return new WidgetOption[] {CARDLAYOUTCONTAINER}; } public static final WidgetOption ABSOLUTELAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_AbsoluteLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_absolute.png"), WAbsoluteLayout.class); public static final WidgetOption BORDERLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_BorderLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_border.png"), WBorderLayout.class); public static final WidgetOption CARDLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_CardLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/card_layout_16.png"), WCardLayout.class); public static final WidgetOption HORIZONTALBOXLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_Layout-HBox"), BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_h_16.png"), WHorizontalBoxLayout.class); public static final WidgetOption VERTICALBOXLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_VerticalBoxLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_v_16.png"), WVerticalBoxLayout.class); public static final WidgetOption FITLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Designer-Layout_Adaptive_Layout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_v_16.png"), WFitLayout.class); public static final WidgetOption PARAMETERCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_Para-Body"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_parameter.png"), WParameterLayout.class); public static final WidgetOption ELEMENTCASE = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_Form-Report"), BaseUtils.readIcon("/com/fr/web/images/form/resources/report_16.png"), ElementCaseEditor.class); } \ No newline at end of file +package com.fr.design.gui.core; import javax.swing.Icon; import com.fr.base.BaseUtils; import com.fr.form.ui.ElementCaseEditor; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WBorderLayout; import com.fr.form.ui.container.WCardLayout; import com.fr.form.ui.container.WFitLayout; import com.fr.form.ui.container.WHorizontalBoxLayout; import com.fr.form.ui.container.WParameterLayout; import com.fr.form.ui.container.WVerticalBoxLayout; import com.fr.general.Inter; /** * Author : Shockway * Date: 13-6-17 * Time: 上午10:40 */ public class FormWidgetOption extends WidgetOption { /** * 返回名字 * @return 名字 */ @Override public String optionName() { return null; } /** * 返回图标 * @return 图标 */ @Override public Icon optionIcon() { return null; } /** * 组件类 * @return 类 */ @Override public Class widgetClass() { return null; } /** * 返回组件 * @return 控件 */ @Override public Widget createWidget() { return null; } /* * 表单容器 */ public static WidgetOption[] getFormContainerInstance() { return new WidgetOption[] { ABSOLUTELAYOUTCONTAINER, BORDERLAYOUTCONTAINER, HORIZONTALBOXLAYOUTCONTAINER, VERTICALBOXLAYOUTCONTAINER, CARDLAYOUTCONTAINER, FITLAYOUTCONTAINER }; } /** * 表单工具栏上的布局 * @return 控件 */ public static WidgetOption[] getFormLayoutInstance() { return new WidgetOption[] {CARDLAYOUTCONTAINER, ABSOLUTELAYOUTCONTAINER}; } public static final WidgetOption ABSOLUTELAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_AbsoluteLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_absolute.png"), WAbsoluteLayout.class); public static final WidgetOption BORDERLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_BorderLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_border.png"), WBorderLayout.class); public static final WidgetOption CARDLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_CardLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/card_layout_16.png"), WCardLayout.class); public static final WidgetOption HORIZONTALBOXLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_Layout-HBox"), BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_h_16.png"), WHorizontalBoxLayout.class); public static final WidgetOption VERTICALBOXLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_VerticalBoxLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_v_16.png"), WVerticalBoxLayout.class); public static final WidgetOption FITLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Designer-Layout_Adaptive_Layout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_v_16.png"), WFitLayout.class); public static final WidgetOption PARAMETERCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_Para-Body"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_parameter.png"), WParameterLayout.class); public static final WidgetOption ELEMENTCASE = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_Form-Report"), BaseUtils.readIcon("/com/fr/web/images/form/resources/report_16.png"), ElementCaseEditor.class); } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java index a4ccae7c2..fc25bd124 100644 --- a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java +++ b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java @@ -1,12 +1,16 @@ package com.fr.design.mainframe; -import java.awt.*; +import java.awt.Color; +import java.awt.Container; +import java.awt.Cursor; +import java.awt.Rectangle; import java.awt.event.MouseEvent; import javax.swing.*; import javax.swing.event.MouseInputAdapter; import com.fr.base.BaseUtils; +import com.fr.design.beans.location.MoveUtils; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.events.DesignerEditor; @@ -69,6 +73,9 @@ public class EditingMouseListener extends MouseInputAdapter { private DesignerEditor current_editor; private XCreator current_creator; + //备份开始拖动的位置和大小 + private Rectangle dragBackupBounds; + /** * 获取最小移动距离 * @@ -186,6 +193,14 @@ public class EditingMouseListener extends MouseInputAdapter { if (stateModel.isDragging()) { // 当前鼠标所在的组件 XCreator hoveredComponent = designer.getComponentAt(e.getX(), e.getY()); + if(designer.isWidgetsIntersect() && dragBackupBounds != null && hoveredComponent != null){ + XCreator selectionXCreator = designer.getSelectionModel().getSelection().getSelectedCreator(); + if(selectionXCreator != null){ + selectionXCreator.setBounds(dragBackupBounds.x, dragBackupBounds.y, dragBackupBounds.width, dragBackupBounds.height); + MoveUtils.hideForbidWindow(); + } + } + dragBackupBounds = null; // 拉伸时鼠标拖动过快,导致所在组件获取会为空 if (hoveredComponent == null && e.getY() < 0) { // bug63538 @@ -384,6 +399,12 @@ public class EditingMouseListener extends MouseInputAdapter { stateModel.dragging(e); // 获取e所在的焦点组件 XCreator hotspot = designer.getComponentAt(e.getX(), e.getY()); + if(dragBackupBounds == null) { + XCreator selectingXCreator = designer.getSelectionModel().getSelection().getSelectedCreator(); + if(selectingXCreator != null){ + dragBackupBounds = new Rectangle(selectingXCreator.getX(), selectingXCreator.getY(), selectingXCreator.getWidth(), selectingXCreator.getHeight()); + } + } // 拉伸时鼠标拖动过快,导致所在组件获取会为空 if (hotspot == null) { return; diff --git a/designer_form/src/com/fr/design/mainframe/FormDesigner.java b/designer_form/src/com/fr/design/mainframe/FormDesigner.java index 19bf64c70..40add6915 100644 --- a/designer_form/src/com/fr/design/mainframe/FormDesigner.java +++ b/designer_form/src/com/fr/design/mainframe/FormDesigner.java @@ -84,6 +84,9 @@ public class FormDesigner extends TargetComponent
implements TreeSelection private ConnectorHelper ConnectorHelper; private boolean isReportBlockEditing = false; + //组件重叠 + private boolean isWidgetsIntersect = false; + /** * 下面的变量都是非序列化成员,不记录设计状态,只作为设计时临时状态使用。 */ @@ -539,6 +542,12 @@ public class FormDesigner extends TargetComponent implements TreeSelection if (paraComponent != null && paraComponent.acceptType(XWParameterLayout.class)){ return true; } + else{ + if (this.getSelectionModel().getSelection().getSelectedCreator().getParent() != null + && ((XLayoutContainer)this.getSelectionModel().getSelection().getSelectedCreator().getParent()).acceptType(XWAbsoluteLayout.class)){ + return true; + } + } return false; } @@ -558,6 +567,14 @@ public class FormDesigner extends TargetComponent implements TreeSelection return this.isReportBlockEditing; } + public void setWidgetsIntersect(boolean isWidgetsIntersect){ + this.isWidgetsIntersect = isWidgetsIntersect; + } + + public boolean isWidgetsIntersect(){ + return this.isWidgetsIntersect; + } + /** * 是否重命名控件 * @param creator 组件 From 0374fd648c17d3d1e07dfc05f198bdf9fe651951 Mon Sep 17 00:00:00 2001 From: zhouping Date: Fri, 29 Jul 2016 09:26:04 +0800 Subject: [PATCH 40/46] =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/beans/location/WidgetForbidWindow.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/beans/location/WidgetForbidWindow.java b/designer_base/src/com/fr/design/beans/location/WidgetForbidWindow.java index 089a242da..acf934e25 100644 --- a/designer_base/src/com/fr/design/beans/location/WidgetForbidWindow.java +++ b/designer_base/src/com/fr/design/beans/location/WidgetForbidWindow.java @@ -15,7 +15,7 @@ public class WidgetForbidWindow extends JWindow { private static final int WIDTH = 150; private static final int HEIGHT = 20; - private UIButton promptButton = new UIButton("禁止组件相互重叠", BaseUtils.readIcon(IconPathConstants.FORBID_ICON_PATH)); + private UIButton promptButton = new UIButton(Inter.getLocText("FR-Designer_Forbid_Widgets_Intersects"), BaseUtils.readIcon(IconPathConstants.FORBID_ICON_PATH)); /** * 构造函数 From b930df76890e627ca4271dea752888d09f7e8361 Mon Sep 17 00:00:00 2001 From: zhouping Date: Fri, 29 Jul 2016 10:18:31 +0800 Subject: [PATCH 41/46] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=8Binstanceof?= =?UTF-8?q?=EF=BC=8C=E6=94=B9=E6=88=90acceptType=E5=A5=BD=E4=B8=80?= =?UTF-8?q?=E4=BA=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/designer/beans/location/Inner.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_form/src/com/fr/design/designer/beans/location/Inner.java b/designer_form/src/com/fr/design/designer/beans/location/Inner.java index f6c5bdef6..9e17b4ac3 100644 --- a/designer_form/src/com/fr/design/designer/beans/location/Inner.java +++ b/designer_form/src/com/fr/design/designer/beans/location/Inner.java @@ -121,7 +121,7 @@ public class Inner extends AccessDirection { } }; //判断当前操作的是不是参数面板,要特殊处理 - boolean isParameterLayout = (designer.getSelectionModel().getSelection().getSelectedCreator().getParent()) instanceof XWParameterLayout; + boolean isParameterLayout = ((XCreator)(designer.getSelectionModel().getSelection().getSelectedCreator().getParent())).acceptType(XWParameterLayout.class); point.setLocation(MoveUtils.sorption(point.x, point.y, current_bounds.width, current_bounds.height, rd, isParameterLayout)); } From cffe90f8257da9dfda66714b3565cd2f72311304 Mon Sep 17 00:00:00 2001 From: neil Date: Fri, 29 Jul 2016 11:00:29 +0800 Subject: [PATCH 42/46] =?UTF-8?q?=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ChartHyperPoplinkPane.java | 20 +++++++++---------- .../chart/gui/data/NormalChartDataPane.java | 1 - sonar-project.properties | 2 +- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java b/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java index 252e0b751..fdcda38b2 100644 --- a/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java +++ b/designer_chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java @@ -4,7 +4,6 @@ import com.fr.base.chart.BaseChartCollection; import com.fr.chart.chartattr.Bar2DPlot; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.ChartCollection; -import com.fr.chart.chartattr.ChartFactory; import com.fr.chart.charttypes.ChartTypeManager; import com.fr.chart.web.ChartHyperPoplink; import com.fr.design.beans.BasicBeanPane; @@ -23,7 +22,7 @@ import com.fr.general.Inter; import java.awt.*; /** - * 类说明: 图表超链 -- 弹出 悬浮窗. + * 类说明: 图表超链 -- 弹出 悬浮窗. * @author kunsnat E-mail:kunsnat@gmail.com * @version 创建时间:2011-12-28 上午10:41:39 */ @@ -32,7 +31,7 @@ public class ChartHyperPoplinkPane extends BasicBeanPane { private UITextField itemNameTextField; private ChartHyperEditPane hyperEditPane; private ChartComponent chartComponent; - + public ChartHyperPoplinkPane() { this.setLayout(FRGUIPaneFactory.createM_BorderLayout()); @@ -43,18 +42,17 @@ public class ChartHyperPoplinkPane extends BasicBeanPane { hyperEditPane = new ChartHyperEditPane(getChartParaType(), getValueEditorPane(), getValueEditorPane()); this.add(hyperEditPane, BorderLayout.CENTER); - - ChartCollection cc = createChartCollection(); - + ChartCollection cc = createChartCollection(); + chartComponent = new ChartComponent(); chartComponent.setPreferredSize(new Dimension(220, 170));// 在单元格弹出时 需要调整保证属性表的大小. chartComponent.setSupportEdit(false); chartComponent.populate(cc); - + this.add(chartComponent, BorderLayout.EAST); - + hyperEditPane.populate(cc); - + hyperEditPane.useChartComponent(chartComponent); } @@ -75,7 +73,7 @@ public class ChartHyperPoplinkPane extends BasicBeanPane { return cc; } - protected int getChartParaType() { + protected int getChartParaType() { return ParameterTableModel.CHART_NORMAL_USE; } @@ -90,7 +88,7 @@ public class ChartHyperPoplinkPane extends BasicBeanPane { protected boolean needRenamePane(){ return true; } - + @Override protected String title4PopupWindow() { return Inter.getLocText("FR-Chart-Pop_Chart"); diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/NormalChartDataPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/NormalChartDataPane.java index 7c60161f4..bf64e4957 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/data/NormalChartDataPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/data/NormalChartDataPane.java @@ -109,7 +109,6 @@ public class NormalChartDataPane extends DataContentsPane { } else { dataPane.populateBean(collection); } - this.initAllListeners(); this.addAttributeChangeListener(listener); diff --git a/sonar-project.properties b/sonar-project.properties index 05253b02f..f3ad57a2d 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -3,7 +3,7 @@ sonar.projectKey=finereport.design # this is the name displayed in the SonarQube UI sonar.projectName=finereport.design sonar.projectVersion=1.0 -sonar.branch=dev +sonar.branch=master # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. # Since SonarQube 4.2, this property is optional if sonar.modules is set. From e3662609221976276629a71c52500c11b923eba0 Mon Sep 17 00:00:00 2001 From: neil Date: Fri, 29 Jul 2016 11:15:23 +0800 Subject: [PATCH 43/46] =?UTF-8?q?=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sonar-project.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sonar-project.properties b/sonar-project.properties index f3ad57a2d..b94077d28 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,4 +1,4 @@ -# must be unique in a given SonarQube instance +# must be unique in a given SonarQube instance sonar.projectKey=finereport.design # this is the name displayed in the SonarQube UI sonar.projectName=finereport.design From 4d8a43ba7fa639f65fc9575cc18a5bd38b86941f Mon Sep 17 00:00:00 2001 From: neil Date: Fri, 29 Jul 2016 11:16:50 +0800 Subject: [PATCH 44/46] 1 --- sonar-project.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sonar-project.properties b/sonar-project.properties index b94077d28..f3ad57a2d 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,4 +1,4 @@ -# must be unique in a given SonarQube instance +# must be unique in a given SonarQube instance sonar.projectKey=finereport.design # this is the name displayed in the SonarQube UI sonar.projectName=finereport.design From e95acb79babdaa1500535731b29e438782df0593 Mon Sep 17 00:00:00 2001 From: fangdong sun Date: Fri, 29 Jul 2016 12:55:34 +0800 Subject: [PATCH 45/46] =?UTF-8?q?=E4=B8=8A=E4=BC=A0design=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E7=9A=843=E4=B8=AAbuild.gradle=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/build.gradle | 61 ++++++++++++++++++++++++++++++++++ designer_chart/build.gradle | 57 ++++++++++++++++++++++++++++++++ designer_form/build.gradle | 65 +++++++++++++++++++++++++++++++++++++ 3 files changed, 183 insertions(+) create mode 100644 designer_base/build.gradle create mode 100644 designer_chart/build.gradle create mode 100644 designer_form/build.gradle diff --git a/designer_base/build.gradle b/designer_base/build.gradle new file mode 100644 index 000000000..319cc17f2 --- /dev/null +++ b/designer_base/build.gradle @@ -0,0 +1,61 @@ + +apply plugin: 'java' +tasks.withType(JavaCompile){ + options.encoding = 'UTF-8' +} +version='8.0' + +jar{ + baseName='fr-designer-core' +} + + +def srcDir="${System.getenv()['JENKINS_HOME']}/workspace/design" +def libDir="${System.getenv()['JENKINS_HOME']}/workspace/lib" + +sourceSets{ + main{ + java{ + srcDirs=["${srcDir}/designer_base/src"] + } + } +} + + +dependencies{ +compile fileTree(dir:'../../',include:'**/*.jar') +compile fileTree(dir:libDir,include:'*.jar') +compile fileTree(dir:"${libDir}/jetty",include:'*.jar') + testCompile 'junit:junit:4.12' +} + +task copyFile(type:Copy,dependsOn:compileJava){ + copy{ + from ("${srcDir}/designer_base/src"){ + exclude '**/*.java' + } + into 'build/classes/main' + } + +} + + +//ѹĿеjsļ +task compressJS{ + ant.taskdef(name:'yuicompress',classname:'com.yahoo.platform.yui.compressor.YUICompressTask'){ + classpath { + fileset(dir:'../../lib',includes:'*.jar') + } + } + ant.yuicompress(linebreak:"500",warn:"false", munge:"yes",preserveallsemicolons:"false", , charset:"utf-8",encoding:"utf-8",outputfolder:'build/classes/main'){ + fileset (dir:"${srcDir}/designer_base/src"){ + include (name:'**/*.js') + + } + + } +} +jar.dependsOn compressJS + + + diff --git a/designer_chart/build.gradle b/designer_chart/build.gradle new file mode 100644 index 000000000..2a667bf82 --- /dev/null +++ b/designer_chart/build.gradle @@ -0,0 +1,57 @@ + +apply plugin: 'java' +tasks.withType(JavaCompile){ + options.encoding = 'UTF-8' +} + +version='8.0' + +def srcDir="${System.getenv()['JENKINS_HOME']}/workspace/design" +def libDir="${System.getenv()['JENKINS_HOME']}/workspace/lib" + + +jar{ + baseName='fr-designer-chart' +} + +sourceSets{ + main{ + java{ + srcDirs=["${srcDir}/designer_chart/src"] + } + } +} +dependencies{ +compile fileTree(dir:'../../',include:'**/*.jar') +compile fileTree(dir:libDir,include:'*.jar') +compile fileTree(dir:"${libDir}/jetty",include:'*.jar') + testCompile 'junit:junit:4.12' +} + +task copyFile(type:Copy,dependsOn:compileJava){ + copy{ + from ("${srcDir}/designer_chart/src"){ + exclude '**/*.java' + } + into 'build/classes/main' + } + +} + +//ѹĿеjsļ +task compressJS{ + ant.taskdef(name:'yuicompress',classname:'com.yahoo.platform.yui.compressor.YUICompressTask'){ + classpath { + fileset(dir:'../../lib',includes:'*.jar') + } + } + ant.yuicompress(linebreak:"500",warn:"false", munge:"yes",preserveallsemicolons:"false", , charset:"utf-8",encoding:"utf-8",outputfolder:'build/classes/main'){ + fileset (dir:"${srcDir}/designer_chart/src"){ + include (name:'**/*.js') + + } + + } +} +jar.dependsOn compressJS + diff --git a/designer_form/build.gradle b/designer_form/build.gradle new file mode 100644 index 000000000..1a87cbf95 --- /dev/null +++ b/designer_form/build.gradle @@ -0,0 +1,65 @@ + +apply plugin: 'java' +tasks.withType(JavaCompile){ + options.encoding = 'UTF-8' +} + +version='8.0' + +def srcDir="${System.getenv()['JENKINS_HOME']}/workspace/design" +def libDir="${System.getenv()['JENKINS_HOME']}/workspace/lib" + + +jar{ + baseName='fr-designer-report' +} + +sourceSets{ + main{ + java{ + srcDirs=["${srcDir}/designer/src", +"${srcDir}/designer_form/src"] + } + } +} +dependencies{ +compile fileTree(dir:'../../',include:'**/*.jar') +compile fileTree(dir:libDir,include:'*.jar') +compile fileTree(dir:"${libDir}/jetty",include:'*.jar') + testCompile 'junit:junit:4.12' +} + + +task copyFile(type:Copy,dependsOn:compileJava){ + copy{ + from ("${srcDir}/designer/src"){ + exclude '**/*.java' + } + from ("${srcDir}/designer_form/src") + into ('build/classes/main') + } + +} + + +//ѹĿеjsļ +task compressJS{ + ant.taskdef(name:'yuicompress',classname:'com.yahoo.platform.yui.compressor.YUICompressTask'){ + classpath { + fileset(dir:'../../lib',includes:'*.jar') + } + } + ant.yuicompress(linebreak:"500",warn:"false", munge:"yes",preserveallsemicolons:"false", , charset:"utf-8",encoding:"utf-8",outputfolder:'build/classes/main'){ + fileset (dir:"${srcDir}/designer/src"){ + include (name:'**/*.js') + + } + fileset (dir:"${srcDir}/designer_form/src"){ + include (name:'**/*.js') + + } + + } +} +jar.dependsOn compressJS + From c3226b26590c2a64070993cd3eb2b8358ce03b74 Mon Sep 17 00:00:00 2001 From: zhouping Date: Sun, 31 Jul 2016 22:40:30 +0800 Subject: [PATCH 46/46] =?UTF-8?q?=E7=BB=9D=E5=AF=B9=E5=B8=83=E5=B1=80?= =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=8A=9F=E8=83=BD2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/beans/location/Absorptionline.java | 192 +++++++++++------- .../fr/design/beans/location/MoveUtils.java | 2 + 2 files changed, 119 insertions(+), 75 deletions(-) diff --git a/designer_base/src/com/fr/design/beans/location/Absorptionline.java b/designer_base/src/com/fr/design/beans/location/Absorptionline.java index a0ff0d0e4..189c7e046 100644 --- a/designer_base/src/com/fr/design/beans/location/Absorptionline.java +++ b/designer_base/src/com/fr/design/beans/location/Absorptionline.java @@ -14,6 +14,7 @@ public class Absorptionline { // 2.(x,y)(x±2根号3,y-2)(x±2根号3,y+2) private static int RECTANGLE_OFFSET_X = 2; private static int RECTANGLE_OFFSET_Y = 3; + private static int WIDGET_DISTANCE_MIN = 8; //控件周围八个拖拽框的大小 private static int RESIZE_BOX_SIZE = 5; @@ -238,114 +239,155 @@ public class Absorptionline { //朝向上方的等距线 private void paintTopEquidistantLine(Graphics g){ - int x1[] = { + int x[] = { equidistantStart.x + equidistantStart.width / 2, equidistantStart.x + equidistantStart.width / 2 - RECTANGLE_OFFSET_X, equidistantStart.x + equidistantStart.width / 2 + RECTANGLE_OFFSET_X }; - int y1[] = { - top, - top + RECTANGLE_OFFSET_Y, - top + RECTANGLE_OFFSET_Y - }; - int x2[] = { - equidistantStart.x + equidistantStart.width / 2, - equidistantStart.x + equidistantStart.width / 2 + RECTANGLE_OFFSET_X, - equidistantStart.x + equidistantStart.width / 2 - RECTANGLE_OFFSET_X - }; - int y2[] = { - equidistantStart.y - RESIZE_BOX_SIZE, - equidistantStart.y - RESIZE_BOX_SIZE - RECTANGLE_OFFSET_Y, - equidistantStart.y - RESIZE_BOX_SIZE - RECTANGLE_OFFSET_Y - }; - g.fillPolygon(x1, y1, 3); - g.fillPolygon(x2, y2, 3); + int[] y1, y2; + if (equidistantStart.y - top > WIDGET_DISTANCE_MIN) { + y1 = new int[] { + top, + top + RECTANGLE_OFFSET_Y, + top + RECTANGLE_OFFSET_Y + }; + y2 = new int[]{ + equidistantStart.y - RESIZE_BOX_SIZE, + equidistantStart.y - RESIZE_BOX_SIZE - RECTANGLE_OFFSET_Y, + equidistantStart.y - RESIZE_BOX_SIZE - RECTANGLE_OFFSET_Y + }; + } + else{ + y1 = new int[] { + top, + top - RECTANGLE_OFFSET_Y, + top - RECTANGLE_OFFSET_Y + }; + y2 = new int[] { + equidistantStart.y, + equidistantStart.y + RECTANGLE_OFFSET_Y, + equidistantStart.y + RECTANGLE_OFFSET_Y + }; + } + g.fillPolygon(x, y1, 3); + g.fillPolygon(x, y2, 3); GraphHelper.drawLine(g, equidistantStart.x + equidistantStart.width / 2, top, equidistantStart.x + equidistantStart.width / 2, equidistantStart.y - RESIZE_BOX_SIZE); } //朝向左侧的等距线 private void paintLeftEquidistantLine(Graphics g){ - int x1[] = { - left, - left + RECTANGLE_OFFSET_Y, - left + RECTANGLE_OFFSET_Y, - }; - int y1[] = { + int y[] = { equidistantStart.y + equidistantStart.height / 2, equidistantStart.y + equidistantStart.height / 2 - RECTANGLE_OFFSET_X, equidistantStart.y + equidistantStart.height / 2 + RECTANGLE_OFFSET_X, }; - int x2[] = { - equidistantStart.x - RESIZE_BOX_SIZE, - equidistantStart.x - RESIZE_BOX_SIZE - RECTANGLE_OFFSET_Y, - equidistantStart.x - RESIZE_BOX_SIZE - RECTANGLE_OFFSET_Y - }; - int y2[] = { - equidistantStart.y + equidistantStart.height / 2, - equidistantStart.y + equidistantStart.height / 2 + RECTANGLE_OFFSET_X, - equidistantStart.y + equidistantStart.height / 2 - RECTANGLE_OFFSET_X - }; - g.fillPolygon(x1, y1, 3); - g.fillPolygon(x2, y2, 3); + int[] x1, x2; + if (equidistantStart.x - left > WIDGET_DISTANCE_MIN) { + x1 = new int[] { + left, + left + RECTANGLE_OFFSET_Y, + left + RECTANGLE_OFFSET_Y, + }; + + x2 = new int[] { + equidistantStart.x - RESIZE_BOX_SIZE, + equidistantStart.x - RESIZE_BOX_SIZE - RECTANGLE_OFFSET_Y, + equidistantStart.x - RESIZE_BOX_SIZE - RECTANGLE_OFFSET_Y + }; + } + else{ + x1 = new int[] { + left, + left - RECTANGLE_OFFSET_Y, + left - RECTANGLE_OFFSET_Y, + }; + x2 = new int[] { + equidistantStart.x, + equidistantStart.x + RECTANGLE_OFFSET_Y, + equidistantStart.x + RECTANGLE_OFFSET_Y + }; + } + g.fillPolygon(x1, y, 3); + g.fillPolygon(x2, y, 3); GraphHelper.drawLine(g, left, equidistantStart.y + equidistantStart.height / 2, - equidistantStart.x - RESIZE_BOX_SIZE, equidistantStart.y + equidistantStart.height / 2); + equidistantStart.x, equidistantStart.y + equidistantStart.height / 2); } //朝向下方的等距线 private void paintBottomEquidistantLine(Graphics g) { - int x1[] = { + int x[] = { equidistantStart.x + equidistantStart.width / 2, equidistantStart.x + equidistantStart.width / 2 + RECTANGLE_OFFSET_X, equidistantStart.x + equidistantStart.width / 2 - RECTANGLE_OFFSET_X, }; - int y1[] = { - equidistantStart.y + equidistantStart.height + RESIZE_BOX_SIZE, - equidistantStart.y + equidistantStart.height + RESIZE_BOX_SIZE + RECTANGLE_OFFSET_Y, - equidistantStart.y + equidistantStart.height + RESIZE_BOX_SIZE + RECTANGLE_OFFSET_Y, - }; - int x2[] = { - equidistantStart.x + equidistantStart.width / 2, - equidistantStart.x + equidistantStart.width / 2 + RECTANGLE_OFFSET_X, - equidistantStart.x + equidistantStart.width / 2 - RECTANGLE_OFFSET_X - }; - int y2[] = { - bottom, - bottom - RECTANGLE_OFFSET_Y, - bottom - RECTANGLE_OFFSET_Y - }; - g.fillPolygon(x1, y1, 3); - g.fillPolygon(x2, y2, 3); + int[] y1, y2; + if (bottom - equidistantStart.y + equidistantStart.height > WIDGET_DISTANCE_MIN) { + y1 = new int[] { + equidistantStart.y + equidistantStart.height + RESIZE_BOX_SIZE, + equidistantStart.y + equidistantStart.height + RESIZE_BOX_SIZE + RECTANGLE_OFFSET_Y, + equidistantStart.y + equidistantStart.height + RESIZE_BOX_SIZE + RECTANGLE_OFFSET_Y, + }; + y2 = new int[] { + bottom, + bottom - RECTANGLE_OFFSET_Y, + bottom - RECTANGLE_OFFSET_Y + }; + } + else{ + y1 = new int[] { + equidistantStart.y + equidistantStart.height, + equidistantStart.y + equidistantStart.height - RECTANGLE_OFFSET_Y, + equidistantStart.y + equidistantStart.height - RECTANGLE_OFFSET_Y, + }; + y2 = new int[] { + bottom, + bottom + RECTANGLE_OFFSET_Y, + bottom + RECTANGLE_OFFSET_Y + }; + } + g.fillPolygon(x, y1, 3); + g.fillPolygon(x, y2, 3); GraphHelper.drawLine(g, - equidistantStart.x + equidistantStart.width / 2, equidistantStart.y + equidistantStart.height + RESIZE_BOX_SIZE, + equidistantStart.x + equidistantStart.width / 2, equidistantStart.y + equidistantStart.height, equidistantStart.x + equidistantStart.width / 2, bottom); } //朝向右侧的等距线 private void paintRightEquidistantLine(Graphics g){ - int x1[] = { - right, - right - 3, - right - 3 - }; - int y1[] = { + int y[] = { equidistantStart.y + equidistantStart.height / 2, equidistantStart.y + equidistantStart.height / 2 - RECTANGLE_OFFSET_X, equidistantStart.y + equidistantStart.height / 2 + RECTANGLE_OFFSET_X }; - int x2[] = { - equidistantStart.x + equidistantStart.width + RESIZE_BOX_SIZE, - equidistantStart.x + equidistantStart.width + RESIZE_BOX_SIZE + RECTANGLE_OFFSET_Y, - equidistantStart.x + equidistantStart.width + RESIZE_BOX_SIZE + RECTANGLE_OFFSET_Y - }; - int y2[] = { - equidistantStart.y + equidistantStart.height / 2, - equidistantStart.y + equidistantStart.height / 2 - RECTANGLE_OFFSET_X, - equidistantStart.y + equidistantStart.height / 2 + RECTANGLE_OFFSET_X, - }; - g.fillPolygon(x1, y1, 3); - g.fillPolygon(x2, y2, 3); + int[] x1, x2; + if(right - equidistantStart.x > WIDGET_DISTANCE_MIN) { + x1 = new int[]{ + right, + right - RECTANGLE_OFFSET_Y, + right - RECTANGLE_OFFSET_Y + }; + x2 = new int[]{ + equidistantStart.x + equidistantStart.width + RESIZE_BOX_SIZE, + equidistantStart.x + equidistantStart.width + RESIZE_BOX_SIZE + RECTANGLE_OFFSET_Y, + equidistantStart.x + equidistantStart.width + RESIZE_BOX_SIZE + RECTANGLE_OFFSET_Y + }; + } + else{ + x1 = new int[]{ + right, + right + RECTANGLE_OFFSET_Y, + right + RECTANGLE_OFFSET_Y + }; + x2 = new int[]{ + equidistantStart.x + equidistantStart.width, + equidistantStart.x + equidistantStart.width - RECTANGLE_OFFSET_Y, + equidistantStart.x + equidistantStart.width - RECTANGLE_OFFSET_Y + }; + } + g.fillPolygon(x1, y, 3); + g.fillPolygon(x2, y, 3); GraphHelper.drawLine(g, - equidistantStart.x + equidistantStart.width + RESIZE_BOX_SIZE, equidistantStart.y + equidistantStart.height / 2, + equidistantStart.x + equidistantStart.width, equidistantStart.y + equidistantStart.height / 2, right, equidistantStart.y + equidistantStart.height / 2); } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/beans/location/MoveUtils.java b/designer_base/src/com/fr/design/beans/location/MoveUtils.java index e0bed7ca1..18c282cdc 100644 --- a/designer_base/src/com/fr/design/beans/location/MoveUtils.java +++ b/designer_base/src/com/fr/design/beans/location/MoveUtils.java @@ -468,6 +468,7 @@ public class MoveUtils { equidistantLines.add(equidistantLines1[0]); equidistantLines.add(equidistantLines1[2]); pEquidistantY.palce = operatingRectangle.y - offset / 2; + operatingRectangle.y = pEquidistantY.palce; } } if (equidistantLines1[1] != null && equidistantLines1[3] != null){//left, right @@ -477,6 +478,7 @@ public class MoveUtils { equidistantLines.add(equidistantLines1[1]); equidistantLines.add(equidistantLines1[3]); pEquidistantX.palce = operatingRectangle.x - offset / 2; + operatingRectangle.x = pEquidistantX.palce; } } }