/** * Finds the CompositePart containing the given part (if any) * * @param part * @return The MCompositePart or 'null' if none is found */ public static MCompositePart findContainingCompositePart(MPart part) { if (part == null) { return null; } MUIElement curParent = part.getParent(); while (curParent != null && !(curParent instanceof MCompositePart)) { curParent = curParent.getParent(); } return (MCompositePart) curParent; }
/** True is the given model represents an hidden editor */ protected boolean isHiddenEditor(MPart model) { if (model == null || model.getParent() == null || !(model.getParent().getRenderer() instanceof StackRenderer)) { return false; } StackRenderer renderer = (StackRenderer) model.getParent().getRenderer(); CTabItem item = renderer.findItemForPart(model); return (item != null && !item.isShowing()); }
private int lastIndexOfContainer(MElementContainer<?> parent) { for (int i = 0; i < activationList.size(); i++) { MPart mPart = activationList.get(i); MElementContainer<MUIElement> container = mPart.getParent(); if (container == parent) { return i; } else if (container == null) { MPlaceholder placeholder = mPart.getCurSharedRef(); if (placeholder != null && placeholder.getParent() == parent) { return i; } } } return -1; }
private MElementContainer<MUIElement> getParent(MPart part) { MElementContainer<MUIElement> parent = part.getParent(); if (parent == null) { MPlaceholder placeholder = part.getCurSharedRef(); return placeholder == null ? null : placeholder.getParent(); } return parent; }
private MUIElement getParentModel() { MElementContainer<MUIElement> parent = part.getParent(); if (parent == null) { MPlaceholder placeholder = part.getCurSharedRef(); return placeholder == null ? null : placeholder.getParent(); } return parent; }
@Override public IPlaceholderFolderLayout getFolderForView(String id) { MPart view = findPart(perspModel, id); if (view == null) return null; MUIElement stack = view.getParent(); if (stack == null || !(stack instanceof MPartStack)) return null; return new ModeledPlaceholderFolderLayout(this, application, (MPartStack) stack); }
private MElementContainer<MUIElement> getParent(MPart part) { MElementContainer<MUIElement> parent = part.getParent(); if (parent == null) { MPlaceholder placeholder = part.getCurSharedRef(); return placeholder == null ? null : placeholder.getParent(); } return parent; }
public boolean closeEditor(IEditorReference editor) { if (getInternalEditorReferences().contains(editor)) { MPart part = ((EditorReference) editor).getModel(); hidePart(part, false, false, false, false); MElementContainer<MUIElement> parent = part.getParent(); if (parent != null) { parent.getChildren().remove(part); } return true; } return false; }
@Override public Void call(Boolean param) { if (param.booleanValue()) { MElementContainer<MUIElement> parent = element.getParent(); if(parent != null && parent.getSelectedElement() != element ) { element.getParent().setSelectedElement(element); } boolean requiresFocus = requiresFocus(widget); if (requiresFocus) { activate(element, true); } else { activate(element, false); } } return null; } });
private void unsplitPart(MCompositePart compositePart) { if (compositePart == null) { return; } List<MPart> innerElements = ms.findElements(compositePart, null, MPart.class, null); if (innerElements.size() < 3) { return; } MPart originalEditor = innerElements.get(1); // '0' is the composite part // Close the cloned editor *before* removing it from the model MPart clonedEditor = innerElements.get(2); clonedEditor.setToBeRendered(false); MElementContainer<MUIElement> compParent = compositePart.getParent(); int index = compParent.getChildren().indexOf(compositePart); compParent.getChildren().remove(compositePart); originalEditor.getParent().getChildren().remove(originalEditor); compParent.getChildren().add(index, originalEditor); if (ps.getActivePart() == originalEditor) { ps.activate(null); } ps.activate(originalEditor); }
boolean isSelected(MPart part) { MElementContainer<?> parent = part.getParent(); if (parent == null) { MPlaceholder placeholder = part.getCurSharedRef(); if (placeholder == null) { return false; } parent = placeholder.getParent(); return parent instanceof MGenericStack ? parent.getSelectedElement() == placeholder : parent != null; } return !(parent instanceof MGenericStack) || parent.getSelectedElement() == part; }
void splitPart(MPart partToSplit, boolean horizontal) { MElementContainer<MUIElement> parent = partToSplit.getParent(); int index = parent.getChildren().indexOf(partToSplit); MPart editorClone = (MPart) ms.cloneElement(partToSplit, null); MCompositePart compPart = createCompositePart(partToSplit); // Add the new composite part to the model compPart.getChildren().add(editorClone); compPart.setSelectedElement(editorClone); parent.getChildren().add(index, compPart); parent.setSelectedElement(compPart); // Now, add the original part into the composite int orientation = horizontal ? EModelService.ABOVE : EModelService.LEFT_OF; ms.insert(partToSplit, editorClone, orientation, 0.5f); ps.activate(partToSplit); } }
private MPart findActivationCandidate(Collection<MPart> candidates) { for (MPart candidate : candidates) { // make sure it's rendered and visible if (isValid(candidate)) { MPlaceholder placeholder = partService.getLocalPlaceholder(candidate); MElementContainer<MUIElement> parent = placeholder == null ? candidate.getParent() : placeholder.getParent(); // stacks require special considerations because we don't want to activate something // that's not the selected element if possible get the selected element if (parent instanceof MGenericStack) { MUIElement selection = parent.getSelectedElement(); // if the selected element is the current candidate, the candidate is valid if (selection == candidate || selection == placeholder) { return candidate; } } else { // not in a stack, just return the candidate then return candidate; } } } return null; }
/** * Records the specified parent part's selected element in the activation history if the parent * is a stack. * * @param part * the part whose parent's selected element should be checked for activation history * recording */ private void recordStackActivation(MPart part) { MElementContainer<? extends MUIElement> parent = part.getParent(); if (parent instanceof MGenericStack) { recordSelectedActivation(parent); } else if (parent == null) { MPlaceholder placeholder = part.getCurSharedRef(); if (placeholder != null) { parent = placeholder.getParent(); if (parent instanceof MGenericStack) { recordSelectedActivation(parent); } } } }
@Override public void showEditor(IEditorReference ref) { IWorkbenchPart wPart = ref.getPart(false); MPart part = ((EditorReference)ref).getModel(); part.setVisible(true); //Workaround to get content visible. Otherwise the content sometimes is not rendered. MElementContainer<MUIElement> partStack = part.getParent(); partStack.setSelectedElement(null); partStack.setSelectedElement(part); wPart.setFocus(); }
List<CTabItem> getItemsToSet(MPart part) { List<CTabItem> itemsToSet = new ArrayList<>(); MUIElement partParent = part.getParent(); if (partParent instanceof MPartStack) { addItemToSet(itemsToSet, part); } else if (partParent instanceof MPartSashContainer) { MElementContainer<MUIElement> parentParent = partParent.getParent(); if (parentParent instanceof MPart) { MPart parentParentMPart = (MPart) parentParent; addItemToSet(itemsToSet, parentParentMPart); } } else if (part.getCurSharedRef() != null) { MWindow topWin = modelService.getTopLevelWindowFor(part); List<MPlaceholder> partRefs = modelService.findElements(topWin, part.getElementId(), MPlaceholder.class); for (MPlaceholder ref : partRefs) { CTabItem item = findItemForPart(ref, null); if (item != null) { itemsToSet.add(item); } } } return itemsToSet; }
@Inject @Optional void subscribeTopicChildrenChanged(@UIEventTopic(UIEvents.ElementContainer.TOPIC_CHILDREN) Event event) { Object changedObj = event.getProperty(UIEvents.EventTags.ELEMENT); // only interested in changes to toolbars if (!(changedObj instanceof MToolBar)) { return; } MUIElement container = modelService.getContainer((MUIElement) changedObj); // check if this is a part's toolbar if (container instanceof MPart) { MElementContainer<?> parent = ((MPart) container).getParent(); // only relayout if this part is the selected element and we // actually rendered this element if (parent instanceof MPartStack && parent.getSelectedElement() == container && parent.getRenderer() == StackRenderer.this) { Object widget = parent.getWidget(); if (widget instanceof CTabFolder) { adjustTopRight((CTabFolder) widget); } } } }
public MUIElement getActiveElement(IWorkbenchPartReference ref) { MUIElement element = null; MPerspective curPersp = modelService.getActivePerspective(window); if (curPersp == null) return null; MPlaceholder eaPH = (MPlaceholder) modelService.find(IPageLayout.ID_EDITOR_AREA, curPersp); MPart model = ((WorkbenchPartReference) ref).getModel(); MPlaceholder placeholder = model.getCurSharedRef(); switch (modelService.getElementLocation(placeholder == null ? model : placeholder)) { case EModelService.IN_ACTIVE_PERSPECTIVE: case EModelService.OUTSIDE_PERSPECTIVE: MUIElement parent = placeholder == null ? model.getParent() : placeholder.getParent(); if (parent instanceof MPartStack) { element = parent; } break; case EModelService.IN_SHARED_AREA: element = eaPH; break; } return element; }
public void handleEvent(Event event) { Object changedObj = event .getProperty(UIEvents.EventTags.ELEMENT); // only interested in changes to toolbars if (!(changedObj instanceof MToolBar)) { return; } Object container = ((EObject) changedObj).eContainer(); // check if this is a part's toolbar if (container instanceof MPart) { MElementContainer<?> parent = ((MPart) container) .getParent(); // only relayout if this part is the selected element and we // actually rendered this element if (parent instanceof MPartStack && parent.getSelectedElement() == container && parent.getRenderer() == StackRenderer.this) { Object widget = parent.getWidget(); if (widget instanceof CTabFolder) { layoutTopRight((CTabFolder) widget); } } } } };
private void updatePartTab(Event event, MPart part) { String attName = (String) event.getProperty(UIEvents.EventTags.ATTNAME); Object newValue = event.getProperty(UIEvents.EventTags.NEW_VALUE); // Is the part directly under the stack? MElementContainer<MUIElement> parent = part.getParent(); if (parent != null && parent.getRenderer() == StackRenderer.this) { CTabItem cti = findItemForPart(part, parent); if (cti != null) { updateTab(cti, part, attName, newValue); } return; } // Do we have any stacks with place holders for the element // that's changed? Set<MPlaceholder> refs = renderedMap.get(part); if (refs != null) { for (MPlaceholder ref : refs) { MElementContainer<MUIElement> refParent = ref.getParent(); if (refParent.getRenderer() instanceof StackRenderer) { CTabItem cti = findItemForPart(ref, refParent); if (cti != null) { updateTab(cti, part, attName, newValue); } } } } }