package org.xmind.ui.internal.e4handlers; import java.util.Arrays; import java.util.List; import javax.inject.Inject; import javax.inject.Named; import org.eclipse.e4.core.di.annotations.CanExecute; import org.eclipse.e4.core.di.annotations.Execute; import org.eclipse.e4.core.di.annotations.Optional; import org.eclipse.e4.ui.model.application.MApplication; import org.eclipse.e4.ui.model.application.descriptor.basic.MPartDescriptor; import org.eclipse.e4.ui.model.application.ui.basic.MPart; import org.eclipse.e4.ui.model.application.ui.basic.MPartStack; import org.eclipse.e4.ui.model.application.ui.menu.MToolItem; import org.eclipse.e4.ui.workbench.modeling.EModelService; import org.eclipse.e4.ui.workbench.modeling.EPartService; import org.xmind.ui.internal.e4models.IModelConstants; public class ToggleModelPartHandler { private static final String TAG_EDITOR = "Editor"; //$NON-NLS-1$ @Inject private EModelService modelService; @Inject private MApplication application; @Execute public void run(EPartService partService, @Optional @Named(IModelConstants.KEY_MODEL_PART_COMMAND_PARAMETER_PART_ID) String partId, @Optional @Named(IModelConstants.KEY_MODEL_PART_COMMAND_PARAMETER_PARTSTACK_ID) String partStackId, @Optional MToolItem toolItemModel, MApplication appli, EModelService modelService) { if (partId == null) { if (partStackId == null) partStackId = "org.xmind.ui.stack.right"; //$NON-NLS-1$ partId = (String) appli.getContext() .get(IModelConstants.KEY_LAST_OPENED_MODEL_PART_ID); if (partId == null) { partId = "org.xmind.ui.modelPart.properties"; //$NON-NLS-1$ } } MPartDescriptor partDescriptor = null; for (MPartDescriptor mp : appli.getDescriptors()) { if (partId.equals(mp.getElementId())) { partDescriptor = mp; break; } } if (partDescriptor == null) return; List<MPartStack> partStacks = modelService.findElements(appli, partStackId, MPartStack.class, null); boolean partStackExisted = !partStacks.isEmpty(); MPartStack partStack = partStackExisted ? partStacks.get(0) : createPartStack(modelService, partStackId); MPart p = partService.findPart(partId); if (p == null) { p = partService.createPart(partId); partStack.getChildren().add(p); partStack.setSelectedElement(p); p.setVisible(false); } if (!partStackExisted) { appli.getChildren().get(0).getChildren().add(p); } if (!p.isVisible()) { partStack.setVisible(true); p.setVisible(true); partService.activate(p, true); } else { p.setVisible(false); partService.hidePart(p); } appli.getContext().set(IModelConstants.KEY_LAST_OPENED_MODEL_PART_ID, partId); // boolean toShow = toolItemModel.isSelected(); // if (toShow) { // p.setVisible(true); // partService.activate(p, true); // } else { // p.setVisible(false); // partService.hidePart(p); // } } private MPartStack createPartStack(EModelService modelService, String partStackId) { MPartStack partStack = modelService .createModelElement(MPartStack.class); partStack.setElementId(partStackId); partStack.setVisible(true); return partStack; } @CanExecute public boolean canExecute() { List<MPart> editors = modelService.findElements(application, null, MPart.class, Arrays.asList(TAG_EDITOR)); if (!editors.isEmpty()) { return true; } return false; } }