@Override public void removePerspectiveModel(MPerspective persp, MWindow window) { // pick a new perspective to become active (if any) MUIElement psElement = persp.getParent(); MPerspectiveStack ps = (MPerspectiveStack) psElement; boolean foundNewSelection = false; if (ps.getSelectedElement() == persp) { for (MPerspective p : ps.getChildren()) { if (p != persp && p.isToBeRendered()) { ps.setSelectedElement(p); foundNewSelection = true; break; } } if (!foundNewSelection) { ps.setSelectedElement(null); } } // Remove transient elements (minimized stacks, detached windows) resetPerspectiveModel(persp, window, false); // unrender the perspective and remove it persp.setToBeRendered(false); ps.getChildren().remove(persp); }
@Override public void processContents(MElementContainer<MUIElement> element) { if (element.getChildren().isEmpty()) return; MPerspectiveStack perspectiveStack = (MPerspectiveStack) (MElementContainer<?>) element; MPerspective selectedPerspective = perspectiveStack.getSelectedElement(); if (selectedPerspective == null) { selectedPerspective = (MPerspective) findFirstRenderableAndVisibleElement(perspectiveStack); if (selectedPerspective != null) switchPerspective(selectedPerspective); } else if (!selectedPerspective.isToBeRendered() || !selectedPerspective.isVisible()) { selectedPerspective = (MPerspective) findFirstRenderableAndVisibleElement(perspectiveStack); if (selectedPerspective != null) switchPerspective(selectedPerspective); else perspectiveStack.setSelectedElement(null); } else { // reset selected element (set selected element handler will work) perspectiveStack.setSelectedElement(null); switchPerspective(selectedPerspective); } refreshPerspectiveStackVisibility(perspectiveStack); }
@Override public void doProcessContent(MPerspectiveStack element) { WPerspectiveStack<N, I, IC> stack = getWidget(element); List<WStackItem<I, IC>> items = new ArrayList<WStackItem<I, IC>>(); WStackItem<I, IC> initalItem = null; for (MPerspective e : element.getChildren()) { // Precreate the rendering context for the subitem AbstractRenderer<MPerspective, ?> renderer = factory.getRenderer(e); if (renderer != null && e.isToBeRendered() && e.isVisible()) { WStackItem<I, IC> item = createStackItem(stack, e, renderer); items.add(item); if (e == element.getSelectedElement()) { initalItem = item; } } } if (!items.isEmpty()) { if (initalItem == null || items.size() == 1 || items.get(0) == initalItem) { stack.addItems(items); } else { stack.addItem(initalItem); if (items.get(items.size() - 1) == initalItem) { stack.addItems(0, items.subList(0, items.size() - 1)); } else { int idx = items.indexOf(initalItem); stack.addItems(0, items.subList(0, idx)); stack.addItems(items.subList(idx + 1, items.size())); } } } if (element.getSelectedElement() != null) { handleSelectedElement(element, null, element.getSelectedElement()); } else if (!element.getChildren().isEmpty()) { // TODO Should this be done through the part service???? element.setSelectedElement(element.getChildren().get(0)); } }