From a98c5002ed0322635032b4f31ff38581fa107037 Mon Sep 17 00:00:00 2001 From: plough Date: Wed, 29 Nov 2017 16:16:14 +0800 Subject: [PATCH 01/18] =?UTF-8?q?REPORT-4634=20=E7=BB=84=E4=BB=B6=E5=8F=A0?= =?UTF-8?q?=E5=8A=A0=E4=BD=93=E9=AA=8C=E4=BC=98=E5=8C=96=3D>1=E3=80=812=20?= =?UTF-8?q?=E5=88=9D=E6=AD=A5=E6=A1=86=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/ComponentTree.java | 17 ++++++++++------- .../com/fr/design/mainframe/FormDesigner.java | 2 ++ .../design/mainframe/FormHierarchyTreePane.java | 15 +++++++++------ 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/ComponentTree.java b/designer_form/src/com/fr/design/mainframe/ComponentTree.java index 1ceab13c0a..3aea40196b 100644 --- a/designer_form/src/com/fr/design/mainframe/ComponentTree.java +++ b/designer_form/src/com/fr/design/mainframe/ComponentTree.java @@ -1,6 +1,6 @@ package com.fr.design.mainframe; -import java.awt.Component; +import java.awt.*; import java.util.ArrayList; import javax.swing.DropMode; @@ -12,6 +12,7 @@ import com.fr.design.constants.UIConstants; import com.fr.design.designer.creator.*; import com.fr.design.designer.treeview.ComponentTreeCellRenderer; import com.fr.design.designer.treeview.ComponentTreeModel; +import com.fr.design.gui.itree.UITreeUI; import com.fr.stable.StringUtils; public class ComponentTree extends JTree { @@ -31,6 +32,7 @@ public class ComponentTree extends JTree { this.refreshTreeRoot(); addTreeSelectionListener(designer); setEditable(true); + setUI(new UITreeUI()); } public FormDesigner getDesigner() { @@ -48,7 +50,12 @@ public class ComponentTree extends JTree { this.setModel(model); } - + public void setSelectionPath(TreePath path) { + // 不管点击哪一项,都要先退出编辑状态(图表、报表块、绝对布局、tab块) +// getSelectionModel().setSelectionPath(path); + designer.stopEditing(); + super.setSelectionPath(path); + } /** @@ -58,11 +65,7 @@ public class ComponentTree extends JTree { */ @Override public boolean isPathEditable(TreePath path) { - Object object = path.getLastPathComponent(); - if (object == designer.getRootComponent()) { - return false; - } - return super.isPathEditable(path); + return false; } /** diff --git a/designer_form/src/com/fr/design/mainframe/FormDesigner.java b/designer_form/src/com/fr/design/mainframe/FormDesigner.java index aa2d4db1af..6b054c4b60 100644 --- a/designer_form/src/com/fr/design/mainframe/FormDesigner.java +++ b/designer_form/src/com/fr/design/mainframe/FormDesigner.java @@ -1236,6 +1236,8 @@ public class FormDesigner extends TargetComponent
implements TreeSelection @Override public void stopEditing() { // do nothing + editingMouseListener.stopEditing(); +// editingMouseListener.processTopLayoutMouseClick() } /** diff --git a/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java b/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java index 3d7a3ec50f..603ef966b0 100644 --- a/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java +++ b/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java @@ -13,6 +13,7 @@ import com.fr.design.designer.beans.actions.FormUndoableAction; import com.fr.design.designer.creator.XWAbsoluteBodyLayout; import com.fr.design.gui.controlpane.ShortCut4JControlPane; import com.fr.design.gui.controlpane.UIListControlPane; +import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.itoolbar.UIToolBarUI; import com.fr.design.gui.itoolbar.UIToolbar; import com.fr.design.mainframe.widget.UITreeComboBox; @@ -43,7 +44,7 @@ public class FormHierarchyTreePane extends FormDockView implements HierarchyTree private ShortCut4JControlPane[] shorts; private ComponentTree componentTree; - private UITreeComboBox treeComboBox; +// private UITreeComboBox treeComboBox; private ChangeNameAction changeVarNameAction; public static FormHierarchyTreePane getInstance() { @@ -96,9 +97,9 @@ public class FormHierarchyTreePane extends FormDockView implements HierarchyTree if(this.componentTree != null) { this.componentTree.removeAll(); } - if(this.treeComboBox != null) { - this.treeComboBox.removeAll(); - } +// if(this.treeComboBox != null) { +// this.treeComboBox.removeAll(); +// } if (formDesigner == null) { clearDockingView(); return; @@ -129,8 +130,10 @@ public class FormHierarchyTreePane extends FormDockView implements HierarchyTree headPane.add(getToolBarPane(), BorderLayout.EAST); widgetPane.add(headPane, BorderLayout.CENTER); - treeComboBox = new UITreeComboBox(componentTree); - widgetPane.add(treeComboBox, BorderLayout.SOUTH); + UIScrollPane scrollPane = new UIScrollPane(componentTree); + scrollPane.setPreferredSize(new Dimension(210, 170)); +// treeComboBox = new UITreeComboBox(componentTree); + widgetPane.add(scrollPane, BorderLayout.SOUTH); return widgetPane; } From 26a7a453f9ef1f6d34d386e1b83f6fc953549b8d Mon Sep 17 00:00:00 2001 From: plough Date: Wed, 29 Nov 2017 17:16:57 +0800 Subject: [PATCH 02/18] =?UTF-8?q?REPORT-4634=20=E7=BB=84=E4=BB=B6=E5=8F=A0?= =?UTF-8?q?=E5=8A=A0=E4=BD=93=E9=AA=8C=E4=BC=98=E5=8C=96=3D>1=3D>=E7=82=B9?= =?UTF-8?q?=E5=87=BB=E6=8E=A7=E4=BB=B6=E6=A0=91=E9=80=80=E5=87=BA=E7=BB=9D?= =?UTF-8?q?=E5=AF=B9=E5=B8=83=E5=B1=80=E7=BC=96=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/mainframe/ComponentTree.java | 2 +- .../src/com/fr/design/mainframe/EditingMouseListener.java | 2 +- designer_form/src/com/fr/design/mainframe/FormDesigner.java | 6 +++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/ComponentTree.java b/designer_form/src/com/fr/design/mainframe/ComponentTree.java index 3aea40196b..8be8616487 100644 --- a/designer_form/src/com/fr/design/mainframe/ComponentTree.java +++ b/designer_form/src/com/fr/design/mainframe/ComponentTree.java @@ -53,7 +53,7 @@ public class ComponentTree extends JTree { public void setSelectionPath(TreePath path) { // 不管点击哪一项,都要先退出编辑状态(图表、报表块、绝对布局、tab块) // getSelectionModel().setSelectionPath(path); - designer.stopEditing(); + designer.stopEditing(path); super.setSelectionPath(path); } diff --git a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java index 61323f4b7e..86da3586b1 100644 --- a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java +++ b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java @@ -489,7 +489,7 @@ public class EditingMouseListener extends MouseInputAdapter { return false; } - private XCreator processTopLayoutMouseClick(XCreator creator) { + public XCreator processTopLayoutMouseClick(XCreator creator) { XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer(creator).getTopLayout(); if (topLayout != null) { if (clickTopLayout != null && !clickTopLayout.equals(topLayout) && !isCreatorInLayout(clickTopLayout, diff --git a/designer_form/src/com/fr/design/mainframe/FormDesigner.java b/designer_form/src/com/fr/design/mainframe/FormDesigner.java index 6b054c4b60..5b9fea9acb 100644 --- a/designer_form/src/com/fr/design/mainframe/FormDesigner.java +++ b/designer_form/src/com/fr/design/mainframe/FormDesigner.java @@ -1236,8 +1236,12 @@ public class FormDesigner extends TargetComponent implements TreeSelection @Override public void stopEditing() { // do nothing + } + + public void stopEditing(TreePath path) { + // do nothing editingMouseListener.stopEditing(); -// editingMouseListener.processTopLayoutMouseClick() + editingMouseListener.processTopLayoutMouseClick((XCreator) path.getLastPathComponent()); } /** From 43c213eb94f26d97480faeb0e354ed9b3d08b285 Mon Sep 17 00:00:00 2001 From: plough Date: Wed, 29 Nov 2017 17:18:16 +0800 Subject: [PATCH 03/18] =?UTF-8?q?REPORT-4634=20=E7=BB=84=E4=BB=B6=E5=8F=A0?= =?UTF-8?q?=E5=8A=A0=E4=BD=93=E9=AA=8C=E4=BC=98=E5=8C=96=3D>1=3D>=E7=82=B9?= =?UTF-8?q?=E5=87=BB=E6=8E=A7=E4=BB=B6=E6=97=B6=EF=BC=8C=E6=8E=A7=E4=BB=B6?= =?UTF-8?q?=E6=A0=91=E7=9A=84=E9=80=89=E9=A1=B9=E8=B7=9F=E7=9D=80=E5=8F=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/FormHierarchyTreePane.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java b/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java index 603ef966b0..e49b3ceb84 100644 --- a/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java +++ b/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java @@ -10,6 +10,8 @@ import com.fr.design.actions.UndoableAction; import com.fr.design.actions.UpdateAction; import com.fr.design.designer.beans.actions.ChangeNameAction; import com.fr.design.designer.beans.actions.FormUndoableAction; +import com.fr.design.designer.beans.events.DesignerEditListener; +import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.creator.XWAbsoluteBodyLayout; import com.fr.design.gui.controlpane.ShortCut4JControlPane; import com.fr.design.gui.controlpane.UIListControlPane; @@ -105,6 +107,12 @@ public class FormHierarchyTreePane extends FormDockView implements HierarchyTree return; } componentTree = new ComponentTree(formDesigner); + formDesigner.addDesignerEditListener(new DesignerEditListener() { + @Override + public void fireCreatorModified(DesignerEvent evt) { + componentTree.setAndScrollSelectionPath(componentTree.getSelectedTreePath()); + } + }); ComponentTreeModel treeModel = (ComponentTreeModel) componentTree.getModel(); XCreator root = (XCreator)treeModel.getRoot(); From dc75b01e11c44ccfa103802f6ea6178d3e305c35 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 1 Dec 2017 14:24:46 +0800 Subject: [PATCH 04/18] =?UTF-8?q?REPORT-4634=20=E7=BB=84=E4=BB=B6=E5=8F=A0?= =?UTF-8?q?=E5=8A=A0=E4=BD=93=E9=AA=8C=E4=BC=98=E5=8C=96=3D>1=3D>=E6=8E=A7?= =?UTF-8?q?=E4=BB=B6=E6=A0=91=E4=B8=AD=E7=82=B9=E5=87=BB=E5=9B=BE=E8=A1=A8?= =?UTF-8?q?=E5=9D=97=E8=87=AA=E8=BA=AB=E3=80=81=E7=BB=9D=E5=AF=B9=E5=B8=83?= =?UTF-8?q?=E5=B1=80=E8=87=AA=E8=BA=AB=EF=BC=8C=E5=8F=AF=E9=80=80=E5=87=BA?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/designer/beans/models/SelectionModel.java | 3 +++ .../com/fr/design/designer/creator/XChartEditor.java | 5 +++++ .../src/com/fr/design/designer/creator/XCreator.java | 10 +++++++++- .../com/fr/design/mainframe/EditingMouseListener.java | 9 +++++++++ .../src/com/fr/design/mainframe/FormDesigner.java | 6 +++++- 5 files changed, 31 insertions(+), 2 deletions(-) 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 e805ced3ca..e0236800eb 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 @@ -68,7 +68,10 @@ public class SelectionModel { } // 获取e所在的组件 XCreator comp = designer.getComponentAt(e); + selectACreator(comp); + } + public void selectACreator(XCreator comp) { //布局组件的顶层布局如不可编辑,要获取其顶层布局 XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer(comp).getTopLayout(); if (topLayout != null && !topLayout.isEditable()) { 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 8e108ec945..750e2ae38f 100644 --- a/designer_form/src/com/fr/design/designer/creator/XChartEditor.java +++ b/designer_form/src/com/fr/design/designer/creator/XChartEditor.java @@ -76,6 +76,11 @@ public class XChartEditor extends XBorderStyleWidgetCreator { return true; } + @Override + public void stopEditing() { + isEditing = false; + } + /** * 得到属性名 * @return 属性名 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 b46d9d2335..99f3267d04 100644 --- a/designer_form/src/com/fr/design/designer/creator/XCreator.java +++ b/designer_form/src/com/fr/design/designer/creator/XCreator.java @@ -653,7 +653,15 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo * */ public void firePropertyChange(){ - + // do nothing } + /** + * 有的控件是有编辑状态的,给一个退出编辑的接口 + * + */ + public void stopEditing() { + // do nothing + } + } \ 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 86da3586b1..7d606b66c8 100644 --- a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java +++ b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java @@ -489,6 +489,14 @@ public class EditingMouseListener extends MouseInputAdapter { return false; } + // 点击控件树,会触发此方法。如果在设计器中选中组件,则直接走 processTopLayoutMouseClick + public void stopEditTopLayout(XCreator creator) { + if (clickTopLayout != null && clickTopLayout.equals(creator)) { + clickTopLayout.setEditable(false); + } + processTopLayoutMouseClick(creator); + } + public XCreator processTopLayoutMouseClick(XCreator creator) { XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer(creator).getTopLayout(); if (topLayout != null) { @@ -589,6 +597,7 @@ public class EditingMouseListener extends MouseInputAdapter { } designer.invalidate(); designer.repaint(); + currentXCreator.stopEditing(); currentXCreator = null; currentEditor = null; return true; diff --git a/designer_form/src/com/fr/design/mainframe/FormDesigner.java b/designer_form/src/com/fr/design/mainframe/FormDesigner.java index 5b9fea9acb..e651310610 100644 --- a/designer_form/src/com/fr/design/mainframe/FormDesigner.java +++ b/designer_form/src/com/fr/design/mainframe/FormDesigner.java @@ -1240,8 +1240,12 @@ public class FormDesigner extends TargetComponent implements TreeSelection public void stopEditing(TreePath path) { // do nothing + XCreator comp = (XCreator) path.getLastPathComponent(); editingMouseListener.stopEditing(); - editingMouseListener.processTopLayoutMouseClick((XCreator) path.getLastPathComponent()); + editingMouseListener.stopEditTopLayout(comp); + + editingMouseListener.getSelectionModel().reset(); + editingMouseListener.getSelectionModel().selectACreator(comp); } /** From 093085b7ffdf03780fcbe18218f29011a32523de Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 1 Dec 2017 14:51:55 +0800 Subject: [PATCH 05/18] =?UTF-8?q?REPORT-4634=20=E7=BB=84=E4=BB=B6=E5=8F=A0?= =?UTF-8?q?=E5=8A=A0=E4=BD=93=E9=AA=8C=E4=BC=98=E5=8C=96=3D>1=3D>tabpane?= =?UTF-8?q?=20=E7=82=B9=E5=87=BB=E6=8E=A7=E4=BB=B6=E6=A0=91=E9=80=80?= =?UTF-8?q?=E5=87=BA=E7=BC=96=E8=BE=91=EF=BC=88tabpane=E7=9A=84=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E6=9C=89=E7=82=B9=E5=A5=87=E6=80=AA=EF=BC=8C=E5=85=88?= =?UTF-8?q?=E4=B8=8D=E7=AE=A1=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/mainframe/EditingMouseListener.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java index 7d606b66c8..cad41b913b 100644 --- a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java +++ b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java @@ -11,6 +11,7 @@ import com.fr.design.designer.beans.models.SelectionModel; import com.fr.design.designer.beans.models.StateModel; import com.fr.design.designer.creator.*; import com.fr.design.designer.creator.cardlayout.XCardSwitchButton; +import com.fr.design.designer.creator.cardlayout.XWCardLayout; import com.fr.design.form.util.XCreatorConstants; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.xpane.ToolTipEditor; @@ -491,7 +492,8 @@ public class EditingMouseListener extends MouseInputAdapter { // 点击控件树,会触发此方法。如果在设计器中选中组件,则直接走 processTopLayoutMouseClick public void stopEditTopLayout(XCreator creator) { - if (clickTopLayout != null && clickTopLayout.equals(creator)) { + boolean isTabpaneSelected = creator instanceof XWCardLayout && creator.getParent().equals(clickTopLayout); + if (clickTopLayout != null && (isTabpaneSelected || clickTopLayout.equals(creator))) { clickTopLayout.setEditable(false); } processTopLayoutMouseClick(creator); From 43bff61f5d11cb05fc8facc3a3aa23d20ebc6c30 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 1 Dec 2017 15:25:23 +0800 Subject: [PATCH 06/18] =?UTF-8?q?REPORT-4634=20=E7=BB=84=E4=BB=B6=E5=8F=A0?= =?UTF-8?q?=E5=8A=A0=E4=BD=93=E9=AA=8C=E4=BC=98=E5=8C=96=3D>2=3D>=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E6=B7=BB=E5=8A=A0=E6=8E=A7=E4=BB=B6=EF=BC=8C=E6=8E=A7?= =?UTF-8?q?=E4=BB=B6=E6=A0=91=E4=B8=8D=E5=88=B7=E6=96=B0=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/mainframe/FormHierarchyTreePane.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java b/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java index e49b3ceb84..8fab234da1 100644 --- a/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java +++ b/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java @@ -99,9 +99,6 @@ public class FormHierarchyTreePane extends FormDockView implements HierarchyTree if(this.componentTree != null) { this.componentTree.removeAll(); } -// if(this.treeComboBox != null) { -// this.treeComboBox.removeAll(); -// } if (formDesigner == null) { clearDockingView(); return; @@ -111,6 +108,7 @@ public class FormHierarchyTreePane extends FormDockView implements HierarchyTree @Override public void fireCreatorModified(DesignerEvent evt) { componentTree.setAndScrollSelectionPath(componentTree.getSelectedTreePath()); + componentTree.refreshUI(); } }); From 1053cd252e4f7c4f37040e63870e54f71c27c825 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 1 Dec 2017 16:12:01 +0800 Subject: [PATCH 07/18] =?UTF-8?q?REPORT-4634=20=E7=BB=84=E4=BB=B6=E5=8F=A0?= =?UTF-8?q?=E5=8A=A0=E4=BD=93=E9=AA=8C=E4=BC=98=E5=8C=96=3D>2=3D>=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E4=BA=A4=E4=BA=92=E5=92=8C=E8=A7=86=E8=A7=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../treeview/ComponentTreeCellRenderer.java | 2 +- .../fr/design/mainframe/ComponentTree.java | 8 +-- .../mainframe/FormHierarchyTreePane.java | 50 ++++++------------- .../parameter/ParameterPropertyPane.java | 2 +- 4 files changed, 21 insertions(+), 41 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java b/designer_form/src/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java index 103b372bc0..27db77a98c 100644 --- a/designer_form/src/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java +++ b/designer_form/src/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java @@ -36,7 +36,7 @@ public class ComponentTreeCellRenderer extends DefaultTreeCellRenderer { dim.height += 2; this.setSize(dim); this.setPreferredSize(dim); - this.setBackgroundNonSelectionColor(UIConstants.NORMAL_BACKGROUND); + this.setBackgroundNonSelectionColor(UIConstants.TREE_BACKGROUND); return this; } diff --git a/designer_form/src/com/fr/design/mainframe/ComponentTree.java b/designer_form/src/com/fr/design/mainframe/ComponentTree.java index 8be8616487..3d807845e9 100644 --- a/designer_form/src/com/fr/design/mainframe/ComponentTree.java +++ b/designer_form/src/com/fr/design/mainframe/ComponentTree.java @@ -3,8 +3,7 @@ package com.fr.design.mainframe; import java.awt.*; import java.util.ArrayList; -import javax.swing.DropMode; -import javax.swing.JTree; +import javax.swing.*; import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; @@ -19,10 +18,12 @@ public class ComponentTree extends JTree { private FormDesigner designer; private ComponentTreeModel model; + private static final int PADDING_LEFT = 10; + private static final int PADDING_TOP = 8; public ComponentTree(FormDesigner designer) { this.designer = designer; - this.setBackground(UIConstants.NORMAL_BACKGROUND); + this.setBackground(UIConstants.TREE_BACKGROUND); setRootVisible(true); setCellRenderer(new ComponentTreeCellRenderer()); getSelectionModel().setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION); @@ -33,6 +34,7 @@ public class ComponentTree extends JTree { addTreeSelectionListener(designer); setEditable(true); setUI(new UITreeUI()); + setBorder(BorderFactory.createEmptyBorder(PADDING_TOP, PADDING_LEFT, 0, 0)); } public FormDesigner getDesigner() { diff --git a/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java b/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java index 8fab234da1..d1be79289f 100644 --- a/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java +++ b/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java @@ -1,38 +1,27 @@ package com.fr.design.mainframe; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.util.ArrayList; - -import javax.swing.*; - +import com.fr.base.BaseUtils; import com.fr.design.actions.UndoableAction; -import com.fr.design.actions.UpdateAction; -import com.fr.design.designer.beans.actions.ChangeNameAction; -import com.fr.design.designer.beans.actions.FormUndoableAction; +import com.fr.design.constants.UIConstants; import com.fr.design.designer.beans.events.DesignerEditListener; import com.fr.design.designer.beans.events.DesignerEvent; +import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XWAbsoluteBodyLayout; +import com.fr.design.designer.creator.XWParameterLayout; +import com.fr.design.designer.treeview.ComponentTreeModel; import com.fr.design.gui.controlpane.ShortCut4JControlPane; -import com.fr.design.gui.controlpane.UIListControlPane; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.itoolbar.UIToolBarUI; import com.fr.design.gui.itoolbar.UIToolbar; -import com.fr.design.mainframe.widget.UITreeComboBox; - +import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.menu.ShortCut; import com.fr.design.menu.ToolBarDef; import com.fr.design.parameter.HierarchyTreePane; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XWParameterLayout; -import com.fr.design.designer.treeview.ComponentTreeModel; - -import com.fr.design.gui.ilable.UILabel; - - -import com.fr.base.BaseUtils; import com.fr.general.Inter; -import com.fr.design.layout.FRGUIPaneFactory; + +import javax.swing.*; +import java.awt.*; +import java.util.ArrayList; /** @@ -46,8 +35,6 @@ public class FormHierarchyTreePane extends FormDockView implements HierarchyTree private ShortCut4JControlPane[] shorts; private ComponentTree componentTree; -// private UITreeComboBox treeComboBox; - private ChangeNameAction changeVarNameAction; public static FormHierarchyTreePane getInstance() { return HOLDER.singleton; @@ -95,7 +82,6 @@ public class FormHierarchyTreePane extends FormDockView implements HierarchyTree public void refreshDockingView() { FormDesigner formDesigner = this.getEditingFormDesigner(); removeAll(); - changeVarNameAction = null; if(this.componentTree != null) { this.componentTree.removeAll(); } @@ -127,18 +113,13 @@ public class FormHierarchyTreePane extends FormDockView implements HierarchyTree shorts = createShortcuts(); JPanel widgetPane = new JPanel(); - widgetPane.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0)); + widgetPane.setBorder(BorderFactory.createLineBorder(UIConstants.RULER_LINE_COLOR)); widgetPane.setLayout(FRGUIPaneFactory.createBorderLayout()); - JPanel headPane = new JPanel(new BorderLayout()); - headPane.add(new UILabel(Inter.getLocText("FR-Designer-Selected_Widget") + " ", - SwingConstants.HORIZONTAL), BorderLayout.WEST); - headPane.add(getToolBarPane(), BorderLayout.EAST); - - widgetPane.add(headPane, BorderLayout.CENTER); + widgetPane.add(getToolBarPane(), BorderLayout.CENTER); UIScrollPane scrollPane = new UIScrollPane(componentTree); + scrollPane.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, UIConstants.RULER_LINE_COLOR)); scrollPane.setPreferredSize(new Dimension(210, 170)); -// treeComboBox = new UITreeComboBox(componentTree); widgetPane.add(scrollPane, BorderLayout.SOUTH); return widgetPane; } @@ -166,10 +147,7 @@ public class FormHierarchyTreePane extends FormDockView implements HierarchyTree protected ShortCut4JControlPane[] createShortcuts() { ArrayList shortCutList = new ArrayList<>(); FormDesigner designer = getEditingFormDesigner(); - if (changeVarNameAction == null) { - changeVarNameAction = new ChangeNameAction(designer); - } - shortCutList.add(new WidgetEnableShortCut(changeVarNameAction)); + for (Action action : designer.getActions()) { shortCutList.add(new WidgetEnableShortCut((UndoableAction)action)); } diff --git a/designer_form/src/com/fr/design/parameter/ParameterPropertyPane.java b/designer_form/src/com/fr/design/parameter/ParameterPropertyPane.java index c749333444..45593e99d3 100644 --- a/designer_form/src/com/fr/design/parameter/ParameterPropertyPane.java +++ b/designer_form/src/com/fr/design/parameter/ParameterPropertyPane.java @@ -118,7 +118,7 @@ public class ParameterPropertyPane extends JPanel{ private void setEditor(FormDesigner editor) { if (formHierarchyTreePaneWrapper == null) { formHierarchyTreePaneWrapper = new JPanel(new BorderLayout()); - formHierarchyTreePaneWrapper.setBorder(BorderFactory.createEmptyBorder(0, PADDING_MIDDLE, 0, PADDING_LARGE)); + formHierarchyTreePaneWrapper.setBorder(BorderFactory.createEmptyBorder(PADDING_MIDDLE, PADDING_MIDDLE, 0, PADDING_MIDDLE)); this.add(formHierarchyTreePaneWrapper, BorderLayout.SOUTH); } formHierarchyTreePaneWrapper.remove(FormHierarchyTreePane.getInstance()); From 1d1c48a68e36637b6fd45c1cbdb4a15f4b7f5320 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 4 Dec 2017 13:48:50 +0800 Subject: [PATCH 08/18] =?UTF-8?q?REPORT-4634=20=E7=BB=84=E4=BB=B6=E5=8F=A0?= =?UTF-8?q?=E5=8A=A0=E4=BD=93=E9=AA=8C=E4=BC=98=E5=8C=96=3D>2=3D>=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E7=82=B9=E5=87=BB=E6=8E=A7=E4=BB=B6=E6=A0=91=E7=9A=84?= =?UTF-8?q?npe=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/mainframe/ComponentTree.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/ComponentTree.java b/designer_form/src/com/fr/design/mainframe/ComponentTree.java index 3d807845e9..fc786c868f 100644 --- a/designer_form/src/com/fr/design/mainframe/ComponentTree.java +++ b/designer_form/src/com/fr/design/mainframe/ComponentTree.java @@ -18,6 +18,7 @@ public class ComponentTree extends JTree { private FormDesigner designer; private ComponentTreeModel model; + private UITreeUI uiTreeUI = new UITreeUI(); private static final int PADDING_LEFT = 10; private static final int PADDING_TOP = 8; @@ -33,7 +34,7 @@ public class ComponentTree extends JTree { this.refreshTreeRoot(); addTreeSelectionListener(designer); setEditable(true); - setUI(new UITreeUI()); + setUI(uiTreeUI); setBorder(BorderFactory.createEmptyBorder(PADDING_TOP, PADDING_LEFT, 0, 0)); } @@ -101,12 +102,10 @@ public class ComponentTree extends JTree { */ public void refreshUI() { updateUI(); + setUI(uiTreeUI); } - - - public TreePath[] getSelectedTreePath() { XCreator[] creators = designer.getSelectionModel().getSelection().getSelectedCreators(); TreePath[] paths = new TreePath[creators.length]; @@ -117,8 +116,6 @@ public class ComponentTree extends JTree { } - - /** *搜索指定名称的路径 * From fef4d560369138d49ea701336aa085d024be28af Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 4 Dec 2017 15:39:03 +0800 Subject: [PATCH 09/18] =?UTF-8?q?REPORT-4634=20=E7=BB=84=E4=BB=B6=E5=8F=A0?= =?UTF-8?q?=E5=8A=A0=E4=BD=93=E9=AA=8C=E4=BC=98=E5=8C=96=3D>3=3D>=E5=A2=9E?= =?UTF-8?q?=E5=8A=A04=E4=B8=AA=E6=8C=89=E9=92=AE=E3=80=81=E5=BF=AB?= =?UTF-8?q?=E6=8D=B7=E9=94=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/locale/designer.properties | 4 ++ .../design/locale/designer_en_US.properties | 4 ++ .../design/locale/designer_ja_JP.properties | 4 ++ .../design/locale/designer_ko_KR.properties | 4 ++ .../design/locale/designer_zh_CN.properties | 6 ++- .../design/locale/designer_zh_TW.properties | 4 ++ .../beans/actions/MoveDownAction.java | 37 +++++++++++++++++++ .../beans/actions/MoveToBottomAction.java | 37 +++++++++++++++++++ .../beans/actions/MoveToTopAction.java | 37 +++++++++++++++++++ .../designer/beans/actions/MoveUpAction.java | 36 ++++++++++++++++++ .../com/fr/design/mainframe/FormDesigner.java | 8 ++-- .../mainframe/FormHierarchyTreePane.java | 19 ++++++---- 12 files changed, 186 insertions(+), 14 deletions(-) create mode 100644 designer_form/src/com/fr/design/designer/beans/actions/MoveDownAction.java create mode 100644 designer_form/src/com/fr/design/designer/beans/actions/MoveToBottomAction.java create mode 100644 designer_form/src/com/fr/design/designer/beans/actions/MoveToTopAction.java create mode 100644 designer_form/src/com/fr/design/designer/beans/actions/MoveUpAction.java diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index bbed62b646..7db99aed93 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -2149,3 +2149,7 @@ FR-Designer_Provide_Choose_All= FR-Designer_Decimal_Places= FR-Designer_Env_Des_Https=If HTTPS is enabled or the HTTPS configuration (certificate path, HTTPS key) is modified, you must restart the designer to take effect. FR-Designer_Format_JavaScript=Format Code +FR-Designer_Move_Up=Move up +FR-Designer_Move_Down=Move down +FR-Designer_Move_To_Top=Move to top +FR-Designer_Move_To_Bottom=Move to bottom diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index e5608bf896..b9fee5a51c 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -2148,3 +2148,7 @@ FR-Designer_Provide_Choose_All= FR-Designer_Decimal_Places= FR-Designer_Env_Des_Https=If HTTPS is enabled or the HTTPS configuration (certificate path, HTTPS key) is modified, you must restart the designer to take effect. FR-Designer_Format_JavaScript=Format Code +FR-Designer_Move_Up=Move up +FR-Designer_Move_Down=Move down +FR-Designer_Move_To_Top=Move to top +FR-Designer_Move_To_Bottom=Move to bottom diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index bb5cfc1712..3fb5a00ec6 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -2149,3 +2149,7 @@ FR-Designer_Decimal_Places=\u5C0F\u6570\u67A0\u6570: FR-Base-Load_Resource_File=\u8A2D\u5B9A\u30D5\u30A1\u30A4\u30EB\u30ED\u30FC\u30C9 FR-Designer_Env_Des_Https= FR-Designer_Format_JavaScript=Format Code +FR-Designer_Move_Up= +FR-Designer_Move_Down= +FR-Designer_Move_To_Top= +FR-Designer_Move_To_Bottom= \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index d25124d98e..2ca30085aa 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -2149,3 +2149,7 @@ FR-Designer_Export_Background= FR-Designer_Print_Background= FR-Designer_Env_Des_Https= FR-Designer_Format_JavaScript=Format Code +FR-Designer_Move_Up= +FR-Designer_Move_Down= +FR-Designer_Move_To_Top= +FR-Designer_Move_To_Bottom= \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index f7b8d3a3cd..364c2515b7 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -2148,4 +2148,8 @@ FR-Designer_Sheet_Label_Page_Display_Position= FR-Designer_Provide_Choose_All= FR-Designer_Decimal_Places= FR-Designer_Env_Des_Https=\u82E5\u542F\u7528https\u6216\u4FEE\u6539https\u914D\u7F6E\uFF08\u8BC1\u4E66\u8DEF\u5F84\u3001https\u79D8\u94A5\uFF09\uFF0C\u5FC5\u987B\u91CD\u542F\u8BBE\u8BA1\u5668\u624D\u80FD\u751F\u6548\u3002 -FR-Designer_Format_JavaScript=\u683C\u5F0F\u5316\u4EE3\u7801 \ No newline at end of file +FR-Designer_Format_JavaScript=\u683C\u5F0F\u5316\u4EE3\u7801 +FR-Designer_Move_Up=\u4E0A\u79FB\u4E00\u5C42 +FR-Designer_Move_Down=\u4E0B\u79FB\u4E00\u5C42 +FR-Designer_Move_To_Top=\u7F6E\u4E8E\u9876\u5C42 +FR-Designer_Move_To_Bottom=\u7F6E\u4E8E\u5E95\u5C42 \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index 42817879ea..59602f2a98 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -2148,3 +2148,7 @@ FR-Designer_Provide_Choose_All= FR-Designer_Decimal_Places= FR-Designer_Env_Des_Https=\u82E5\u555F\u7528https\u6216\u4FEE\u6539https\u914D\u7F6E\uFF08\u8B49\u66F8\u8DEF\u5F91\u3001https\u7955\u9470\uFF09\uFF0C\u5FC5\u9808\u91CD\u555F\u8A2D\u8A08\u5668\u624D\u80FD\u751F\u6548\u3002 FR-Designer_Format_JavaScript=Format Code +FR-Designer_Move_Up=\u4E0A\u79FB\u4E00\u5C64 +FR-Designer_Move_Down=\u4E0B\u79FB\u4E00\u5C64 +FR-Designer_Move_To_Top=\u7F6E\u65BC\u9802\u5C64 +FR-Designer_Move_To_Bottom=\u7F6E\u65BC\u5E95\u5C64 diff --git a/designer_form/src/com/fr/design/designer/beans/actions/MoveDownAction.java b/designer_form/src/com/fr/design/designer/beans/actions/MoveDownAction.java new file mode 100644 index 0000000000..a9c22e5816 --- /dev/null +++ b/designer_form/src/com/fr/design/designer/beans/actions/MoveDownAction.java @@ -0,0 +1,37 @@ +package com.fr.design.designer.beans.actions; + +import com.fr.base.BaseUtils; +import com.fr.design.mainframe.FormDesigner; +import com.fr.general.Inter; + +import javax.swing.*; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; + +import static com.fr.design.gui.syntax.ui.rtextarea.RTADefaultInputMap.DEFAULT_MODIFIER; + +/** + * 下移一层(控件树内) + * Created by plough on 2017/12/4. + */ + +public class MoveDownAction extends FormEditAction { + + public MoveDownAction(FormDesigner t) { + super(t); + this.setName(Inter.getLocText("FR-Designer_Move_Down")); + this.setMnemonic('T'); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/down.png")); + this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_OPEN_BRACKET, DEFAULT_MODIFIER)); + } + + @Override + public boolean executeActionReturnUndoRecordNeeded() { + FormDesigner editPane = getEditingComponent(); + if (editPane == null) { + return false; + } + return editPane.cut(); + } + +} \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/actions/MoveToBottomAction.java b/designer_form/src/com/fr/design/designer/beans/actions/MoveToBottomAction.java new file mode 100644 index 0000000000..68b6e021ca --- /dev/null +++ b/designer_form/src/com/fr/design/designer/beans/actions/MoveToBottomAction.java @@ -0,0 +1,37 @@ +package com.fr.design.designer.beans.actions; + +import com.fr.base.BaseUtils; +import com.fr.design.mainframe.FormDesigner; +import com.fr.general.Inter; + +import javax.swing.*; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; + +import static com.fr.design.gui.syntax.ui.rtextarea.RTADefaultInputMap.DEFAULT_MODIFIER; + +/** + * 置于底层(控件树内) + * Created by plough on 2017/12/4. + */ + +public class MoveToBottomAction extends FormEditAction { + + public MoveToBottomAction(FormDesigner t) { + super(t); + this.setName(Inter.getLocText("FR-Designer_Move_To_Bottom")); + this.setMnemonic('T'); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/down.png")); + this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_OPEN_BRACKET, DEFAULT_MODIFIER + InputEvent.ALT_MASK)); + } + + @Override + public boolean executeActionReturnUndoRecordNeeded() { + FormDesigner editPane = getEditingComponent(); + if (editPane == null) { + return false; + } + return editPane.cut(); + } + +} \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/actions/MoveToTopAction.java b/designer_form/src/com/fr/design/designer/beans/actions/MoveToTopAction.java new file mode 100644 index 0000000000..8d588bc44c --- /dev/null +++ b/designer_form/src/com/fr/design/designer/beans/actions/MoveToTopAction.java @@ -0,0 +1,37 @@ +package com.fr.design.designer.beans.actions; + +import com.fr.base.BaseUtils; +import com.fr.design.mainframe.FormDesigner; +import com.fr.general.Inter; + +import javax.swing.*; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; + +import static com.fr.design.gui.syntax.ui.rtextarea.RTADefaultInputMap.DEFAULT_MODIFIER; + +/** + * 置于顶层(控件树内) + * Created by plough on 2017/12/4. + */ + +public class MoveToTopAction extends FormEditAction { + + public MoveToTopAction(FormDesigner t) { + super(t); + this.setName(Inter.getLocText("FR-Designer_Move_To_Top")); + this.setMnemonic('T'); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/up.png")); + this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_CLOSE_BRACKET, DEFAULT_MODIFIER + InputEvent.ALT_MASK)); + } + + @Override + public boolean executeActionReturnUndoRecordNeeded() { + FormDesigner editPane = getEditingComponent(); + if (editPane == null) { + return false; + } + return editPane.cut(); + } + +} \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/actions/MoveUpAction.java b/designer_form/src/com/fr/design/designer/beans/actions/MoveUpAction.java new file mode 100644 index 0000000000..1fd2194ce5 --- /dev/null +++ b/designer_form/src/com/fr/design/designer/beans/actions/MoveUpAction.java @@ -0,0 +1,36 @@ +package com.fr.design.designer.beans.actions; + +import com.fr.base.BaseUtils; +import com.fr.design.mainframe.FormDesigner; +import com.fr.general.Inter; + +import javax.swing.*; +import java.awt.event.KeyEvent; + +import static com.fr.design.gui.syntax.ui.rtextarea.RTADefaultInputMap.DEFAULT_MODIFIER; + +/** + * 同级上移一层(控件树内) + * Created by plough on 2017/12/4. + */ + +public class MoveUpAction extends FormEditAction { + + public MoveUpAction(FormDesigner t) { + super(t); + this.setName(Inter.getLocText("FR-Designer_Move_Up")); + this.setMnemonic('T'); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/up.png")); + this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_CLOSE_BRACKET, DEFAULT_MODIFIER)); + } + + @Override + public boolean executeActionReturnUndoRecordNeeded() { + FormDesigner editPane = getEditingComponent(); + if (editPane == null) { + return false; + } + return editPane.cut(); + } + +} \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/FormDesigner.java b/designer_form/src/com/fr/design/mainframe/FormDesigner.java index e651310610..9d6e81e4c3 100644 --- a/designer_form/src/com/fr/design/mainframe/FormDesigner.java +++ b/designer_form/src/com/fr/design/mainframe/FormDesigner.java @@ -7,10 +7,7 @@ import com.fr.design.DesignState; import com.fr.design.designer.TargetComponent; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.Painter; -import com.fr.design.designer.beans.actions.CopyAction; -import com.fr.design.designer.beans.actions.CutAction; -import com.fr.design.designer.beans.actions.FormDeleteAction; -import com.fr.design.designer.beans.actions.PasteAction; +import com.fr.design.designer.beans.actions.*; import com.fr.design.designer.beans.adapters.layout.FRParameterLayoutAdapter; import com.fr.design.designer.beans.events.CreatorEventListenerTable; import com.fr.design.designer.beans.events.DesignerEditListener; @@ -1129,7 +1126,8 @@ public class FormDesigner extends TargetComponent implements TreeSelection public Action[] getActions() { if (designerActions == null) { designerActions = new Action[]{new CutAction(this), new CopyAction(this), new PasteAction(this), - new FormDeleteAction(this)}; + new FormDeleteAction(this), new MoveToTopAction(this), new MoveToBottomAction(this), + new MoveUpAction(this), new MoveDownAction(this)}; } return designerActions; } diff --git a/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java b/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java index d1be79289f..e133e100ed 100644 --- a/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java +++ b/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java @@ -29,9 +29,10 @@ import java.util.ArrayList; */ public class FormHierarchyTreePane extends FormDockView implements HierarchyTreePane { - public static final int NODE_LENGTH = 2; - public static final int PARA = 0; - public static final int BODY = 1; + private static final int NODE_LENGTH = 2; + private static final int PARA = 0; + private static final int BODY = 1; + private static final int SHORTS_SEPARATOR_POS = 4; private ShortCut4JControlPane[] shorts; private ComponentTree componentTree; @@ -125,10 +126,6 @@ public class FormHierarchyTreePane extends FormDockView implements HierarchyTree } private JPanel getToolBarPane() { - ToolBarDef toolbarDef = new ToolBarDef(); - for (ShortCut4JControlPane sj : shorts) { - toolbarDef.addShortCut(sj.getShortCut()); - } UIToolbar toolBar = ToolBarDef.createJToolBar(); toolBar.setUI(new UIToolBarUI(){ @Override @@ -138,7 +135,13 @@ public class FormHierarchyTreePane extends FormDockView implements HierarchyTree g2.fillRect(0, 0, c.getWidth(), c.getHeight()); } }); - toolbarDef.updateToolBar(toolBar); + for (int i = 0; i < shorts.length; i++) { + if (i == SHORTS_SEPARATOR_POS) { + toolBar.addSeparator(new Dimension(2, 16)); + } + shorts[i].getShortCut().intoJToolBar(toolBar); + } + JPanel toolBarPane = new JPanel(new BorderLayout()); toolBarPane.add(toolBar, BorderLayout.CENTER); return toolBarPane; From 721c4eb89784771a1bc4e4fc972c9face0c3fb3d Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 4 Dec 2017 18:26:33 +0800 Subject: [PATCH 10/18] =?UTF-8?q?REPORT-4634=20=E7=BB=84=E4=BB=B6=E5=8F=A0?= =?UTF-8?q?=E5=8A=A0=E4=BD=93=E9=AA=8C=E4=BC=98=E5=8C=96=3D>3=3D>=E4=B8=8A?= =?UTF-8?q?=E7=A7=BB=E3=80=81=E4=B8=8B=E7=A7=BB=E3=80=81=E7=BD=AE=E9=A1=B6?= =?UTF-8?q?=E3=80=81=E7=BD=AE=E5=BA=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../beans/actions/MoveDownAction.java | 19 ++++++++++++++++--- .../beans/actions/MoveToBottomAction.java | 19 ++++++++++++++++--- .../beans/actions/MoveToTopAction.java | 18 +++++++++++++++--- .../designer/beans/actions/MoveUpAction.java | 19 ++++++++++++++++--- .../designer/beans/events/DesignerEvent.java | 2 ++ .../com/fr/design/mainframe/FormDesigner.java | 1 - .../design/mainframe/WidgetPropertyPane.java | 2 +- 7 files changed, 66 insertions(+), 14 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/actions/MoveDownAction.java b/designer_form/src/com/fr/design/designer/beans/actions/MoveDownAction.java index a9c22e5816..7310016620 100644 --- a/designer_form/src/com/fr/design/designer/beans/actions/MoveDownAction.java +++ b/designer_form/src/com/fr/design/designer/beans/actions/MoveDownAction.java @@ -1,10 +1,14 @@ package com.fr.design.designer.beans.actions; import com.fr.base.BaseUtils; +import com.fr.design.designer.beans.events.DesignerEvent; +import com.fr.design.designer.creator.XCreator; import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.FormSelection; import com.fr.general.Inter; import javax.swing.*; +import java.awt.*; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; @@ -27,11 +31,20 @@ public class MoveDownAction extends FormEditAction { @Override public boolean executeActionReturnUndoRecordNeeded() { - FormDesigner editPane = getEditingComponent(); - if (editPane == null) { + FormDesigner designer = getEditingComponent(); + if (designer == null) { return false; } - return editPane.cut(); + FormSelection selection = designer.getSelectionModel().getSelection(); + XCreator creator = selection.getSelectedCreator(); + Container container = creator.getParent(); + int targetIndex = container.getComponentZOrder(creator) + 1; + if (targetIndex >= container.getComponentCount()) { + return false; + } + container.setComponentZOrder(creator, targetIndex); + designer.getEditListenerTable().fireCreatorModified(creator, DesignerEvent.CREATOR_DELETED); + return true; } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/actions/MoveToBottomAction.java b/designer_form/src/com/fr/design/designer/beans/actions/MoveToBottomAction.java index 68b6e021ca..ac1ab74b5a 100644 --- a/designer_form/src/com/fr/design/designer/beans/actions/MoveToBottomAction.java +++ b/designer_form/src/com/fr/design/designer/beans/actions/MoveToBottomAction.java @@ -1,10 +1,14 @@ package com.fr.design.designer.beans.actions; import com.fr.base.BaseUtils; +import com.fr.design.designer.beans.events.DesignerEvent; +import com.fr.design.designer.creator.XCreator; import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.FormSelection; import com.fr.general.Inter; import javax.swing.*; +import java.awt.*; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; @@ -27,11 +31,20 @@ public class MoveToBottomAction extends FormEditAction { @Override public boolean executeActionReturnUndoRecordNeeded() { - FormDesigner editPane = getEditingComponent(); - if (editPane == null) { + FormDesigner designer = getEditingComponent(); + if (designer == null) { return false; } - return editPane.cut(); + FormSelection selection = designer.getSelectionModel().getSelection(); + XCreator creator = selection.getSelectedCreator(); + Container container = creator.getParent(); + int targetIndex = container.getComponentCount() - 1; + if (container.getComponentZOrder(creator) >= targetIndex) { + return false; + } + container.setComponentZOrder(creator, targetIndex); + designer.getEditListenerTable().fireCreatorModified(creator, DesignerEvent.CREATOR_DELETED); + return true; } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/actions/MoveToTopAction.java b/designer_form/src/com/fr/design/designer/beans/actions/MoveToTopAction.java index 8d588bc44c..8a37926936 100644 --- a/designer_form/src/com/fr/design/designer/beans/actions/MoveToTopAction.java +++ b/designer_form/src/com/fr/design/designer/beans/actions/MoveToTopAction.java @@ -1,10 +1,14 @@ package com.fr.design.designer.beans.actions; import com.fr.base.BaseUtils; +import com.fr.design.designer.beans.events.DesignerEvent; +import com.fr.design.designer.creator.XCreator; import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.FormSelection; import com.fr.general.Inter; import javax.swing.*; +import java.awt.*; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; @@ -27,11 +31,19 @@ public class MoveToTopAction extends FormEditAction { @Override public boolean executeActionReturnUndoRecordNeeded() { - FormDesigner editPane = getEditingComponent(); - if (editPane == null) { + FormDesigner designer = getEditingComponent(); + if (designer == null) { return false; } - return editPane.cut(); + FormSelection selection = designer.getSelectionModel().getSelection(); + XCreator creator = selection.getSelectedCreator(); + Container container = creator.getParent(); + if (container.getComponentZOrder(creator) == 0) { + return false; + } + container.setComponentZOrder(creator, 0); + designer.getEditListenerTable().fireCreatorModified(creator, DesignerEvent.CREATOR_DELETED); + return true; } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/actions/MoveUpAction.java b/designer_form/src/com/fr/design/designer/beans/actions/MoveUpAction.java index 1fd2194ce5..b86e9807a9 100644 --- a/designer_form/src/com/fr/design/designer/beans/actions/MoveUpAction.java +++ b/designer_form/src/com/fr/design/designer/beans/actions/MoveUpAction.java @@ -1,10 +1,14 @@ package com.fr.design.designer.beans.actions; import com.fr.base.BaseUtils; +import com.fr.design.designer.beans.events.DesignerEvent; +import com.fr.design.designer.creator.XCreator; import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.FormSelection; import com.fr.general.Inter; import javax.swing.*; +import java.awt.*; import java.awt.event.KeyEvent; import static com.fr.design.gui.syntax.ui.rtextarea.RTADefaultInputMap.DEFAULT_MODIFIER; @@ -26,11 +30,20 @@ public class MoveUpAction extends FormEditAction { @Override public boolean executeActionReturnUndoRecordNeeded() { - FormDesigner editPane = getEditingComponent(); - if (editPane == null) { + FormDesigner designer = getEditingComponent(); + if (designer == null) { return false; } - return editPane.cut(); + FormSelection selection = designer.getSelectionModel().getSelection(); + XCreator creator = selection.getSelectedCreator(); + Container container = creator.getParent(); + int targetIndex = container.getComponentZOrder(creator) - 1; + if (targetIndex < 0) { + return false; + } + container.setComponentZOrder(creator, targetIndex); + designer.getEditListenerTable().fireCreatorModified(creator, DesignerEvent.CREATOR_DELETED); + return true; } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/events/DesignerEvent.java b/designer_form/src/com/fr/design/designer/beans/events/DesignerEvent.java index 715f6e3e7b..d9b32b360c 100644 --- a/designer_form/src/com/fr/design/designer/beans/events/DesignerEvent.java +++ b/designer_form/src/com/fr/design/designer/beans/events/DesignerEvent.java @@ -23,6 +23,8 @@ public class DesignerEvent { public static final int CREATOR_RENAMED = 8; + public static final int CREATOR_ORDER_CHANGED = 9; + private int eventID; private XComponent affectedXCreator; diff --git a/designer_form/src/com/fr/design/mainframe/FormDesigner.java b/designer_form/src/com/fr/design/mainframe/FormDesigner.java index 9d6e81e4c3..b24da9268c 100644 --- a/designer_form/src/com/fr/design/mainframe/FormDesigner.java +++ b/designer_form/src/com/fr/design/mainframe/FormDesigner.java @@ -213,7 +213,6 @@ public class FormDesigner extends TargetComponent implements TreeSelection } } - /** * 是否有查询按钮 * diff --git a/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java b/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java index e76c041414..75a1bed357 100644 --- a/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java +++ b/designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java @@ -395,7 +395,7 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetPrope */ public void fireCreatorModified(DesignerEvent evt) { int[] validEventIds = {DesignerEvent.CREATOR_RESIZED, DesignerEvent.CREATOR_EDITED, - DesignerEvent.CREATOR_SELECTED, DesignerEvent.CREATOR_ADDED}; + DesignerEvent.CREATOR_SELECTED, DesignerEvent.CREATOR_ADDED, DesignerEvent.CREATOR_ORDER_CHANGED}; boolean isValid = false; for (int validEventId : validEventIds) { if (evt.getCreatorEventID() == validEventId) { From 9b6a37ab1e866d1b5ac9580bdd6eb25514f42422 Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 7 Dec 2017 11:27:20 +0800 Subject: [PATCH 11/18] =?UTF-8?q?REPORT-4634=20=E7=BB=84=E4=BB=B6=E5=8F=A0?= =?UTF-8?q?=E5=8A=A0=E4=BD=93=E9=AA=8C=E4=BC=98=E5=8C=96=3D>3=3D>=E5=8F=B3?= =?UTF-8?q?=E9=94=AE=E8=8F=9C=E5=8D=95=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/beans/models/SelectionModel.java | 2 +- .../design/designer/creator/XChartEditor.java | 3 ++- .../fr/design/designer/creator/XCreator.java | 19 +++++++++++++++++++ .../design/designer/creator/XElementCase.java | 3 ++- .../designer/creator/XWAbsoluteLayout.java | 3 ++- .../cardlayout/XWCardMainBorderLayout.java | 3 ++- .../mainframe/EditingMouseListener.java | 10 +++++++++- 7 files changed, 37 insertions(+), 6 deletions(-) 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 e0236800eb..850539781d 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 @@ -62,7 +62,7 @@ public class SelectionModel { * @param e 鼠标事件 */ public void selectACreatorAtMouseEvent(MouseEvent e) { - if (!InputEventBaseOnOS.isControlDown(e) && !e.isShiftDown()) { + if (e.getButton() == MouseEvent.BUTTON3 || (!InputEventBaseOnOS.isControlDown(e) && !e.isShiftDown())) { // 如果Ctrl或者Shift键盘没有按下,则清除已经选择的组件 selection.reset(); } 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 750e2ae38f..260697355d 100644 --- a/designer_form/src/com/fr/design/designer/creator/XChartEditor.java +++ b/designer_form/src/com/fr/design/designer/creator/XChartEditor.java @@ -206,7 +206,8 @@ public class XChartEditor extends XBorderStyleWidgetCreator { 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; + isEditing = e.getButton() == MouseEvent.BUTTON1 && + (e.getClickCount() == 2 || designer.getCursor().getType() == Cursor.HAND_CURSOR); displayCoverPane(!isEditing); selectionModel.selectACreatorAtMouseEvent(e); 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 99f3267d04..cc15466222 100644 --- a/designer_form/src/com/fr/design/designer/creator/XCreator.java +++ b/designer_form/src/com/fr/design/designer/creator/XCreator.java @@ -6,6 +6,7 @@ package com.fr.design.designer.creator; import com.fr.base.BaseUtils; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; +import com.fr.design.designer.beans.actions.*; import com.fr.design.designer.beans.events.DesignerEditor; import com.fr.design.designer.beans.models.SelectionModel; import com.fr.design.fun.WidgetPropertyUIProvider; @@ -664,4 +665,22 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo // do nothing } + /** + * 创建右击弹出菜单 + * + */ + public JPopupMenu createPopupMenu(FormDesigner formDesigner) { + JPopupMenu popup = new JPopupMenu(); + popup.add(new CutAction(formDesigner).createMenuItem()); + popup.add(new CopyAction(formDesigner).createMenuItem()); + popup.add(new PasteAction(formDesigner).createMenuItem()); + popup.add(new FormDeleteAction(formDesigner).createMenuItem()); + popup.addSeparator(); + popup.add(new MoveToTopAction(formDesigner).createMenuItem()); + popup.add(new MoveToBottomAction(formDesigner).createMenuItem()); + popup.add(new MoveUpAction(formDesigner).createMenuItem()); + popup.add(new MoveDownAction(formDesigner).createMenuItem()); + return popup; + } + } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/XElementCase.java b/designer_form/src/com/fr/design/designer/creator/XElementCase.java index 75c2bb80d0..af58fd991a 100644 --- a/designer_form/src/com/fr/design/designer/creator/XElementCase.java +++ b/designer_form/src/com/fr/design/designer/creator/XElementCase.java @@ -302,7 +302,8 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme private void switchTab(MouseEvent e,EditingMouseListener editingMouseListener){ FormDesigner designer = editingMouseListener.getDesigner(); - if (e.getClickCount() == 2 || designer.getCursor().getType() == Cursor.HAND_CURSOR){ + if (e.getButton() == MouseEvent.BUTTON1 && + (e.getClickCount() == 2 || designer.getCursor().getType() == Cursor.HAND_CURSOR)){ FormElementCaseContainerProvider component = (FormElementCaseContainerProvider) designer.getComponentAt(e); //切换设计器 designer.switchTab(component); 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 852cdf1220..58c5f74dda 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java @@ -467,7 +467,8 @@ public class XWAbsoluteLayout extends XLayoutContainer { 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; + boolean isEditing = isEditable() || + e.getButton() == MouseEvent.BUTTON1 && (designer.getCursor().getType() == Cursor.HAND_CURSOR || e.getClickCount() == 2); setEditable(isEditing); selectionModel.selectACreatorAtMouseEvent(e); 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 8f60672eca..57a5190807 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 @@ -246,7 +246,8 @@ public class XWCardMainBorderLayout extends XWBorderLayout{ 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; + boolean isEditing = e.getButton() == MouseEvent.BUTTON1 && + (designer.getCursor().getType() == Cursor.HAND_CURSOR || e.getClickCount() == 2); setEditable(isEditing); selectionModel.selectACreatorAtMouseEvent(e); diff --git a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java index cad41b913b..a6dbc913cd 100644 --- a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java +++ b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java @@ -17,6 +17,7 @@ import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.xpane.ToolTipEditor; import com.fr.design.icon.IconPathConstants; import com.fr.design.utils.ComponentUtils; +import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.LayoutUtils; import com.fr.general.Inter; import com.fr.stable.Constants; @@ -528,8 +529,9 @@ public class EditingMouseListener extends MouseInputAdapter { */ public void mouseClicked(MouseEvent e) { XCreator creator = designer.getComponentAt(e); + boolean isValidButton = e.getButton() == MouseEvent.BUTTON1 || e.getButton() == MouseEvent.BUTTON3; - if (e.getButton() != MouseEvent.BUTTON1 && !creator.acceptType(XCardSwitchButton.class)) { + if (!isValidButton && !creator.acceptType(XCardSwitchButton.class)) { return; } @@ -537,6 +539,12 @@ public class EditingMouseListener extends MouseInputAdapter { if (creator != null) { creator.respondClick(this, e); + if (e.getButton() == MouseEvent.BUTTON3) { + JPopupMenu cellPopupMenu = creator.createPopupMenu(designer); + if (cellPopupMenu != null) { + GUICoreUtils.showPopupMenu(cellPopupMenu, designer, e.getX(), e.getY()); + } + } } creator.doLayout(); LayoutUtils.layoutRootContainer(designer.getRootComponent()); From 15496270fec145bf72306e71839e5b8cba5acba2 Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 7 Dec 2017 15:20:09 +0800 Subject: [PATCH 12/18] =?UTF-8?q?REPORT-4634=20=E7=BB=84=E4=BB=B6=E5=8F=A0?= =?UTF-8?q?=E5=8A=A0=E4=BD=93=E9=AA=8C=E4=BC=98=E5=8C=96=3D>3=3D>=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=93=8D=E4=BD=9C=E7=BD=AE=E7=81=B0=E7=9A=84=E6=83=85?= =?UTF-8?q?=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../beans/actions/MoveDownAction.java | 9 ++++++ .../beans/actions/MoveToBottomAction.java | 10 +++++++ .../beans/actions/MoveToTopAction.java | 10 +++++++ .../designer/beans/actions/MoveUpAction.java | 10 +++++++ .../fr/design/designer/creator/XCreator.java | 28 ++++++++++++------- .../creator/XWAbsoluteBodyLayout.java | 4 +++ .../design/designer/creator/XWFitLayout.java | 6 +++- .../designer/creator/XWParameterLayout.java | 5 ++++ .../form/parameter/FormParaDesigner.java | 5 ++-- .../com/fr/design/mainframe/FormDesigner.java | 25 +++++++++++++++-- 10 files changed, 96 insertions(+), 16 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/actions/MoveDownAction.java b/designer_form/src/com/fr/design/designer/beans/actions/MoveDownAction.java index 7310016620..1fb579c685 100644 --- a/designer_form/src/com/fr/design/designer/beans/actions/MoveDownAction.java +++ b/designer_form/src/com/fr/design/designer/beans/actions/MoveDownAction.java @@ -47,4 +47,13 @@ public class MoveDownAction extends FormEditAction { return true; } + @Override + public void update() { + FormDesigner designer = getEditingComponent(); + if (designer == null) { + this.setEnabled(false); + return; + } + this.setEnabled(designer.isCurrentComponentMovableDown()); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/actions/MoveToBottomAction.java b/designer_form/src/com/fr/design/designer/beans/actions/MoveToBottomAction.java index ac1ab74b5a..61d36afd74 100644 --- a/designer_form/src/com/fr/design/designer/beans/actions/MoveToBottomAction.java +++ b/designer_form/src/com/fr/design/designer/beans/actions/MoveToBottomAction.java @@ -47,4 +47,14 @@ public class MoveToBottomAction extends FormEditAction { return true; } + + @Override + public void update() { + FormDesigner designer = getEditingComponent(); + if (designer == null) { + this.setEnabled(false); + return; + } + this.setEnabled(designer.isCurrentComponentMovableDown()); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/actions/MoveToTopAction.java b/designer_form/src/com/fr/design/designer/beans/actions/MoveToTopAction.java index 8a37926936..5a69b2d101 100644 --- a/designer_form/src/com/fr/design/designer/beans/actions/MoveToTopAction.java +++ b/designer_form/src/com/fr/design/designer/beans/actions/MoveToTopAction.java @@ -46,4 +46,14 @@ public class MoveToTopAction extends FormEditAction { return true; } + @Override + public void update() { + FormDesigner designer = getEditingComponent(); + if (designer == null) { + this.setEnabled(false); + return; + } + this.setEnabled(designer.isCurrentComponentMovableUp()); + } + } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/beans/actions/MoveUpAction.java b/designer_form/src/com/fr/design/designer/beans/actions/MoveUpAction.java index b86e9807a9..3e214a768a 100644 --- a/designer_form/src/com/fr/design/designer/beans/actions/MoveUpAction.java +++ b/designer_form/src/com/fr/design/designer/beans/actions/MoveUpAction.java @@ -46,4 +46,14 @@ public class MoveUpAction extends FormEditAction { return true; } + @Override + public void update() { + FormDesigner designer = getEditingComponent(); + if (designer == null) { + this.setEnabled(false); + return; + } + this.setEnabled(designer.isCurrentComponentMovableUp()); + } + } \ 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 cc15466222..665db751a4 100644 --- a/designer_form/src/com/fr/design/designer/creator/XCreator.java +++ b/designer_form/src/com/fr/design/designer/creator/XCreator.java @@ -4,6 +4,7 @@ package com.fr.design.designer.creator; import com.fr.base.BaseUtils; +import com.fr.design.actions.UpdateAction; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.actions.*; @@ -48,8 +49,9 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo private Rectangle backupBound; private String shareId = StringUtils.EMPTY;//如果组件是共享的会有这个属性 private boolean isHelpBtnOnFocus = false;//焦点是否在帮助按钮上 + private static final int SHORTS_SEPARATOR_POS = 4; // 弹出菜单分割的位置 - public XCreator(Widget ob, Dimension initSize) { + public XCreator(Widget ob, Dimension initSize) { this.data = ob; this.initEditor(); @@ -670,17 +672,23 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo * */ public JPopupMenu createPopupMenu(FormDesigner formDesigner) { + UpdateAction[] actions = formDesigner.getActions(); JPopupMenu popup = new JPopupMenu(); - popup.add(new CutAction(formDesigner).createMenuItem()); - popup.add(new CopyAction(formDesigner).createMenuItem()); - popup.add(new PasteAction(formDesigner).createMenuItem()); - popup.add(new FormDeleteAction(formDesigner).createMenuItem()); - popup.addSeparator(); - popup.add(new MoveToTopAction(formDesigner).createMenuItem()); - popup.add(new MoveToBottomAction(formDesigner).createMenuItem()); - popup.add(new MoveUpAction(formDesigner).createMenuItem()); - popup.add(new MoveDownAction(formDesigner).createMenuItem()); + for (int i = 0; i < actions.length; i++) { + if (i == SHORTS_SEPARATOR_POS) { + popup.addSeparator(); + } + popup.add(actions[i].createMenuItem()); + } return popup; } + /** + * 是否支持上移一层、下移一层等操作 + * + */ + public boolean isMovable() { + return true; + } + } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java index 895eaf0310..1c389230b6 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java @@ -107,5 +107,9 @@ public class XWAbsoluteBodyLayout extends XWAbsoluteLayout { initStyle(); } + @Override + public boolean isMovable() { + return false; + } } 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 7e0600ba44..712a8588d1 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWFitLayout.java @@ -1180,5 +1180,9 @@ public class XWFitLayout extends XLayoutContainer { public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { return new WidgetPropertyUIProvider[]{ new BodyMobilePropertyUI(this)}; } - + + @Override + public boolean isMovable() { + return false; + } } \ 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 a158dc753d..84011c9c41 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWParameterLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWParameterLayout.java @@ -227,4 +227,9 @@ public class XWParameterLayout extends XWAbsoluteLayout { } + @Override + public boolean isMovable() { + return false; + } + } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java b/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java index b9d24b2cd8..0b39f987d2 100644 --- a/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java +++ b/designer_form/src/com/fr/design/form/parameter/FormParaDesigner.java @@ -22,6 +22,7 @@ import com.fr.base.BaseUtils; import com.fr.base.Parameter; import com.fr.base.parameter.ParameterUI; import com.fr.design.DesignModelAdapter; +import com.fr.design.actions.UpdateAction; import com.fr.design.designer.beans.actions.CopyAction; import com.fr.design.designer.beans.actions.CutAction; import com.fr.design.designer.beans.actions.FormDeleteAction; @@ -322,9 +323,9 @@ public class FormParaDesigner extends FormDesigner implements ParameterDesignerP * * @return 同上 */ - public Action[] getActions() { + public UpdateAction[] getActions() { if (designerActions == null) { - designerActions = new Action[]{new CutAction(this), new CopyAction(this), new PasteAction(this), + designerActions = new UpdateAction[]{new CutAction(this), new CopyAction(this), new PasteAction(this), new FormDeleteAction(this)}; } return designerActions; diff --git a/designer_form/src/com/fr/design/mainframe/FormDesigner.java b/designer_form/src/com/fr/design/mainframe/FormDesigner.java index b24da9268c..dad299c2c9 100644 --- a/designer_form/src/com/fr/design/mainframe/FormDesigner.java +++ b/designer_form/src/com/fr/design/mainframe/FormDesigner.java @@ -4,6 +4,7 @@ import com.fr.base.BaseUtils; import com.fr.base.Parameter; import com.fr.base.ScreenResolution; import com.fr.design.DesignState; +import com.fr.design.actions.UpdateAction; import com.fr.design.designer.TargetComponent; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.Painter; @@ -105,7 +106,7 @@ public class FormDesigner extends TargetComponent implements TreeSelection private int resolution = ScreenResolution.getScreenResolution(); // 编辑状态的事件表 private CreatorEventListenerTable edit; - protected Action[] designerActions; + protected UpdateAction[] designerActions; private FormDesignerModeForSpecial desigerMode; private Action switchAction; private FormElementCaseContainerProvider elementCaseContainer; @@ -668,6 +669,10 @@ public class FormDesigner extends TargetComponent implements TreeSelection setParameterArray(getNoRepeatParas(getTarget().getParameters())); refreshParameter(); } + } else { + for( UpdateAction action : getActions()) { + action.update(); + } } } @@ -1122,15 +1127,29 @@ public class FormDesigner extends TargetComponent implements TreeSelection * * @return 同上 */ - public Action[] getActions() { + public UpdateAction[] getActions() { if (designerActions == null) { - designerActions = new Action[]{new CutAction(this), new CopyAction(this), new PasteAction(this), + designerActions = new UpdateAction[]{new CutAction(this), new CopyAction(this), new PasteAction(this), new FormDeleteAction(this), new MoveToTopAction(this), new MoveToBottomAction(this), new MoveUpAction(this), new MoveDownAction(this)}; } return designerActions; } + // 当前选中控件可以上移一层吗? + public boolean isCurrentComponentMovableUp() { + XCreator creator = getSelectionModel().getSelection().getSelectedCreator(); + Container container = creator.getParent(); + return creator.isMovable() && container.getComponentZOrder(creator) > 0; + } + + // 当前选中控件可以下移一层吗? + public boolean isCurrentComponentMovableDown() { + XCreator creator = getSelectionModel().getSelection().getSelectedCreator(); + Container container = creator.getParent(); + return creator.isMovable() && container.getComponentZOrder(creator) < container.getComponentCount() - 1; + } + protected Border getOuterBorder() { return XCreatorConstants.AREA_BORDER; } From f8875fa2516663d3d46f65ca79a89387499eb067 Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 7 Dec 2017 15:37:49 +0800 Subject: [PATCH 13/18] =?UTF-8?q?REPORT-4634=20=E7=BB=84=E4=BB=B6=E5=8F=A0?= =?UTF-8?q?=E5=8A=A0=E4=BD=93=E9=AA=8C=E4=BC=98=E5=8C=96=3D>3=3D>icon=20?= =?UTF-8?q?=E6=9B=BF=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/images/control/to_bottom.png | Bin 0 -> 274 bytes .../src/com/fr/design/images/control/to_top.png | Bin 0 -> 278 bytes .../beans/actions/MoveToBottomAction.java | 2 +- .../designer/beans/actions/MoveToTopAction.java | 2 +- 4 files changed, 2 insertions(+), 2 deletions(-) create mode 100755 designer_base/src/com/fr/design/images/control/to_bottom.png create mode 100755 designer_base/src/com/fr/design/images/control/to_top.png diff --git a/designer_base/src/com/fr/design/images/control/to_bottom.png b/designer_base/src/com/fr/design/images/control/to_bottom.png new file mode 100755 index 0000000000000000000000000000000000000000..b69dbf03f3fbf9c8facb78c51e5fea6863b1f11c GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|&Um^whFAzD zCoE7kFf_c$b?C>NgoElo|Jyf<+f`1G5msbvdD7m<*mI)J#LO%=J>f@uqfXn&v^N&j z-%3<{WK?-7DtBf}N=kk|pmH&Df{X|6CW|g^2O%>vvnKnxKQ+`}g;MmJ8NR0*1%FpE=Vbw%l*-F4kb?#esVmgjqCGl9D)> zt$y-zG~c*ka`?*QCB8mqE;&jpXUg(ez@lUz)mZmueb@bjW48}vxNs)?dBu5xiQ&GU W$=lGUuNr{Px#&`Cr=R5%f1V4x5%BI`FcHoe8b@Lv^K43o`x`|R1%YMA1*5HT?^O9x?mW}|ok zS)r+^smuTW4BJ6sjEoGPr%#{WgDekYV>Q6c%uMa?-~T6o;UNf7$oQU_nbG3ZsZ+o( zLIq5yTm}Xk8ymrY|Nd`AXa=eH4;BN-p{qwRz`?aX3fu-vjd%kQ cT@T5808vy&KVy=n$p8QV07*qoM6N<$g6EQOT>t<8 literal 0 HcmV?d00001 diff --git a/designer_form/src/com/fr/design/designer/beans/actions/MoveToBottomAction.java b/designer_form/src/com/fr/design/designer/beans/actions/MoveToBottomAction.java index 61d36afd74..2e3041d9ae 100644 --- a/designer_form/src/com/fr/design/designer/beans/actions/MoveToBottomAction.java +++ b/designer_form/src/com/fr/design/designer/beans/actions/MoveToBottomAction.java @@ -25,7 +25,7 @@ public class MoveToBottomAction extends FormEditAction { super(t); this.setName(Inter.getLocText("FR-Designer_Move_To_Bottom")); this.setMnemonic('T'); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/down.png")); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/to_bottom.png")); this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_OPEN_BRACKET, DEFAULT_MODIFIER + InputEvent.ALT_MASK)); } diff --git a/designer_form/src/com/fr/design/designer/beans/actions/MoveToTopAction.java b/designer_form/src/com/fr/design/designer/beans/actions/MoveToTopAction.java index 5a69b2d101..47be1b9f2a 100644 --- a/designer_form/src/com/fr/design/designer/beans/actions/MoveToTopAction.java +++ b/designer_form/src/com/fr/design/designer/beans/actions/MoveToTopAction.java @@ -25,7 +25,7 @@ public class MoveToTopAction extends FormEditAction { super(t); this.setName(Inter.getLocText("FR-Designer_Move_To_Top")); this.setMnemonic('T'); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/up.png")); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/to_top.png")); this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_CLOSE_BRACKET, DEFAULT_MODIFIER + InputEvent.ALT_MASK)); } From 2edcd45da6e6b397515dd50b46d1a0fce62e4552 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 8 Dec 2017 11:41:25 +0800 Subject: [PATCH 14/18] =?UTF-8?q?REPORT-4634=20=E7=BB=84=E4=BB=B6=E5=8F=A0?= =?UTF-8?q?=E5=8A=A0=E4=BD=93=E9=AA=8C=E4=BC=98=E5=8C=96=3D>4=E7=BC=A9?= =?UTF-8?q?=E7=95=A5=E5=9B=BE=3D>=E7=BC=A9=E7=95=A5=E5=9B=BE=E6=A1=86?= =?UTF-8?q?=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/ComponentTree.java | 118 ++++++++++++++++-- 1 file changed, 107 insertions(+), 11 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/ComponentTree.java b/designer_form/src/com/fr/design/mainframe/ComponentTree.java index fc786c868f..1c2ec9d230 100644 --- a/designer_form/src/com/fr/design/mainframe/ComponentTree.java +++ b/designer_form/src/com/fr/design/mainframe/ComponentTree.java @@ -1,9 +1,12 @@ package com.fr.design.mainframe; import java.awt.*; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.util.ArrayList; import javax.swing.*; +import javax.swing.tree.TreeCellRenderer; import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; @@ -12,6 +15,7 @@ import com.fr.design.designer.creator.*; import com.fr.design.designer.treeview.ComponentTreeCellRenderer; import com.fr.design.designer.treeview.ComponentTreeModel; import com.fr.design.gui.itree.UITreeUI; +import com.fr.design.utils.gui.GUICoreUtils; import com.fr.stable.StringUtils; public class ComponentTree extends JTree { @@ -19,6 +23,7 @@ public class ComponentTree extends JTree { private FormDesigner designer; private ComponentTreeModel model; private UITreeUI uiTreeUI = new UITreeUI(); + private PopupPreviewPane previewPane; private static final int PADDING_LEFT = 10; private static final int PADDING_TOP = 8; @@ -33,6 +38,7 @@ public class ComponentTree extends JTree { this.setTransferHandler(new TreeTransferHandler()); this.refreshTreeRoot(); addTreeSelectionListener(designer); + addMouseMotionListener(new ComponetTreeMouseListener(this)); setEditable(true); setUI(uiTreeUI); setBorder(BorderFactory.createEmptyBorder(PADDING_TOP, PADDING_LEFT, 0, 0)); @@ -46,9 +52,9 @@ public class ComponentTree extends JTree { * 构造函数 * * @param designer 设计界面组件 - * @param model 构造JTree的model + * @param model 构造JTree的model */ - public ComponentTree(FormDesigner designer,ComponentTreeModel model) { + public ComponentTree(FormDesigner designer, ComponentTreeModel model) { this(designer); this.setModel(model); } @@ -63,6 +69,7 @@ public class ComponentTree extends JTree { /** * 是否可编辑 + * * @param path 树路径 * @return 是则返回true */ @@ -73,13 +80,13 @@ public class ComponentTree extends JTree { /** * 将值转换为文本 - * @param value 值 + * + * @param value 值 * @param selected 是否选中 * @param expanded 扩展 - * @param leaf 是否叶子 - * @param row 行 + * @param leaf 是否叶子 + * @param row 行 * @param hasFocus 是否焦点 - * * @return 返回文本 */ @Override @@ -117,7 +124,7 @@ public class ComponentTree extends JTree { /** - *搜索指定名称的路径 + * 搜索指定名称的路径 * * @param text 名称 * @return 树路径 @@ -134,7 +141,7 @@ public class ComponentTree extends JTree { for (int i = 0; i < paths.length; i++) { paths[i] = buildTreePath(searchList.get(i)); } - if(paths.length > 0) { + if (paths.length > 0) { setAndScrollSelectionPath(paths); } else { setSelectionPath(); @@ -143,7 +150,7 @@ public class ComponentTree extends JTree { } - private void setSelectionPath(){ + private void setSelectionPath() { /** * 不让传null参数,所以只有自己定义 @@ -194,13 +201,13 @@ public class ComponentTree extends JTree { while (parent != null) { XCreator creator = (XCreator) parent; path.add(0, parent); - if (creator != comp ) { + if (creator != comp) { creator.notShowInComponentTree(path); } //绝对布局作为body的时候不显示自适应布局父层 if (((XCreator) parent).acceptType(XWAbsoluteBodyLayout.class)) { if ((parent.getParent() != null) - && ((XCreator)parent.getParent()).acceptType(XWFitLayout.class)){ + && ((XCreator) parent.getParent()).acceptType(XWFitLayout.class)) { parent = parent.getParent().getParent(); continue; } @@ -212,4 +219,93 @@ public class ComponentTree extends JTree { return new TreePath(components); } + private void popupPreviewPane(int popupPosYOnScreen) { + if (previewPane == null) { + previewPane = new PopupPreviewPane(); + } + if (previewPane.isVisible() && previewPane.getLocationOnScreen().y != popupPosYOnScreen) { + previewPane.setVisible(false); + } + + if (!previewPane.isVisible()) { + int popupPosY = popupPosYOnScreen - FormHierarchyTreePane.getInstance().getLocationOnScreen().y; + GUICoreUtils.showPopupMenu(previewPane, FormHierarchyTreePane.getInstance(), -previewPane.getPreferredSize().width, popupPosY); + } + } + + private void hidePreviewPane() { + if (previewPane != null && previewPane.isVisible()) { + previewPane.setVisible(false); + } + } + + private final class ComponetTreeMouseListener extends MouseAdapter { + private final JTree tree; + + private ComponetTreeMouseListener(JTree tree) { + this.tree = tree; + } + + @Override + public void mouseMoved(MouseEvent e) { + + Point p = e.getPoint(); + int selRow = tree.getRowForLocation(p.x, p.y); + TreeCellRenderer r = tree.getCellRenderer(); + if (selRow != -1 && r != null) { + TreePath path = tree.getPathForRow(selRow); + Point point = tree.getPathBounds(path).getLocation(); + SwingUtilities.convertPointToScreen(point, tree); + popupPreviewPane(point.y); + } else { + hidePreviewPane(); + } + } + } + + private class PopupPreviewPane extends JPopupMenu { + private Container contentPane; + + PopupPreviewPane() { + contentPane = new JPanel(); + contentPane.setBackground(Color.blue); + this.setLayout(new BorderLayout()); +// this.add(new PopupToolPane(propertyItem), BorderLayout.NORTH); + this.add(contentPane, BorderLayout.CENTER); + this.setOpaque(false); +// setPreferredSize(new Dimension(CONTAINER_WIDTH - TAB_WIDTH, POPUP_DEFAULT_HEIGHT)); + setPreferredSize(new Dimension(200, 200)); + setBorder(BorderFactory.createLineBorder(UIConstants.LINE_COLOR)); + } + + @Override + public void setVisible(boolean visible) { + super.setVisible(visible); +// if (visible == true) { +// replaceContentPane(propertyItem.getContentArea()); +// } else { +// propertyItem.reAddContentArea(); +// } + } + + public void menuSelectionChanged(boolean isIncluded) { + } + + public Container getContentPane() { + return contentPane; + } + + public void replaceContentPane(Container pane) { + this.remove(this.contentPane); + this.add(this.contentPane = pane); + refreshContainer(); + } + + private void refreshContainer() { + validate(); + repaint(); + revalidate(); + } + } + } \ No newline at end of file From e7d365a64023db77727ad26aa40b204ca96986e4 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 11 Dec 2017 14:05:01 +0800 Subject: [PATCH 15/18] =?UTF-8?q?REPORT-4634=20=E7=BB=84=E4=BB=B6=E5=8F=A0?= =?UTF-8?q?=E5=8A=A0=E4=BD=93=E9=AA=8C=E4=BC=98=E5=8C=96=3D>4=E7=BC=A9?= =?UTF-8?q?=E7=95=A5=E5=9B=BE=3D>=E5=AE=8C=E6=88=90=E7=BC=A9=E7=95=A5?= =?UTF-8?q?=E5=9B=BE=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/ComponentTree.java | 71 +++++++++++++------ 1 file changed, 50 insertions(+), 21 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/ComponentTree.java b/designer_form/src/com/fr/design/mainframe/ComponentTree.java index 1c2ec9d230..1262bafc72 100644 --- a/designer_form/src/com/fr/design/mainframe/ComponentTree.java +++ b/designer_form/src/com/fr/design/mainframe/ComponentTree.java @@ -3,8 +3,12 @@ package com.fr.design.mainframe; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; import java.util.ArrayList; +import javax.imageio.ImageIO; import javax.swing.*; import javax.swing.tree.TreeCellRenderer; import javax.swing.tree.TreePath; @@ -17,6 +21,7 @@ import com.fr.design.designer.treeview.ComponentTreeModel; import com.fr.design.gui.itree.UITreeUI; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.stable.StringUtils; +import com.fr.web.core.A.M; public class ComponentTree extends JTree { @@ -61,7 +66,6 @@ public class ComponentTree extends JTree { public void setSelectionPath(TreePath path) { // 不管点击哪一项,都要先退出编辑状态(图表、报表块、绝对布局、tab块) -// getSelectionModel().setSelectionPath(path); designer.stopEditing(path); super.setSelectionPath(path); } @@ -219,7 +223,7 @@ public class ComponentTree extends JTree { return new TreePath(components); } - private void popupPreviewPane(int popupPosYOnScreen) { + private void popupPreviewPane(int popupPosYOnScreen, XCreator comp) { if (previewPane == null) { previewPane = new PopupPreviewPane(); } @@ -228,6 +232,7 @@ public class ComponentTree extends JTree { } if (!previewPane.isVisible()) { + previewPane.setComp(comp); int popupPosY = popupPosYOnScreen - FormHierarchyTreePane.getInstance().getLocationOnScreen().y; GUICoreUtils.showPopupMenu(previewPane, FormHierarchyTreePane.getInstance(), -previewPane.getPreferredSize().width, popupPosY); } @@ -256,7 +261,8 @@ public class ComponentTree extends JTree { TreePath path = tree.getPathForRow(selRow); Point point = tree.getPathBounds(path).getLocation(); SwingUtilities.convertPointToScreen(point, tree); - popupPreviewPane(point.y); + XCreator comp = (XCreator) path.getLastPathComponent(); + popupPreviewPane(point.y, comp); } else { hidePreviewPane(); } @@ -265,27 +271,40 @@ public class ComponentTree extends JTree { private class PopupPreviewPane extends JPopupMenu { private Container contentPane; + private BufferedImage compImage; + private static final int MAX_WIDTH = 360; + private static final int MAX_HEIGHT = 280; PopupPreviewPane() { contentPane = new JPanel(); - contentPane.setBackground(Color.blue); + contentPane.setBackground(Color.white); this.setLayout(new BorderLayout()); -// this.add(new PopupToolPane(propertyItem), BorderLayout.NORTH); this.add(contentPane, BorderLayout.CENTER); this.setOpaque(false); -// setPreferredSize(new Dimension(CONTAINER_WIDTH - TAB_WIDTH, POPUP_DEFAULT_HEIGHT)); - setPreferredSize(new Dimension(200, 200)); + setPreferredSize(new Dimension(MAX_WIDTH, MAX_HEIGHT)); setBorder(BorderFactory.createLineBorder(UIConstants.LINE_COLOR)); } + public void setComp(XCreator comp) { + try { + this.compImage = componentToImage(comp); + this.updateSize(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void paint(Graphics g) { + super.paint(g); + if (compImage != null) { + g.drawImage(compImage, 0, 0, getWidth(), getHeight(), null); + } + } + @Override public void setVisible(boolean visible) { super.setVisible(visible); -// if (visible == true) { -// replaceContentPane(propertyItem.getContentArea()); -// } else { -// propertyItem.reAddContentArea(); -// } } public void menuSelectionChanged(boolean isIncluded) { @@ -295,17 +314,27 @@ public class ComponentTree extends JTree { return contentPane; } - public void replaceContentPane(Container pane) { - this.remove(this.contentPane); - this.add(this.contentPane = pane); - refreshContainer(); + private BufferedImage componentToImage(Component comp) throws IOException + { + BufferedImage im = new BufferedImage(comp.getWidth(), comp.getHeight(), BufferedImage.TYPE_INT_ARGB); + comp.paint(im.getGraphics()); + return im; } - private void refreshContainer() { - validate(); - repaint(); - revalidate(); + // 根据控件内容,更新弹出框大小 + private void updateSize() { + int width = compImage.getWidth(); + int height = compImage.getHeight(); + double aspectRatio = (double)width / height; + if (width > MAX_WIDTH) { + width = MAX_WIDTH; + height = (int)(width / aspectRatio); + } + if (height > MAX_HEIGHT) { + height = MAX_HEIGHT; + width = (int)(height * aspectRatio); + } + this.setPreferredSize(new Dimension(width, height)); } } - } \ No newline at end of file From efd9d23afc03d57c0bdbd696dffa10897087f466 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 11 Dec 2017 14:28:34 +0800 Subject: [PATCH 16/18] =?UTF-8?q?REPORT-4634=20=E7=BB=84=E4=BB=B6=E5=8F=A0?= =?UTF-8?q?=E5=8A=A0=E4=BD=93=E9=AA=8C=E4=BC=98=E5=8C=96=3D>4=E7=BC=A9?= =?UTF-8?q?=E7=95=A5=E5=9B=BE=3D>=E4=BF=AE=E5=A4=8D=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=90=8E=EF=BC=8C=E9=A2=84=E8=A7=88=E6=A1=86?= =?UTF-8?q?=E4=B8=8D=E6=B6=88=E5=A4=B1=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/mainframe/ComponentTree.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/designer_form/src/com/fr/design/mainframe/ComponentTree.java b/designer_form/src/com/fr/design/mainframe/ComponentTree.java index 1262bafc72..f5e8936d3f 100644 --- a/designer_form/src/com/fr/design/mainframe/ComponentTree.java +++ b/designer_form/src/com/fr/design/mainframe/ComponentTree.java @@ -70,6 +70,14 @@ public class ComponentTree extends JTree { super.setSelectionPath(path); } + @Override + public void removeAll() { + if (previewPane != null && previewPane.isVisible()) { + previewPane.setVisible(false); + } + super.removeAll(); + } + /** * 是否可编辑 From 5503c1c7a9a40111e2a4efc8cb888808379a00cb Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 11 Dec 2017 14:34:55 +0800 Subject: [PATCH 17/18] =?UTF-8?q?REPORT-4634=20=E7=BB=84=E4=BB=B6=E5=8F=A0?= =?UTF-8?q?=E5=8A=A0=E4=BD=93=E9=AA=8C=E4=BC=98=E5=8C=96=3D>4=E7=BC=A9?= =?UTF-8?q?=E7=95=A5=E5=9B=BE=3D>=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_form/src/com/fr/design/mainframe/ComponentTree.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer_form/src/com/fr/design/mainframe/ComponentTree.java b/designer_form/src/com/fr/design/mainframe/ComponentTree.java index f5e8936d3f..6779dfa037 100644 --- a/designer_form/src/com/fr/design/mainframe/ComponentTree.java +++ b/designer_form/src/com/fr/design/mainframe/ComponentTree.java @@ -72,8 +72,9 @@ public class ComponentTree extends JTree { @Override public void removeAll() { - if (previewPane != null && previewPane.isVisible()) { + if (previewPane != null) { previewPane.setVisible(false); + previewPane.removeAll(); } super.removeAll(); } From 3c01476b7b09a6b47117c93de4825e803e9d6759 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 11 Dec 2017 15:12:26 +0800 Subject: [PATCH 18/18] =?UTF-8?q?REPORT-4634=20=E7=BB=84=E4=BB=B6=E5=8F=A0?= =?UTF-8?q?=E5=8A=A0=E4=BD=93=E9=AA=8C=E4=BC=98=E5=8C=96=3D>5=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81=20delete=20=E5=92=8C=20backspace=20=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../beans/actions/FormDeleteAction.java | 83 ++++++++++--------- 1 file changed, 42 insertions(+), 41 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/beans/actions/FormDeleteAction.java b/designer_form/src/com/fr/design/designer/beans/actions/FormDeleteAction.java index 58c30543c7..6678200cfd 100644 --- a/designer_form/src/com/fr/design/designer/beans/actions/FormDeleteAction.java +++ b/designer_form/src/com/fr/design/designer/beans/actions/FormDeleteAction.java @@ -5,7 +5,7 @@ package com.fr.design.designer.beans.actions; import java.awt.event.KeyEvent; -import javax.swing.KeyStroke; +import javax.swing.*; import com.fr.base.BaseUtils; import com.fr.general.Inter; @@ -19,44 +19,45 @@ import com.fr.design.mainframe.FormSelection; */ public class FormDeleteAction extends FormUndoableAction { - public FormDeleteAction(FormDesigner t) { - super(t); - - this.setName(Inter.getLocText("M_Edit-Delete")); - this.setMnemonic('D'); - // Richie:删除菜单图标 - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_report/delete.png")); - this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0)); - } - - /** - * 删除 - * - * @return 是否删除成功 - */ - @Override - public boolean executeActionReturnUndoRecordNeeded() { - FormDesigner designer = getEditingComponent(); - if (designer == null) { - return false; - } - FormSelection selection = designer.getSelectionModel().getSelection(); - XCreator creator = selection.getSelectedCreator(); - designer.getSelectionModel().deleteSelection(); - - creator.deleteRelatedComponent(creator, designer); - return false; - } - - @Override - public void update() { -// FormDesigner f = this.getEditingComponent(); -// if (f == null) { -// this.setEnabled(false); -// return; -// } -// SelectionModel selection = f.getSelectionModel(); -// this.setEnabled(selection.hasSelectionComponent()); - this.setEnabled(true); - } + public FormDeleteAction(FormDesigner t) { + super(t); + + this.setName(Inter.getLocText("M_Edit-Delete")); + this.setMnemonic('D'); + // Richie:删除菜单图标 + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_report/delete.png")); + this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0)); + } + + @Override + public JComponent createToolBarComponent() { + JComponent comp = super.createToolBarComponent(); + // 除了 BACKSPACE 之外,DELETE 键也要能删除(直接在此处添加绑定,没有按钮提示) + comp.registerKeyboardAction(this, KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW); + return comp; + } + + /** + * 删除 + * + * @return 是否删除成功 + */ + @Override + public boolean executeActionReturnUndoRecordNeeded() { + FormDesigner designer = getEditingComponent(); + if (designer == null) { + return false; + } + FormSelection selection = designer.getSelectionModel().getSelection(); + XCreator creator = selection.getSelectedCreator(); + designer.getSelectionModel().deleteSelection(); + + creator.deleteRelatedComponent(creator, designer); + return false; + } + + @Override + public void update() { + this.setEnabled(true); + } } \ No newline at end of file