diff --git a/designer_base/src/com/fr/design/gui/imenu/UIPopupMenu.java b/designer_base/src/com/fr/design/gui/imenu/UIPopupMenu.java index 9fcf821e0c..492d241cd2 100644 --- a/designer_base/src/com/fr/design/gui/imenu/UIPopupMenu.java +++ b/designer_base/src/com/fr/design/gui/imenu/UIPopupMenu.java @@ -10,6 +10,7 @@ import com.fr.design.constants.UIConstants; public class UIPopupMenu extends JPopupMenu{ private static final float REC = 8f; private boolean onlyText = false; + public static UIPopupMenu EMPTY = new UIPopupMenu(); public UIPopupMenu() { super(); setBackground(UIConstants.NORMAL_BACKGROUND); diff --git a/designer_base/src/com/fr/design/mainframe/EastRegionContainerPane.java b/designer_base/src/com/fr/design/mainframe/EastRegionContainerPane.java index 5c37e53202..0c9d536d99 100644 --- a/designer_base/src/com/fr/design/mainframe/EastRegionContainerPane.java +++ b/designer_base/src/com/fr/design/mainframe/EastRegionContainerPane.java @@ -499,7 +499,6 @@ public class EastRegionContainerPane extends UIEastResizableContainer { private boolean isEnabled = true; // 是否可用 private Set visibleModes; private Set enableModes; - private static final int MAX_PARA_HEIGHT = 240; // 完整icon路径为 ICON_BASE_DIR + btnIconName + iconSuffix private static final String ICON_BASE_DIR = "/com/fr/design/images/buttonicon/propertiestab/"; @@ -621,8 +620,6 @@ public class EastRegionContainerPane extends UIEastResizableContainer { public void replaceHeaderPane(JComponent pane) { contentArea.remove(headerPane); - int height = Math.min(pane.getPreferredSize().height, MAX_PARA_HEIGHT); - pane.setPreferredSize(new Dimension(pane.getPreferredSize().width, height)); headerPane = pane; contentArea.add(headerPane, BorderLayout.NORTH); 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 7a49657918..f337ea14ff 100644 --- a/designer_form/src/com/fr/design/designer/creator/XCreator.java +++ b/designer_form/src/com/fr/design/designer/creator/XCreator.java @@ -688,9 +688,9 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo * 创建右击弹出菜单 * */ - public JPopupMenu createPopupMenu(FormDesigner formDesigner) { + public UIPopupMenu createPopupMenu(FormDesigner formDesigner) { UpdateAction[] actions = formDesigner.getActions(); - JPopupMenu popup = new UIPopupMenu(); + UIPopupMenu popup = new UIPopupMenu(); for (int i = 0; i < actions.length; i++) { if (i == SHORTS_SEPARATOR_POS) { popup.addSeparator(); diff --git a/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java b/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java index e4281174b6..4f0476388d 100644 --- a/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java +++ b/designer_form/src/com/fr/design/designer/creator/XLayoutContainer.java @@ -564,4 +564,12 @@ public abstract class XLayoutContainer extends XBorderStyleWidgetCreator impleme return false; } + /** + * 内部组件是否支持叠加顺序的调整 + * return boolean + */ + public boolean supportInnerOrderChangeActions() { + return false; + } + } \ No newline at end of file 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 0baa2cc530..eba8cd6888 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java @@ -513,4 +513,9 @@ public class XWAbsoluteLayout extends XLayoutContainer { widget.setBounds(xCreator.getBounds()); } } + + @Override + public boolean supportInnerOrderChangeActions() { + return true; + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java index 5ab71c3d2e..3d52b2beff 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java @@ -1,13 +1,5 @@ package com.fr.design.designer.creator.cardlayout; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.event.MouseEvent; - -import javax.swing.Icon; - import com.fr.base.BaseUtils; import com.fr.base.background.ColorBackground; import com.fr.design.designer.beans.AdapterBus; @@ -15,6 +7,7 @@ import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.models.SelectionModel; import com.fr.design.designer.creator.XButton; import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.mainframe.EditingMouseListener; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormHierarchyTreePane; @@ -25,6 +18,10 @@ import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; +import javax.swing.*; +import java.awt.*; +import java.awt.event.MouseEvent; + public class XCardAddButton extends XButton{ private XWCardTagLayout tagLayout; @@ -110,6 +107,11 @@ public class XCardAddButton extends XButton{ tagLayout.setTabsAndAdjust(); LayoutUtils.layoutRootContainer(designer.getRootComponent()); } + + @Override + public UIPopupMenu createPopupMenu(FormDesigner formDesigner) { + return UIPopupMenu.EMPTY; // 不要菜单 + } private void initRelateLayout(){ XWCardTitleLayout titleLayout = (XWCardTitleLayout)this.getBackupParent(); diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java index 784fd61fe8..cfa60b9fc4 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java @@ -14,6 +14,7 @@ import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.mainframe.EditingMouseListener; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormHierarchyTreePane; @@ -32,19 +33,9 @@ import com.fr.general.FRFont; import com.fr.general.Inter; import com.fr.stable.unit.PT; -import javax.swing.Action; -import javax.swing.Icon; -import javax.swing.JComponent; -import javax.swing.JOptionPane; -import javax.swing.JPopupMenu; -import javax.swing.SwingUtilities; +import javax.swing.*; import javax.swing.plaf.basic.BasicLabelUI; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Point; +import java.awt.*; import java.awt.event.MouseEvent; import java.awt.geom.Rectangle2D; import java.util.ArrayList; @@ -224,6 +215,11 @@ public class XCardSwitchButton extends XButton { GUICoreUtils.showPopupMenu(jPopupMenu, editingMouseListener.getDesigner(), e.getX(), e.getY()); } + @Override + public UIPopupMenu createPopupMenu(FormDesigner formDesigner) { + return UIPopupMenu.EMPTY; // 自己有一个showPopupMenu,不需要使用通用的弹出菜单 + } + //删除card,同时修改其他switchbutton和tabfit的index private void deleteCard(XCardSwitchButton button,int index){ String titleName = button.getContentLabel().getText(); diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java index 5c3d80de6e..7a8ed5440e 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java @@ -3,17 +3,6 @@ */ package com.fr.design.designer.creator.cardlayout; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Rectangle; -import java.awt.event.ContainerEvent; -import java.awt.event.MouseEvent; -import java.util.HashMap; -import java.util.Map; - -import javax.swing.border.Border; - import com.fr.base.GraphHelper; import com.fr.base.ScreenResolution; import com.fr.design.designer.beans.AdapterBus; @@ -22,15 +11,12 @@ import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.adapters.layout.FRHorizontalLayoutAdapter; import com.fr.design.designer.beans.adapters.layout.FRVerticalLayoutAdapter; import com.fr.design.designer.beans.models.SelectionModel; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XCreatorUtils; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWHorizontalBoxLayout; -import com.fr.design.designer.creator.XWidgetCreator; +import com.fr.design.designer.creator.*; import com.fr.design.form.layout.FRFlowLayout; import com.fr.design.form.layout.FRHorizontalLayout; import com.fr.design.form.layout.FRVerticalLayout; import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.mainframe.EditingMouseListener; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.WidgetPropertyPane; @@ -43,6 +29,13 @@ import com.fr.form.ui.container.cardlayout.WTabFitLayout; import com.fr.general.ComparatorUtils; import com.fr.general.FRFont; +import javax.swing.border.Border; +import java.awt.*; +import java.awt.event.ContainerEvent; +import java.awt.event.MouseEvent; +import java.util.HashMap; +import java.util.Map; + /** * @date: 2014-11-25-下午3:11:14 */ @@ -242,6 +235,11 @@ public class XWCardTagLayout extends XWHorizontalBoxLayout { } } + @Override + public UIPopupMenu createPopupMenu(FormDesigner formDesigner) { + return UIPopupMenu.EMPTY; // 不要菜单 + } + @Override public int[] getDirections() { return ((XCreator)getParent()).getDirections(); diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java index 90e85b2533..ecdf55e84b 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java @@ -11,15 +11,16 @@ import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.designer.creator.XWFitLayout; import com.fr.design.form.util.XCreatorConstants; import com.fr.design.fun.WidgetPropertyUIProvider; +import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormHierarchyTreePane; import com.fr.design.mainframe.widget.editors.ButtonTypeEditor; import com.fr.design.mainframe.widget.editors.ImgBackgroundEditor; import com.fr.design.utils.gui.LayoutUtils; import com.fr.form.ui.CardSwitchButton; +import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.form.ui.container.cardlayout.WTabFitLayout; -import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.general.Background; import com.fr.general.FRLogger; import com.fr.general.Inter; @@ -27,12 +28,7 @@ import com.fr.stable.ArrayUtils; import com.fr.stable.core.PropertyChangeAdapter; import javax.swing.border.Border; -import java.awt.Color; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Rectangle; +import java.awt.*; import java.beans.IntrospectionException; @@ -103,6 +99,11 @@ public class XWTabFitLayout extends XWFitLayout { super(widget, initSize); } + @Override + public UIPopupMenu createPopupMenu(FormDesigner formDesigner) { + return UIPopupMenu.EMPTY; // 不要菜单 + } + /** * 得到属性名 * @return 属性名 diff --git a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java index a6dbc913cd..5f45afa501 100644 --- a/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java +++ b/designer_form/src/com/fr/design/mainframe/EditingMouseListener.java @@ -14,6 +14,7 @@ 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.imenu.UIPopupMenu; import com.fr.design.gui.xpane.ToolTipEditor; import com.fr.design.icon.IconPathConstants; import com.fr.design.utils.ComponentUtils; @@ -540,8 +541,8 @@ 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) { + UIPopupMenu cellPopupMenu = creator.createPopupMenu(designer); + if (cellPopupMenu != UIPopupMenu.EMPTY) { GUICoreUtils.showPopupMenu(cellPopupMenu, designer, e.getX(), e.getY()); } } diff --git a/designer_form/src/com/fr/design/mainframe/FormDesigner.java b/designer_form/src/com/fr/design/mainframe/FormDesigner.java index 851a2cdee6..4b2c664b40 100644 --- a/designer_form/src/com/fr/design/mainframe/FormDesigner.java +++ b/designer_form/src/com/fr/design/mainframe/FormDesigner.java @@ -46,7 +46,6 @@ import com.fr.general.ComparatorUtils; import com.fr.general.FRLogger; import com.fr.general.Inter; import com.fr.stable.ArrayUtils; -import com.fr.stable.CoreGraphHelper; import com.fr.stable.bridge.StableFactory; import javax.swing.*; @@ -148,7 +147,6 @@ public class FormDesigner extends TargetComponent
implements TreeSelection new FormDesignerDropTarget(this);// 添加Drag and Drop. this.switchAction = switchAction; - populateParameterPropertyPane(); } /** @@ -1013,6 +1011,9 @@ public class FormDesigner extends TargetComponent implements TreeSelection */ @Override public void valueChanged(TreeSelectionEvent e) { + if (DesignerContext.getDesignerFrame().getSelectedJTemplate() == null) { // 初始化完成前,不响应事件 + return; + } ComponentTree tree = (ComponentTree) e.getSource(); TreePath[] paths = tree.getSelectionPaths(); @@ -1139,8 +1140,8 @@ public class FormDesigner extends TargetComponent implements TreeSelection // 当前选中控件可以上移一层吗? public boolean isCurrentComponentMovableUp() { XCreator creator = getSelectionModel().getSelection().getSelectedCreator(); - Container container = creator.getParent(); - if (container == null) { + XLayoutContainer container = (XLayoutContainer) creator.getParent(); + if (container == null || !container.supportInnerOrderChangeActions()) { return false; } return creator.isMovable() && container.getComponentZOrder(creator) > 0; @@ -1149,8 +1150,8 @@ public class FormDesigner extends TargetComponent implements TreeSelection // 当前选中控件可以下移一层吗? public boolean isCurrentComponentMovableDown() { XCreator creator = getSelectionModel().getSelection().getSelectedCreator(); - Container container = creator.getParent(); - if (container == null) { + XLayoutContainer container = (XLayoutContainer) creator.getParent(); + if (container == null || !container.supportInnerOrderChangeActions()) { return false; } return creator.isMovable() && container.getComponentZOrder(creator) < container.getComponentCount() - 1; diff --git a/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java b/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java index 212fe33897..c5a27044df 100644 --- a/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java +++ b/designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java @@ -13,7 +13,6 @@ import com.fr.design.gui.controlpane.ShortCut4JControlPane; 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.gui.style.BorderPane; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.menu.ShortCut; import com.fr.design.menu.ToolBarDef; @@ -96,8 +95,7 @@ public class FormHierarchyTreePane extends FormDockView implements HierarchyTree formDesigner.addDesignerEditListener(new DesignerEditListener() { @Override public void fireCreatorModified(DesignerEvent evt) { - componentTree.setAndScrollSelectionPath(componentTree.getSelectedTreePath()); - componentTree.refreshUI(); + refreshComponentTree(); } }); @@ -110,6 +108,14 @@ public class FormHierarchyTreePane extends FormDockView implements HierarchyTree } add(getWidgetPane(), BorderLayout.CENTER); + + // 这里要刷新一下,否则控件树中没有任何一个控件处于选中状态 + refreshComponentTree(); + } + + private void refreshComponentTree() { + componentTree.setAndScrollSelectionPath(componentTree.getSelectedTreePath()); + componentTree.refreshUI(); } private JPanel getWidgetPane() { diff --git a/designer_form/src/com/fr/design/parameter/ParameterPropertyPane.java b/designer_form/src/com/fr/design/parameter/ParameterPropertyPane.java index 6ce5a2ff9e..052f7cc2f5 100644 --- a/designer_form/src/com/fr/design/parameter/ParameterPropertyPane.java +++ b/designer_form/src/com/fr/design/parameter/ParameterPropertyPane.java @@ -26,6 +26,7 @@ public class ParameterPropertyPane extends JPanel{ private static final int PADDING_SMALL = 5; private static final int PADDING_MIDDLE = 10; private static final int PADDING_LARGE = 15; + private static final int ADD_PARA_PANE_MAX_HEIGHT = 95; public static final ParameterPropertyPane getInstance() { if (THIS == null) { @@ -86,6 +87,7 @@ public class ParameterPropertyPane extends JPanel{ // 显示或隐藏添加参数面板 public void refreshState(JTemplate jt) { setAddParaPaneVisible(toolbarPane.hasSelectedLabelItem(), jt); + updateAddParaPaneSize(); } // 显示或隐藏添加参数面板 @@ -93,6 +95,16 @@ public class ParameterPropertyPane extends JPanel{ refreshState(DesignerContext.getDesignerFrame().getSelectedJTemplate()); } + private void updateAddParaPaneSize() { + if (!addParaPane.isVisible()) { + return; + } + addParaPane.setPreferredSize(null); + int height = Math.min(addParaPane.getPreferredSize().height, ADD_PARA_PANE_MAX_HEIGHT); + addParaPane.setPreferredSize(new Dimension(addParaPane.getPreferredSize().width, height)); + repaintContainer(); + } + public void setAddParaPaneVisible(boolean isVisible, JTemplate jt) { if (isVisible == addParaPane.isVisible() || formHierarchyTreePaneWrapper == null) { return; @@ -112,7 +124,6 @@ public class ParameterPropertyPane extends JPanel{ addParaPane.setVisible(false); this.setPreferredSize(new Dimension(getWidth(), formHierarchyTreePaneWrapper.getPreferredSize().height + UIConstants.GAP_NORMAL)); } - repaintContainer(); } private void setEditor(FormDesigner editor) {