From 1e05a18b4c010b3e16e619109b8fa1b5db2753d7 Mon Sep 17 00:00:00 2001 From: plough Date: Tue, 5 Jun 2018 11:58:17 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-6558=20&=20REPORT-6443=20&=20REPORT-6645?= =?UTF-8?q?=20=E7=BB=84=E4=BB=B6=E5=8F=A0=E5=8A=A0=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=BA=A4=E4=BA=92=E9=AA=8C=E6=94=B6=EF=BC=9B=E6=8E=A7=E4=BB=B6?= =?UTF-8?q?=E6=A0=91=E6=B6=88=E5=A4=B1=E9=97=AE=E9=A2=98=3D>=E5=87=8F?= =?UTF-8?q?=E5=B0=91=E5=AF=B9=E5=85=B6=E4=BB=96=E5=9C=B0=E6=96=B9=E7=9A=84?= =?UTF-8?q?=E5=BD=B1=E5=93=8D=EF=BC=9B=E5=8F=82=E6=95=B0=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E9=87=8C=E7=9A=84bug2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/actions/UpdateAction.java | 9 ++- .../design/event/DesignerOpenedListener.java | 13 ++++ .../fr/design/mainframe/DesignerFrame.java | 19 +++++ .../src/com/fr/start/BaseDesigner.java | 1 + .../designer/beans/actions/CopyAction.java | 3 +- .../designer/beans/actions/CutAction.java | 3 +- .../beans/actions/FormDeleteAction.java | 11 ++- .../beans/actions/FormWidgetEditAction.java | 17 ++++- .../beans/actions/MoveDownAction.java | 12 +--- .../beans/actions/MoveToBottomAction.java | 21 +++--- .../beans/actions/MoveToTopAction.java | 21 +++--- .../designer/beans/actions/MoveUpAction.java | 14 +--- .../actions/behavior/ComponentEnable.java | 20 ++++++ .../actions/behavior/MovableDownEnable.java | 19 +++++ .../actions/behavior/MovableUpEnable.java | 19 +++++ .../actions/behavior/UpdateBehavior.java | 8 +++ .../fr/design/mainframe/ComponentTree.java | 5 ++ .../com/fr/design/mainframe/FormDesigner.java | 70 +++++++++++++++---- .../src/com/fr/design/mainframe/JForm.java | 5 +- .../parameter/ParameterPropertyPane.java | 6 +- 20 files changed, 225 insertions(+), 71 deletions(-) create mode 100644 designer-base/src/com/fr/design/event/DesignerOpenedListener.java create mode 100644 designer-form/src/com/fr/design/designer/beans/actions/behavior/ComponentEnable.java create mode 100644 designer-form/src/com/fr/design/designer/beans/actions/behavior/MovableDownEnable.java create mode 100644 designer-form/src/com/fr/design/designer/beans/actions/behavior/MovableUpEnable.java create mode 100644 designer-form/src/com/fr/design/designer/beans/actions/behavior/UpdateBehavior.java diff --git a/designer-base/src/com/fr/design/actions/UpdateAction.java b/designer-base/src/com/fr/design/actions/UpdateAction.java index e6845745d..d8b9f5385 100644 --- a/designer-base/src/com/fr/design/actions/UpdateAction.java +++ b/designer-base/src/com/fr/design/actions/UpdateAction.java @@ -293,13 +293,20 @@ public abstract class UpdateAction extends ShortCut implements Action { button.setEnabled(this.isEnabled()); //peter:产生tooltip - button.setToolTipText(ActionFactory.createButtonToolTipText(this)); + button.setToolTipText(getToolTipText()); object = button; } return (JComponent) object; } + /** + * 重写此方法,可以自定义 action 的提示文字 + */ + protected String getToolTipText() { + return ActionFactory.createButtonToolTipText(this); + } + /** * Equals */ diff --git a/designer-base/src/com/fr/design/event/DesignerOpenedListener.java b/designer-base/src/com/fr/design/event/DesignerOpenedListener.java new file mode 100644 index 000000000..77c6bcf8f --- /dev/null +++ b/designer-base/src/com/fr/design/event/DesignerOpenedListener.java @@ -0,0 +1,13 @@ +package com.fr.design.event; + +import java.util.EventListener; + +/** + * Created by plough on 2018/1/19. + */ +public interface DesignerOpenedListener extends EventListener { + /** + * Invoked when the target of the listener has changed the rpt content. + */ + public void designerOpened(); +} \ No newline at end of file diff --git a/designer-base/src/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/com/fr/design/mainframe/DesignerFrame.java index cb39540e7..258e140be 100644 --- a/designer-base/src/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/com/fr/design/mainframe/DesignerFrame.java @@ -16,6 +16,7 @@ import com.fr.design.actions.core.ActionFactory; import com.fr.design.constants.UIConstants; import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.datapane.TableDataTreePane; +import com.fr.design.event.DesignerOpenedListener; import com.fr.design.event.TargetModifiedEvent; import com.fr.design.event.TargetModifiedListener; import com.fr.design.file.HistoryTemplateListPane; @@ -95,6 +96,8 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta private static final Integer TOP_LAYER = new Integer((200)); private static java.util.List> appList = new java.util.ArrayList>(); + private List designerOpenedListenerList = new ArrayList<>(); + private ToolBarMenuDock ad; private DesktopCardPane centerTemplateCardPane; @@ -287,6 +290,22 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta } } + /** + * 注册"设计器初始化完成"的监听 + */ + public void addDesignerOpenedListener(DesignerOpenedListener listener) { + designerOpenedListenerList.add(listener); + } + + /** + * 触发"设计器初始化完成"事件 + */ + public void fireDesignerOpened() { + for (DesignerOpenedListener listener : designerOpenedListenerList) { + listener.designerOpened(); + } + } + protected DesktopCardPane getCenterTemplateCardPane() { return centerTemplateCardPane; } diff --git a/designer-base/src/com/fr/start/BaseDesigner.java b/designer-base/src/com/fr/start/BaseDesigner.java index 5d723f579..88b5b890b 100644 --- a/designer-base/src/com/fr/start/BaseDesigner.java +++ b/designer-base/src/com/fr/start/BaseDesigner.java @@ -93,6 +93,7 @@ public abstract class BaseDesigner extends ToolBarMenuDock { + DesignerEnvManager.getEnvManager().getLastOpenFile()); } isException = openFile(df, isException, file); + df.fireDesignerOpened(); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); if (!isException) { diff --git a/designer-form/src/com/fr/design/designer/beans/actions/CopyAction.java b/designer-form/src/com/fr/design/designer/beans/actions/CopyAction.java index a93da2a60..96d397042 100644 --- a/designer-form/src/com/fr/design/designer/beans/actions/CopyAction.java +++ b/designer-form/src/com/fr/design/designer/beans/actions/CopyAction.java @@ -1,6 +1,7 @@ package com.fr.design.designer.beans.actions; import com.fr.base.BaseUtils; +import com.fr.design.designer.beans.actions.behavior.ComponentEnable; import com.fr.design.mainframe.FormDesigner; import com.fr.general.Inter; @@ -18,6 +19,7 @@ public class CopyAction extends FormWidgetEditAction { this.setMnemonic('C'); this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_edit/copy.png")); this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, DEFAULT_MODIFIER)); + setUpdateBehavior(new ComponentEnable()); } @Override @@ -28,5 +30,4 @@ public class CopyAction extends FormWidgetEditAction { } return false; } - } \ No newline at end of file diff --git a/designer-form/src/com/fr/design/designer/beans/actions/CutAction.java b/designer-form/src/com/fr/design/designer/beans/actions/CutAction.java index e47a2c289..b1a5ec428 100644 --- a/designer-form/src/com/fr/design/designer/beans/actions/CutAction.java +++ b/designer-form/src/com/fr/design/designer/beans/actions/CutAction.java @@ -6,6 +6,7 @@ import java.awt.event.KeyEvent; import javax.swing.KeyStroke; import com.fr.base.BaseUtils; +import com.fr.design.designer.beans.actions.behavior.ComponentEnable; import com.fr.general.Inter; import com.fr.design.mainframe.FormDesigner; @@ -19,6 +20,7 @@ public class CutAction extends FormWidgetEditAction { this.setMnemonic('T'); this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_edit/cut.png")); this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, DEFAULT_MODIFIER)); + this.setUpdateBehavior(new ComponentEnable()); } @Override @@ -29,5 +31,4 @@ public class CutAction extends FormWidgetEditAction { } return editPane.cut(); } - } \ No newline at end of file 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 d799fed63..2e9912f1e 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 @@ -8,6 +8,7 @@ import java.awt.event.KeyEvent; import javax.swing.*; import com.fr.base.BaseUtils; +import com.fr.design.designer.beans.actions.behavior.ComponentEnable; import com.fr.general.Inter; import com.fr.design.designer.creator.XCreator; import com.fr.design.mainframe.FormDesigner; @@ -27,6 +28,13 @@ public class FormDeleteAction extends FormWidgetEditAction { // Richie:删除菜单图标 this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_report/delete.png")); this.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0)); + this.setUpdateBehavior(new ComponentEnable()); + } + + @Override + protected String getToolTipText() { + String originText = super.getToolTipText(); + return originText.replace(KeyEvent.getKeyText(KeyEvent.VK_BACK_SPACE), KeyEvent.getKeyText(KeyEvent.VK_DELETE)); } @Override @@ -48,11 +56,8 @@ public class FormDeleteAction extends FormWidgetEditAction { if (designer == null) { return false; } - FormSelection selection = designer.getSelectionModel().getSelection(); - XCreator creator = selection.getSelectedCreator(); designer.getSelectionModel().deleteSelection(); - creator.deleteRelatedComponent(creator, designer); return false; } } \ No newline at end of file diff --git a/designer-form/src/com/fr/design/designer/beans/actions/FormWidgetEditAction.java b/designer-form/src/com/fr/design/designer/beans/actions/FormWidgetEditAction.java index 8fbaec430..b22ac5f76 100644 --- a/designer-form/src/com/fr/design/designer/beans/actions/FormWidgetEditAction.java +++ b/designer-form/src/com/fr/design/designer/beans/actions/FormWidgetEditAction.java @@ -1,23 +1,32 @@ package com.fr.design.designer.beans.actions; import com.fr.design.actions.TemplateComponentAction; +import com.fr.design.designer.beans.actions.behavior.UpdateBehavior; import com.fr.design.mainframe.FormDesigner; +import com.fr.general.Inter; import com.fr.plugin.ExtraClassManager; import com.fr.stable.ReportFunctionProcessor; import com.fr.stable.fun.FunctionProcessor; -import javax.swing.JButton; +import javax.swing.*; import java.awt.event.ActionEvent; public abstract class FormWidgetEditAction extends TemplateComponentAction { + private UpdateBehavior updateBehavior = new UpdateBehavior() { + @Override + public void doUpdate(FormWidgetEditAction action) { + action.setEnabled(true); + } + }; + protected FormWidgetEditAction(FormDesigner t) { super(t); } @Override public void update() { - this.setEnabled(true); + updateBehavior.doUpdate(this); } @Override @@ -36,4 +45,8 @@ public abstract class FormWidgetEditAction extends TemplateComponentAction { + @Override + public void doUpdate(FormWidgetEditAction action) { + FormDesigner designer = action.getEditingComponent(); + if (designer == null) { + action.setEnabled(false); + return; + } + action.setEnabled(!designer.isRootSelected()); + } +} diff --git a/designer-form/src/com/fr/design/designer/beans/actions/behavior/MovableDownEnable.java b/designer-form/src/com/fr/design/designer/beans/actions/behavior/MovableDownEnable.java new file mode 100644 index 000000000..ad73be1b1 --- /dev/null +++ b/designer-form/src/com/fr/design/designer/beans/actions/behavior/MovableDownEnable.java @@ -0,0 +1,19 @@ +package com.fr.design.designer.beans.actions.behavior; + +import com.fr.design.designer.beans.actions.FormWidgetEditAction; +import com.fr.design.mainframe.FormDesigner; + +/** + * Created by plough on 2018/1/19. + */ +public class MovableDownEnable implements UpdateBehavior { + @Override + public void doUpdate(FormWidgetEditAction action) { + FormDesigner designer = action.getEditingComponent(); + if (designer == null) { + action.setEnabled(false); + return; + } + action.setEnabled(designer.isCurrentComponentMovableDown()); + } +} diff --git a/designer-form/src/com/fr/design/designer/beans/actions/behavior/MovableUpEnable.java b/designer-form/src/com/fr/design/designer/beans/actions/behavior/MovableUpEnable.java new file mode 100644 index 000000000..85c12039a --- /dev/null +++ b/designer-form/src/com/fr/design/designer/beans/actions/behavior/MovableUpEnable.java @@ -0,0 +1,19 @@ +package com.fr.design.designer.beans.actions.behavior; + +import com.fr.design.designer.beans.actions.FormWidgetEditAction; +import com.fr.design.mainframe.FormDesigner; + +/** + * Created by plough on 2018/1/19. + */ +public class MovableUpEnable implements UpdateBehavior { + @Override + public void doUpdate(FormWidgetEditAction action) { + FormDesigner designer = action.getEditingComponent(); + if (designer == null) { + action.setEnabled(false); + return; + } + action.setEnabled(designer.isCurrentComponentMovableUp()); + } +} diff --git a/designer-form/src/com/fr/design/designer/beans/actions/behavior/UpdateBehavior.java b/designer-form/src/com/fr/design/designer/beans/actions/behavior/UpdateBehavior.java new file mode 100644 index 000000000..fa56bca01 --- /dev/null +++ b/designer-form/src/com/fr/design/designer/beans/actions/behavior/UpdateBehavior.java @@ -0,0 +1,8 @@ +package com.fr.design.designer.beans.actions.behavior; + +/** + * Created by plough on 2018/1/19. + */ +public interface UpdateBehavior { + public void doUpdate(T t); +} diff --git a/designer-form/src/com/fr/design/mainframe/ComponentTree.java b/designer-form/src/com/fr/design/mainframe/ComponentTree.java index e99b44814..9e3ca677d 100644 --- a/designer-form/src/com/fr/design/mainframe/ComponentTree.java +++ b/designer-form/src/com/fr/design/mainframe/ComponentTree.java @@ -121,6 +121,11 @@ public class ComponentTree extends JTree { scrollPathToVisible(treepath[0]); } + @Override + public void paint(Graphics g) { + super.paint(g); + designer.getSelectionModel(); // 否则参数一个一个加会导致参数面板和body结构出问题 + } /** * 刷新 diff --git a/designer-form/src/com/fr/design/mainframe/FormDesigner.java b/designer-form/src/com/fr/design/mainframe/FormDesigner.java index be8f050a7..5e1184c73 100644 --- a/designer-form/src/com/fr/design/mainframe/FormDesigner.java +++ b/designer-form/src/com/fr/design/mainframe/FormDesigner.java @@ -8,7 +8,14 @@ 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; -import com.fr.design.designer.beans.actions.*; +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.MoveDownAction; +import com.fr.design.designer.beans.actions.MoveToBottomAction; +import com.fr.design.designer.beans.actions.MoveToTopAction; +import com.fr.design.designer.beans.actions.MoveUpAction; +import com.fr.design.designer.beans.actions.PasteAction; 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; @@ -19,8 +26,16 @@ import com.fr.design.designer.beans.location.RootResizeDirection; import com.fr.design.designer.beans.models.AddingModel; 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.XChartEditor; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XCreatorUtils; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.designer.creator.XWAbsoluteBodyLayout; +import com.fr.design.designer.creator.XWAbsoluteLayout; +import com.fr.design.designer.creator.XWBorderLayout; +import com.fr.design.designer.creator.XWParameterLayout; import com.fr.design.designer.properties.FormWidgetAuthorityEditPane; +import com.fr.design.event.DesignerOpenedListener; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.form.util.XCreatorConstants; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; @@ -43,18 +58,29 @@ import com.fr.form.ui.WidgetValue; import com.fr.form.ui.container.WBorderLayout; import com.fr.form.ui.container.WFitLayout; import com.fr.general.ComparatorUtils; -import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; +import com.fr.log.FineLoggerFactory; import com.fr.stable.ArrayUtils; -import com.fr.stable.CoreGraphHelper; import com.fr.stable.bridge.StableFactory; -import javax.swing.*; +import javax.swing.Action; +import javax.swing.JComponent; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.TransferHandler; import javax.swing.border.Border; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.TreePath; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Insets; +import java.awt.Point; +import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.lang.reflect.InvocationHandler; @@ -350,11 +376,11 @@ public class FormDesigner extends TargetComponent
implements TreeSelection } parameterArray = null; - refreshParameter(); + //parameter多的时候,不刷新会出现控件边界交叉 refreshRoot(); - //不知道为什么添加完参数后控件树只有一个label,这儿刷新一下控件树好了 - EastRegionContainerPane.getInstance().refreshDownPane(); + // 最后刷新"添加参数面板"和控件树 + refreshParameter(); } private void addParaPaneTooltips() { @@ -679,6 +705,13 @@ public class FormDesigner extends TargetComponent implements TreeSelection } }); + + DesignerContext.getDesignerFrame().addDesignerOpenedListener(new DesignerOpenedListener() { + @Override + public void designerOpened() { + setToolbarButtons(); + } + }); } /** @@ -1040,8 +1073,21 @@ public class FormDesigner extends TargetComponent implements TreeSelection showAuthorityEditPane(); } //先选中再检查 - setToolbarButtons(paths.length == 1 && tree.getSelectionPath().getParentPath() == null); + setToolbarButtons(); + } + } + + /** + * 是否选中了自适应布局或底层form + */ + public boolean isRootSelected() { + ComponentTree tree = FormHierarchyTreePane.getInstance().getComponentTree(); + TreePath[] paths = tree.getSelectionPaths(); + if (paths == null) { + return true; } + boolean isForm = paths.length == 1 && tree.getSelectionPath().getParentPath() == null; + return isForm || isRoot(getSelectionModel().getSelection().getSelectedCreator()); } /** @@ -1074,9 +1120,9 @@ public class FormDesigner extends TargetComponent implements TreeSelection } - protected void setToolbarButtons(boolean flag) { + protected void setToolbarButtons() { //自适应布局和底层都不能删除 - DesignerContext.getDesignerFrame().checkCombineUp(!(isRoot(getSelectionModel().getSelection().getSelectedCreator()) || flag), NAME_ARRAY_LIST); + DesignerContext.getDesignerFrame().checkCombineUp(!isRootSelected(), NAME_ARRAY_LIST); } private void invalidateLayout() { diff --git a/designer-form/src/com/fr/design/mainframe/JForm.java b/designer-form/src/com/fr/design/mainframe/JForm.java index 85f8f5d55..2a660d52d 100644 --- a/designer-form/src/com/fr/design/mainframe/JForm.java +++ b/designer-form/src/com/fr/design/mainframe/JForm.java @@ -259,15 +259,12 @@ public class JForm extends JTemplate implements BaseJForm { private XComponent lastAffectedCreator; @Override public void fireCreatorModified(DesignerEvent evt) { - if (formDesign.getArea() == null || !formDesign.getArea().isValid()) { - return; - } if (evt.getCreatorEventID() == DesignerEvent.CREATOR_CUTED) { setPropertyPaneChange(formDesign.getRootComponent()); } else if (evt.getCreatorEventID() == DesignerEvent.CREATOR_DELETED) { // 在 delete 之前,会先 select 父组件。这里直接传入 lastAffectedCreator 就好了 setPropertyPaneChange(lastAffectedCreator); - } else if (evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED || evt.getCreatorEventID() == DesignerEvent.CREATOR_EDITED) { + } else if (evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED) { lastAffectedCreator = evt.getAffectedCreator(); setPropertyPaneChange(lastAffectedCreator); } diff --git a/designer-form/src/com/fr/design/parameter/ParameterPropertyPane.java b/designer-form/src/com/fr/design/parameter/ParameterPropertyPane.java index cf393be8d..df55a5ab6 100644 --- a/designer-form/src/com/fr/design/parameter/ParameterPropertyPane.java +++ b/designer-form/src/com/fr/design/parameter/ParameterPropertyPane.java @@ -113,7 +113,7 @@ public class ParameterPropertyPane extends JPanel{ } public void setAddParaPaneVisible(boolean isVisible, JTemplate jt) { - if (isVisible == addParaPane.isVisible() || formHierarchyTreePaneWrapper == null) { + if (formHierarchyTreePaneWrapper == null) { return; } // 表单中,只有添加并选中参数面板时,才显示 @@ -129,7 +129,9 @@ public class ParameterPropertyPane extends JPanel{ this.setPreferredSize(null); } else { addParaPane.setVisible(false); - this.setPreferredSize(new Dimension(getWidth(), formHierarchyTreePaneWrapper.getPreferredSize().height + UIConstants.GAP_NORMAL)); + if (formHierarchyTreePaneWrapper.getPreferredSize().height > 0) { + this.setPreferredSize(new Dimension(getWidth(), formHierarchyTreePaneWrapper.getPreferredSize().height + UIConstants.GAP_NORMAL)); + } } }