Skip to content

Package: TreeView$1

TreeView$1

nameinstructionbranchcomplexitylinemethod
doubleClick(DoubleClickEvent)
M: 5 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
{...}
M: 6 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011 Eike Stepper (Berlin, Germany) and others.
3: *
4: * All rights reserved. This program and the accompanying materials
5: * are made available under the terms of the Eclipse Public License 2.0
6: * which accompanies this distribution, and is available at
7: * https://www.eclipse.org/legal/epl-2.0/
8: *
9: * SPDX-License-Identifier: EPL-2.0
10: *
11: * Contributors:
12: * Eike Stepper - initial API and implementation
13: *******************************************************************************/
14: package org.eclipse.emf.ecp.ui.views;
15:
16: import org.eclipse.emf.ecp.ui.actions.RefreshViewerAction;
17: import org.eclipse.emf.ecp.ui.e3.Messages;
18: import org.eclipse.jface.action.Action;
19: import org.eclipse.jface.action.IMenuListener;
20: import org.eclipse.jface.action.IMenuManager;
21: import org.eclipse.jface.action.IToolBarManager;
22: import org.eclipse.jface.action.MenuManager;
23: import org.eclipse.jface.action.Separator;
24: import org.eclipse.jface.dialogs.MessageDialog;
25: import org.eclipse.jface.viewers.DoubleClickEvent;
26: import org.eclipse.jface.viewers.IDoubleClickListener;
27: import org.eclipse.jface.viewers.ILabelDecorator;
28: import org.eclipse.jface.viewers.ISelection;
29: import org.eclipse.jface.viewers.ISelectionChangedListener;
30: import org.eclipse.jface.viewers.ISelectionProvider;
31: import org.eclipse.jface.viewers.IStructuredSelection;
32: import org.eclipse.jface.viewers.StructuredSelection;
33: import org.eclipse.jface.viewers.TreeViewer;
34: import org.eclipse.swt.widgets.Composite;
35: import org.eclipse.swt.widgets.Control;
36: import org.eclipse.swt.widgets.Menu;
37: import org.eclipse.ui.IActionBars;
38: import org.eclipse.ui.IViewSite;
39: import org.eclipse.ui.IWorkbenchActionConstants;
40: import org.eclipse.ui.PartInitException;
41: import org.eclipse.ui.PlatformUI;
42: import org.eclipse.ui.part.ISetSelectionTarget;
43: import org.eclipse.ui.part.ViewPart;
44:
45: /**
46: * @author Eike Stepper
47: * @author Eugen Neufeld
48: */
49: public abstract class TreeView extends ViewPart implements ISelectionProvider, ISetSelectionTarget {
50:         /**
51:          * ID for the separator in the context menu of the {@link TreeView} to add global contributions to (placed on top).
52:          */
53:         public static final String GLOBAL_ADDITIONS = "global_additions"; //$NON-NLS-1$
54:
55:         private final String id;
56:
57:         private TreeViewer viewer;
58:
59:         private Action refreshAction;
60:
61:         /**
62:          * Default constructor.
63:          *
64:          * @param id the ID of the Tree View, used to identify the {@link TreeView}
65:          */
66:         public TreeView(String id) {
67:                 this.id = id;
68:         }
69:
70:         /**
71:          * Retrieves the ID of this {@link TreeView}.
72:          *
73:          * @return the id as a {@link String}
74:          */
75:         public final String getID() {
76:                 return id;
77:         }
78:
79:         /**
80:          * Returns JFace {@link TreeViewer} used in this {@link TreeViewer}.
81:          *
82:          * @return a {@link TreeViewer}
83:          */
84:         public final TreeViewer getViewer() {
85:                 return viewer;
86:         }
87:
88:         /**
89:          * Return the refresh action, which triggers a reload on the TreeViewer.
90:          *
91:          * @return an {@link Action}
92:          */
93:         public final Action getRefreshAction() {
94:                 return refreshAction;
95:         }
96:
97:         @Override
98:         public void init(IViewSite site) throws PartInitException {
99:                 super.init(site);
100:                 site.setSelectionProvider(this);
101:         }
102:
103:         @Override
104:         public final void createPartControl(Composite parent) {
105:                 viewer = createViewer(parent);
106:                 if (viewer == null) {
107:                         throw new IllegalStateException(Messages.TreeView_Exception_ViewerNotCreated);
108:                 }
109:
110:                 refreshAction = new RefreshViewerAction(viewer);
111:
112:                 hookContextMenu();
113:                 hookDoubleClickAction();
114:                 contributeToActionBars();
115:
116:         }
117:
118:         @Override
119:         public void setFocus() {
120:                 if (viewer != null) {
121:                         viewer.getControl().setFocus();
122:                 }
123:         }
124:
125:         /** {@inheritDoc} */
126:         @Override
127:         public IStructuredSelection getSelection() {
128:                 if (viewer != null) {
129:                         return (IStructuredSelection) viewer.getSelection();
130:                 }
131:
132:                 return StructuredSelection.EMPTY;
133:         }
134:
135:         /** {@inheritDoc} */
136:         @Override
137:         public void setSelection(ISelection selection) {
138:                 if (viewer != null) {
139:                         viewer.setSelection(selection);
140:                 }
141:         }
142:
143:         /** {@inheritDoc} */
144:         @Override
145:         public void addSelectionChangedListener(ISelectionChangedListener listener) {
146:                 if (viewer != null) {
147:                         viewer.addSelectionChangedListener(listener);
148:                 }
149:         }
150:
151:         /** {@inheritDoc} */
152:         @Override
153:         public void removeSelectionChangedListener(ISelectionChangedListener listener) {
154:                 if (viewer != null) {
155:                         viewer.removeSelectionChangedListener(listener);
156:                 }
157:         }
158:
159:         /** {@inheritDoc} */
160:         @Override
161:         public void selectReveal(ISelection selection) {
162:                 if (viewer != null) {
163:                         viewer.setSelection(selection, true);
164:                 }
165:         }
166:
167:         /**
168:          * Shows a message to the user.
169:          *
170:          * @param message the message as a String
171:          */
172:         protected void showMessage(String message) {
173:                 MessageDialog.openInformation(viewer.getControl().getShell(), getTitle(), message);
174:         }
175:
176:         /**
177:          * Creates a label decorator.
178:          *
179:          * @return the label decorator to be used by the TreeView
180:          */
181:         protected ILabelDecorator createLabelDecorator() {
182:                 return PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator();
183:         }
184:
185:         /**
186:          * Creates the {@link TreeViewer}. To be implemented by sub classes.
187:          *
188:          * @param parent the parent composite to place the TreeViewer on.
189:          * @return the {@link TreeViewer}
190:          */
191:         protected abstract TreeViewer createViewer(Composite parent);
192:
193:         /**
194:          * Fills the menue of the view. Can be overridden by sub classes.
195:          *
196:          * @param manager the {@link IMenuManager} to be filled.
197:          */
198:         protected void fillLocalPullDown(IMenuManager manager) {
199:                 manager.add(new Separator());
200:                 manager.add(refreshAction);
201:         }
202:
203:         /**
204:          * Fills the toolbar of the view. Can be overridden by sub classes.
205:          *
206:          * @param manager the {@link IToolBarManager} to be filled.
207:          */
208:         protected void fillLocalToolBar(IToolBarManager manager) {
209:                 manager.add(refreshAction);
210:                 manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
211:
212:         }
213:
214:         /**
215:          * Fills the contect menu of the view. Can be overriden by sub classes.
216:          *
217:          * @param manager the {@link IMenuManager} to be filled.
218:          */
219:         protected void fillContextMenu(IMenuManager manager) {
220:                 manager.add(new Separator(GLOBAL_ADDITIONS));
221:                 manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
222:                 manager.add(new Separator());
223:         }
224:
225:         /**
226:          * Called if a double click is triggered in the TreeViewer. Can be overridden by sub classes to add some behavior on
227:          * double click.
228:          *
229:          * @param event the {@link DoubleClickEvent}
230:          */
231:         protected void doubleClicked(DoubleClickEvent event) {
232:         }
233:
234:         private void contributeToActionBars() {
235:                 final IActionBars bars = getViewSite().getActionBars();
236:                 // fillLocalPullDown(bars.getMenuManager());
237:                 fillLocalToolBar(bars.getToolBarManager());
238:         }
239:
240:         private void hookDoubleClickAction() {
241:                 viewer.addDoubleClickListener(new IDoubleClickListener() {
242:                         @Override
243:                         public void doubleClick(DoubleClickEvent event) {
244:                                 TreeView.this.doubleClicked(event);
245:                         }
246:                 });
247:         }
248:
249:         private void hookContextMenu() {
250:                 final MenuManager manager = new MenuManager("#PopupMenu"); //$NON-NLS-1$
251:                 manager.setRemoveAllWhenShown(true);
252:                 manager.addMenuListener(new IMenuListener() {
253:                         @Override
254:                         public void menuAboutToShow(IMenuManager manager) {
255:                                 TreeView.this.fillContextMenu(manager);
256:                         }
257:                 });
258:
259:                 final Control control = viewer.getControl();
260:
261:                 final Menu menu = manager.createContextMenu(control);
262:                 control.setMenu(menu);
263:                 getSite().registerContextMenu(getID(), manager, viewer);
264:         }
265: }