public static void createParts( MApplication application, EModelService service, EPartService partService) { // Sometimes, when switching windows at startup, the active context // is null or doesn't have a window, and the part instantiation fails. // Ensure that a child context with a window is activated: IEclipseContext activeChild = application.getContext().getActiveChild(); if (activeChild == null || activeChild.get(MTrimmedWindow.class) == null) { boolean activated = false; if (application.getContext() instanceof EclipseContext) { for (IEclipseContext child : ((EclipseContext) application.getContext()).getChildren()) { MTrimmedWindow window = child.get(MTrimmedWindow.class); if (window != null) { child.activate(); activated = true; break; } } } if (!activated) { logger.error("Could not activate window for part instantiation"); // $NON-NLS-1$ return; } } List<MPart> ontops = new ArrayList<MPart>(); for (MPartDescriptor descriptor : application.getDescriptors()) { if (!(descriptor.getPersistedState().containsKey(VISIBLE_ID) && Boolean.toString(true) .equalsIgnoreCase(descriptor.getPersistedState().get(VISIBLE_ID)))) { continue; } List<MPart> existingParts = service.findElements(application, descriptor.getElementId(), MPart.class, null); if (!existingParts.isEmpty()) { // part is already instantiated continue; } MPart part = partService.createPart(descriptor.getElementId()); if (part == null) { continue; } addPartToAppropriateContainer(part, descriptor, application, service); partService.activate(part); if (descriptor.getPersistedState().containsKey(ONTOP_ID) && Boolean.toString(true) .equalsIgnoreCase(descriptor.getPersistedState().get(ONTOP_ID))) { ontops.add(part); } } // reactivate ontop parts to ensure they are on-top for (MPart ontop : ontops) { partService.activate(ontop); } }
@Override public MPartDescriptor getPartDescriptor(String id) { MApplication application = appContext.get(MApplication.class); // If the id contains a ':' use the part before it as the descriptor id int colonIndex = id == null ? -1 : id.indexOf(':'); String descId = colonIndex == -1 ? id : id.substring(0, colonIndex); for (MPartDescriptor descriptor : application.getDescriptors()) { if (descriptor.getElementId().equals(descId)) { return descriptor; } } return null; }
public static void addPartToAppropriateContainer( MPart part, MPartDescriptor descriptor, MApplication application, EModelService service) { // first try and find the container specified by the id in the "parent" persisted state MElementContainer<MUIElement> container = null; String parentId = descriptor.getPersistedState().get(PARENT_ID); if (parentId != null) { @SuppressWarnings("rawtypes") List<MElementContainer> containers = service.findElements(application, parentId, MElementContainer.class, null); if (!containers.isEmpty()) { @SuppressWarnings("unchecked") MElementContainer<MUIElement> uncheckedContainer = containers.get(0); container = uncheckedContainer; } } // next try and find a sibling, and use the sibling's container if (container == null) { List<MPart> siblings = service.findElements(application, descriptor.getElementId(), MPart.class, null); for (MPart sibling : siblings) { if (sibling == part) { continue; } container = sibling.getParent(); if (sibling.isToBeRendered()) { // prefer visible siblings break; } } } if (container != null) { String position = descriptor.getPersistedState().get(POSITION_ID); int index = getPositionIndex(position, container); if (index < 0 || index > container.getChildren().size()) { container.getChildren().add(part); } else { container.getChildren().add(index, part); } } }
private MPart createPart(MPartDescriptor descriptor) { if (descriptor == null) { return null; } MPart part = modelService.createModelElement(MPart.class); part.setElementId(descriptor.getElementId()); part.getMenus().addAll(EcoreUtil.copyAll(descriptor.getMenus())); if (descriptor.getToolbar() != null) { part.setToolbar((MToolBar) EcoreUtil.copy((EObject) descriptor.getToolbar())); } part.setContributorURI(descriptor.getContributorURI()); part.setCloseable(descriptor.isCloseable()); part.setContributionURI(descriptor.getContributionURI()); part.setLabel(descriptor.getLabel()); part.setIconURI(descriptor.getIconURI()); part.setTooltip(descriptor.getTooltip()); part.getHandlers().addAll(EcoreUtil.copyAll(descriptor.getHandlers())); part.getTags().addAll(descriptor.getTags()); part.getPersistedState().putAll(descriptor.getPersistedState()); part.getBindingContexts().addAll(descriptor.getBindingContexts()); return part; }
protected void doOkPressed(MPartDescriptor[] selection) { for (MPartDescriptor d : selection) { PartUtils.openPart(d.getElementId(), true); } }