package org.simantics.district.route.ui; import java.util.List; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.inject.Inject; import org.eclipse.e4.core.services.events.IEventBroker; import org.eclipse.e4.ui.di.Focus; import org.eclipse.e4.ui.model.application.MApplication; import org.eclipse.e4.ui.model.application.ui.basic.MPart; import org.eclipse.e4.ui.model.application.ui.menu.MHandledToolItem; import org.eclipse.e4.ui.model.application.ui.menu.MMenuContribution; import org.eclipse.e4.ui.model.application.ui.menu.MMenuFactory; import org.eclipse.e4.ui.model.application.ui.menu.MPopupMenu; import org.eclipse.e4.ui.model.application.ui.menu.MToolBar; import org.eclipse.e4.ui.services.EMenuService; import org.eclipse.e4.ui.workbench.modeling.ESelectionService; import org.eclipse.swt.widgets.Composite; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author Tuukka Lehtonen * @since 6.08 */ public class RouteView { private static final Logger LOGGER = LoggerFactory.getLogger(RouteView.class); private static final String POPUP_CONTRIBUTION_ID = "org.simantics.district.route.ui.contextMenu"; public static final String POPUP_ELEMENT_ID = "org.simantics.district.route.ui.popup"; @Inject ESelectionService selectionService; @Inject IEventBroker broker; RouteTree ui; /** * See * http://www.vogella.com/tutorials/EclipsePlugin/article.html#adding-eclipse-4-x-parts-to-eclipse-3-x-applications-via-the-code-org-eclipse-ui-views-code-extension-point * * Cannot contribute context menu via fragment at this point */ @Inject public void init(MPart part, MApplication app) { MPopupMenu popupMenu = MMenuFactory.INSTANCE.createPopupMenu(); popupMenu.setElementId(POPUP_ELEMENT_ID); List menuContributions = app.getMenuContributions(); for (MMenuContribution menuContribution : menuContributions) { if (POPUP_CONTRIBUTION_ID.equals(menuContribution.getParentId())) { // ok, add to menu popupMenu.getChildren().addAll(menuContribution.getChildren()); } } part.getMenus().add(popupMenu); /** * See * http://www.vogella.com/tutorials/EclipsePlugin/article.html#adding-eclipse-4-x-parts-to-eclipse-3-x-applications-via-the-code-org-eclipse-ui-views-code-extension-point * * Cannot contribute toolbar items via fragment at this point */ MToolBar toolBar = MMenuFactory.INSTANCE.createToolBar(); toolBar.setToBeRendered(true); toolBar.getChildren().add(createActivateRouteToolItem(app)); toolBar.getChildren().add(createDeactivateRouteToolItem(app)); part.setToolbar(toolBar); } private static MHandledToolItem createActivateRouteToolItem(MApplication app) { MHandledToolItem createHandledToolItem = MMenuFactory.INSTANCE.createHandledToolItem(); createHandledToolItem.setCommand(app.getCommand("org.simantics.district.route.ui.command.activatecreateroute")); // Command is contributed via fragment //$NON-NLS-1$ createHandledToolItem.setLabel("Activate create route"); createHandledToolItem.setIconURI("platform:/plugin/com.famfamfam.silk/icons/table_add.png"); //$NON-NLS-1$ createHandledToolItem.setEnabled(true); return createHandledToolItem; } private static MHandledToolItem createDeactivateRouteToolItem(MApplication app) { MHandledToolItem createHandledToolItem = MMenuFactory.INSTANCE.createHandledToolItem(); createHandledToolItem.setCommand(app.getCommand("org.simantics.district.route.ui.command.deactivatecreateroute")); // Command is contributed via fragment //$NON-NLS-1$ createHandledToolItem.setLabel("Deactivate create route"); createHandledToolItem.setIconURI("platform:/plugin/com.famfamfam.silk/icons/table_edit.png"); //$NON-NLS-1$ createHandledToolItem.setEnabled(true); return createHandledToolItem; } @PostConstruct public void postConstruct(Composite parent, EMenuService menuService) { this.ui = new RouteTree(parent, 0, selectionService); if (!(menuService.registerContextMenu(this.ui.getTree(), POPUP_ELEMENT_ID))) LOGGER.warn("Could not register context menu {}", POPUP_ELEMENT_ID); } @PreDestroy public void dispose() { ui = null; } @Focus public void onFocus() { ui.setFocus(); } public void editCurrentSelection() { ui.editCurrentSelection(); } }