]> gerrit.simantics Code Review - simantics/district.git/blob - org.simantics.district.route.ui/src/org/simantics/district/route/ui/RouteView.java
Improved Routes view functionality
[simantics/district.git] / org.simantics.district.route.ui / src / org / simantics / district / route / ui / RouteView.java
1 package org.simantics.district.route.ui;
2
3 import java.util.List;
4
5 import javax.annotation.PostConstruct;
6 import javax.annotation.PreDestroy;
7 import javax.inject.Inject;
8
9 import org.eclipse.e4.core.services.events.IEventBroker;
10 import org.eclipse.e4.ui.di.Focus;
11 import org.eclipse.e4.ui.model.application.MApplication;
12 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
13 import org.eclipse.e4.ui.model.application.ui.menu.MMenuContribution;
14 import org.eclipse.e4.ui.model.application.ui.menu.MMenuFactory;
15 import org.eclipse.e4.ui.model.application.ui.menu.MPopupMenu;
16 import org.eclipse.e4.ui.services.EMenuService;
17 import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
18 import org.eclipse.swt.widgets.Composite;
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
21
22 /**
23  * @author Tuukka Lehtonen
24  * @since 6.08
25  */
26 public class RouteView {
27
28     private static final Logger LOGGER = LoggerFactory.getLogger(RouteView.class);
29
30     private static final String POPUP_CONTRIBUTION_ID = "org.simantics.district.route.ui.contextMenu";
31     public static final String POPUP_ELEMENT_ID = "org.simantics.district.route.ui.popup";
32
33     @Inject ESelectionService selectionService;
34     @Inject IEventBroker broker;
35     RouteTree ui;
36
37     /**
38      * See
39      * 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
40      * 
41      * Cannot contribute context menu via fragment at this point
42      */
43     @Inject
44     public void init(MPart part, MApplication app) {
45         MPopupMenu popupMenu = MMenuFactory.INSTANCE.createPopupMenu();
46         popupMenu.setElementId(POPUP_ELEMENT_ID);
47         List<MMenuContribution> menuContributions = app.getMenuContributions();
48         for (MMenuContribution menuContribution : menuContributions) {
49             if (POPUP_CONTRIBUTION_ID.equals(menuContribution.getParentId())) {
50                 // ok, add to menu
51                 popupMenu.getChildren().addAll(menuContribution.getChildren());
52             }
53         }
54         part.getMenus().add(popupMenu);
55     }
56
57     @PostConstruct
58     public void postConstruct(Composite parent, EMenuService menuService) {
59         this.ui = new RouteTree(parent, 0, selectionService);
60         if (!(menuService.registerContextMenu(this.ui.getTree(), POPUP_ELEMENT_ID)))
61             LOGGER.warn("Could not register context menu {}", POPUP_ELEMENT_ID);
62     }
63
64     @PreDestroy
65     public void dispose() {
66         ui = null;
67     }
68
69     @Focus
70     public void onFocus() {
71         ui.setFocus();
72     }
73
74     public void editCurrentSelection() {
75         ui.editCurrentSelection();
76     }
77
78 }