@Override protected void performAction(Node[] nodes) { if (nodes != null && nodes.length == 1) { RADComponentCookie radCookie = nodes[0].getCookie(RADComponentCookie.class); RADComponent comp = (radCookie != null) ? radCookie.getRADComponent() : null; if (comp != null) { RADComponent topComp = comp.getFormModel().getTopRADComponent(); if (topComp != comp && EditContainerAction.isEditableComponent(topComp)) { FormDesigner designer = getDesigner(topComp); if (designer != null && topComp != designer.getTopDesignComponent()) { designer.setTopDesignComponent((RADVisualComponent) topComp, true); designer.requestActive(); // NodeAction is quite unreliable in enabling, do it ourselves for sure Node[] n = new Node[] {topComp.getNodeReference()}; if (n[0] != null) { EditContainerAction.reenable(n); DesignParentAction.reenable(n); EditFormAction.reenable(n); } } } } } }
@Override protected boolean enable(Node[] nodes) { boolean ret = false; if (nodes != null && nodes.length == 1) { RADComponentCookie radCookie = nodes[0].getCookie(RADComponentCookie.class); RADComponent comp = (radCookie != null) ? radCookie.getRADComponent() : null; if (comp != null) { RADComponent topComp = comp.getFormModel().getTopRADComponent(); if (comp != topComp && EditContainerAction.isEditableComponent(topComp)) { FormDesigner designer = getDesigner(comp); if (designer != null && comp == designer.getTopDesignComponent()) { ret = true; } } } } return ret; }
private void addContainerActions(List<Action> actions) { if (component instanceof RADVisualContainer) { if (!((RADVisualContainer) component).hasDedicatedLayoutSupport()) { actions.add(SystemAction.get(SelectLayoutAction.class)); actions.add(SystemAction.get(CustomizeLayoutAction.class)); } if (MenuEditLayer.isMenuBarContainer(component)) { actions.add(SystemAction.get(InsertMenuAction.class)); } else if (MenuEditLayer.isMenuRelatedContainer(component)) { actions.add(SystemAction.get(AddSubItemAction.class)); } else { // only use the AddAction for non-menu containers actions.add(SystemAction.get(AddAction.class)); } } if (getNewTypes().length != 0) { actions.add(null); actions.add(SystemAction.get(NewAction.class)); } if (EditContainerAction.isEditableComponent(component)) { actions.add(SystemAction.get(EditContainerAction.class)); } if (DesignParentAction.isParentEditableComponent(component)) { actions.add(SystemAction.get(DesignParentAction.class)); } if (component.getParentComponent() == null) { if (component instanceof RADVisualComponent) { actions.add(SystemAction.get(DefaultSizeAction.class)); } if (component instanceof RADVisualContainer && !((RADVisualContainer) component).hasDedicatedLayoutSupport()) { actions.add(SystemAction.get(CustomizeEmptySpaceAction.class)); } } addSeparator(actions); }