Update internal packages export in LTTng 2.0 control + update java doc
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng2.ui / src / org / eclipse / linuxtools / internal / lttng2 / ui / views / control / dialogs / AddContextDialog.java
1 /**********************************************************************
2 * Copyright (c) 2012 Ericsson
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * Bernd Hufmann - Initial API and implementation
11 **********************************************************************/
12 package org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs;
13
14 import java.util.ArrayList;
15 import java.util.Iterator;
16 import java.util.List;
17
18 import org.eclipse.jface.dialogs.Dialog;
19 import org.eclipse.jface.dialogs.IDialogConstants;
20 import org.eclipse.jface.viewers.CheckStateChangedEvent;
21 import org.eclipse.jface.viewers.CheckboxTreeViewer;
22 import org.eclipse.jface.viewers.ColumnLabelProvider;
23 import org.eclipse.jface.viewers.ICheckStateListener;
24 import org.eclipse.jface.viewers.ITreeContentProvider;
25 import org.eclipse.jface.viewers.Viewer;
26 import org.eclipse.linuxtools.internal.lttng2.ui.Activator;
27 import org.eclipse.linuxtools.internal.lttng2.ui.views.control.messages.Messages;
28 import org.eclipse.swt.SWT;
29 import org.eclipse.swt.graphics.Point;
30 import org.eclipse.swt.layout.GridData;
31 import org.eclipse.swt.layout.GridLayout;
32 import org.eclipse.swt.widgets.Composite;
33 import org.eclipse.swt.widgets.Control;
34 import org.eclipse.swt.widgets.Group;
35 import org.eclipse.swt.widgets.Shell;
36
37 /**
38 * <p>
39 * Dialog box for collecting information about contexts to be added to channels/events.
40 * </p>
41 *
42 * @author Bernd Hufmann
43 */
44 public class AddContextDialog extends Dialog implements IAddContextDialog {
45
46 // ------------------------------------------------------------------------
47 // Constants
48 // ------------------------------------------------------------------------
49
50 /**
51 * The icon file for this dialog box.
52 */
53 public static final String ADD_CONTEXT_ICON_FILE = "icons/elcl16/add-context.gif"; //$NON-NLS-1$
54
55 // ------------------------------------------------------------------------
56 // Attributes
57 // ------------------------------------------------------------------------
58 /**
59 * The dialog composite.
60 */
61 private Composite fDialogComposite;
62 /**
63 * A tree viewer for displaying and selection of available contexts.
64 */
65 private CheckboxTreeViewer fContextsViewer;
66 /**
67 * A Tree model for the checkbox tree viewer.
68 */
69 private ContextModel fContextModel = new ContextModel();
70 /**
71 * The contexts to add.
72 */
73 private List<String> fSelectedContexts = new ArrayList<String>();
74
75 // ------------------------------------------------------------------------
76 // Constructors
77 // ------------------------------------------------------------------------
78 /**
79 * Constructor
80 * @param shell - a shell for the display of the dialog
81 */
82 public AddContextDialog(Shell shell) {
83 super(shell);
84 setShellStyle(SWT.RESIZE);
85 }
86
87 // ------------------------------------------------------------------------
88 // Accessors
89 // ------------------------------------------------------------------------
90
91 /*
92 * (non-Javadoc)
93 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.IAddContextDialog#setAvalibleContexts(java.util.List)
94 */
95 @Override
96 public void setAvalibleContexts(List<String> contexts) {
97 fContextModel.setAvalibleContexts(contexts);
98 }
99
100 /*
101 * (non-Javadoc)
102 * @see org.eclipse.linuxtools.internal.lttng2.ui.views.control.dialogs.IAddContextDialog#getContexts()
103 */
104 @Override
105 public List<String> getContexts() {
106 List<String> ret = new ArrayList<String>();
107 ret.addAll(fSelectedContexts);
108 return ret;
109 }
110
111 // ------------------------------------------------------------------------
112 // Operations
113 // ------------------------------------------------------------------------
114 /*
115 * (non-Javadoc)
116 * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
117 */
118 @Override
119 protected void configureShell(Shell newShell) {
120 super.configureShell(newShell);
121 newShell.setText(Messages.TraceControl_AddContextDialogTitle);
122 newShell.setImage(Activator.getDefault().loadIcon(ADD_CONTEXT_ICON_FILE));
123 }
124
125 /*
126 * (non-Javadoc)
127 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
128 */
129 @Override
130 protected Control createDialogArea(Composite parent) {
131
132 // Main dialog panel
133 fDialogComposite = new Composite(parent, SWT.NONE);
134 GridLayout layout = new GridLayout(1, true);
135 fDialogComposite.setLayout(layout);
136 fDialogComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
137
138 // Contexts list
139 Group contextGroup = new Group(fDialogComposite, SWT.SHADOW_NONE);
140 contextGroup.setText(Messages.TraceControl_AddContextAvailableContextsLabel);
141 layout = new GridLayout(1, true);
142 contextGroup.setLayout(layout);
143 contextGroup.setLayoutData(new GridData(GridData.FILL_BOTH));
144
145 fContextsViewer = new CheckboxTreeViewer(contextGroup, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
146 fContextsViewer.getTree().setToolTipText(Messages.TraceControl_AddContextAvailableContextsTooltip);
147
148 fContextsViewer.setContentProvider(new ContextsContentProvider());
149 fContextsViewer.setLabelProvider(new ContextsLabelProvider());
150 fContextsViewer.addCheckStateListener(new ContextCheckListener());
151 fContextsViewer.setInput(fContextModel);
152 fContextsViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
153
154 getShell().setMinimumSize(new Point(500, 450));
155
156 return fDialogComposite;
157 }
158
159 /*
160 * (non-Javadoc)
161 * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
162 */
163 @Override
164 protected void createButtonsForButtonBar(Composite parent) {
165 createButton(parent, IDialogConstants.CANCEL_ID, "&Cancel", true); //$NON-NLS-1$
166 createButton(parent, IDialogConstants.OK_ID, "&Ok", true); //$NON-NLS-1$
167 }
168
169 /*
170 * (non-Javadoc)
171 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
172 */
173 @Override
174 protected void okPressed() {
175 fSelectedContexts.clear();
176
177 Object[] checkedElements = fContextsViewer.getCheckedElements();
178 for (int i = 0; i < checkedElements.length; i++) {
179 IContextModelComponent component = (IContextModelComponent)checkedElements[i];
180 if (!Messages.TraceControl_AddContextAllLabel.equals(component.getName())) {
181 fSelectedContexts.add(component.getName());
182 }
183 }
184
185 // validation successful -> call super.okPressed()
186 super.okPressed();
187 }
188
189 // ------------------------------------------------------------------------
190 // Helper classes and methods
191 // ------------------------------------------------------------------------
192 /**
193 * Content provider for the contexts tree
194 */
195 final public static class ContextsContentProvider implements ITreeContentProvider {
196
197 @Override
198 public void dispose() {
199 }
200
201 @Override
202 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
203 }
204
205 @Override
206 public Object[] getElements(Object inputElement) {
207 return getChildren(inputElement);
208 }
209
210 @Override
211 public Object[] getChildren(Object parentElement) {
212 if (parentElement instanceof IContextModelComponent) {
213 return ((IContextModelComponent)parentElement).getChildren();
214 }
215 return null;
216 }
217
218 @Override
219 public Object getParent(Object element) {
220 if (element instanceof IContextModelComponent) {
221 return ((IContextModelComponent)element).getParent();
222 }
223 return null;
224 }
225
226 @Override
227 public boolean hasChildren(Object element) {
228 if (element instanceof IContextModelComponent) {
229 return ((IContextModelComponent)element).hasChildren();
230 }
231 return false;
232 }
233 }
234
235 /**
236 * Label provider for the contexts tree
237 */
238 final public static class ContextsLabelProvider extends ColumnLabelProvider {
239 @Override
240 public String getText(Object element) {
241
242 if ((element != null) && (element instanceof IContextModelComponent)) {
243 return ((IContextModelComponent)element).getName();
244 }
245
246 return "";//$NON-NLS-1$
247 }
248 }
249
250 /**
251 * Check state listener for the contexts tree.
252 */
253 final public class ContextCheckListener implements ICheckStateListener {
254 @Override
255 public void checkStateChanged(CheckStateChangedEvent event) {
256 if (event.getChecked()) {
257 if (event.getElement() instanceof AllContexts) {
258 fContextsViewer.setSubtreeChecked(event.getElement(), true);
259 }
260 } else {
261 if (event.getElement() instanceof AllContexts) {
262 fContextsViewer.setSubtreeChecked(event.getElement(), false);
263 } else {
264 IContextModelComponent component = (IContextModelComponent) event.getElement();
265 fContextsViewer.setChecked(component.getParent(), false);
266 }
267 }
268 }
269 }
270
271 /**
272 * Model for the context tree viewer (root component)
273 */
274 public static class ContextModel implements IContextModelComponent {
275
276 private AllContexts fAllContexts;
277
278 public ContextModel() {
279 fAllContexts = new AllContexts(this);
280 }
281
282 public void setAvalibleContexts(List<String> contexts) {
283 fAllContexts.setAvalibleContexts(contexts);
284 }
285
286 @Override
287 public String getName() {
288 return "root"; //$NON-NLS-1$
289 }
290
291 @Override
292 public Object getParent() {
293 return null;
294 }
295
296 @Override
297 public Object[] getChildren() {
298 Object[] ret = new Object[1];
299 ret[0] = fAllContexts;
300 return ret;
301 }
302
303 @Override
304 public boolean hasChildren() {
305 return true;
306 }
307 }
308
309 /**
310 * Model element (to select/deselect) all contexts) for the context tree viewer
311 */
312 public static class AllContexts implements IContextModelComponent {
313 /**
314 * The available list of contexts.
315 */
316 private List<Context> fAvailableContexts;
317
318 private IContextModelComponent fParent;
319
320 public AllContexts(IContextModelComponent parent) {
321 fParent = parent;
322 }
323
324 public void setAvalibleContexts(List<String> contexts) {
325 fAvailableContexts = new ArrayList<Context>();
326 if (contexts != null) {
327 for (Iterator<String> iterator = contexts.iterator(); iterator.hasNext();) {
328 String name = (String) iterator.next();
329 fAvailableContexts.add(new Context(this, name));
330 }
331 }
332 }
333
334 @Override
335 public String getName() {
336 return Messages.TraceControl_AddContextAllLabel;
337 }
338
339 @Override
340 public Object[] getChildren() {
341 return fAvailableContexts.toArray();
342 }
343
344 @Override
345 public Object getParent() {
346 return fParent;
347 }
348
349 @Override
350 public boolean hasChildren() {
351 return true;
352 }
353 }
354
355 /**
356 * Model element (the context) for the context tree viewer
357 */
358 public static class Context implements IContextModelComponent {
359
360 private String fContextName;
361 private IContextModelComponent fParent;
362
363 public Context(IContextModelComponent parent, String name) {
364 fParent = parent;
365 fContextName = name;
366 }
367
368 @Override
369 public String getName() {
370 return fContextName;
371 }
372
373 @Override
374 public Object getParent() {
375 return fParent;
376 }
377
378 @Override
379 public Object[] getChildren() {
380 return null;
381 }
382
383 @Override
384 public boolean hasChildren() {
385 return false;
386 }
387 }
388
389 /**
390 * Interface for the tree model used for the context tree viewer.
391 */
392 public interface IContextModelComponent {
393 public String getName();
394 public Object getParent();
395 public Object[] getChildren();
396 public boolean hasChildren();
397 }
398 }
This page took 0.040455 seconds and 5 git commands to generate.