1 /*******************************************************************************
2 * Copyright (c) 2015 École Polytechnique de Montréal
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
10 * Cédric Biancheri - Initial API and implementation
11 *******************************************************************************/
13 package org
.eclipse
.tracecompass
.tmf
.ui
.project
.wizards
;
15 import java
.util
.ArrayList
;
16 import java
.util
.List
;
18 import org
.eclipse
.jdt
.annotation
.NonNull
;
19 import org
.eclipse
.jface
.viewers
.CheckStateChangedEvent
;
20 import org
.eclipse
.jface
.viewers
.CheckboxTreeViewer
;
21 import org
.eclipse
.jface
.viewers
.ColumnLabelProvider
;
22 import org
.eclipse
.jface
.viewers
.ICheckStateListener
;
23 import org
.eclipse
.jface
.viewers
.TreeViewer
;
24 import org
.eclipse
.jface
.viewers
.TreeViewerColumn
;
25 import org
.eclipse
.jface
.viewers
.ViewerSorter
;
26 import org
.eclipse
.jface
.wizard
.WizardPage
;
27 import org
.eclipse
.swt
.SWT
;
28 import org
.eclipse
.swt
.graphics
.Image
;
29 import org
.eclipse
.swt
.layout
.GridData
;
30 import org
.eclipse
.swt
.layout
.GridLayout
;
31 import org
.eclipse
.swt
.widgets
.Composite
;
32 import org
.eclipse
.swt
.widgets
.Tree
;
33 import org
.eclipse
.tracecompass
.tmf
.ui
.project
.model
.TmfExperimentElement
;
34 import org
.eclipse
.tracecompass
.tmf
.ui
.project
.model
.TmfNavigatorContentProvider
;
35 import org
.eclipse
.tracecompass
.tmf
.ui
.project
.model
.TmfNavigatorLabelProvider
;
36 import org
.eclipse
.tracecompass
.tmf
.ui
.project
.model
.TmfTraceElement
;
37 import org
.eclipse
.ui
.dialogs
.FilteredTree
;
38 import org
.eclipse
.ui
.dialogs
.PatternFilter
;
41 * Implementation of a wizard page for selecting a root node for
44 * @author Cedric Biancheri
48 public class SelectRootNodeWizardPage
extends WizardPage
{
50 // ------------------------------------------------------------------------
52 // ------------------------------------------------------------------------
54 private final TmfExperimentElement fExperiment
;
55 private CheckboxTreeViewer fCheckboxTreeViewer
;
56 private TmfNavigatorContentProvider fContentProvider
;
57 private TmfNavigatorLabelProvider fLabelProvider
;
58 private TmfTraceElement rootNode
;
60 // ------------------------------------------------------------------------
62 // ------------------------------------------------------------------------
66 * The experiment where the synchronization will be made.
68 protected SelectRootNodeWizardPage(TmfExperimentElement experiment
) {
69 super(""); //$NON-NLS-1$
70 fExperiment
= experiment
;
74 public void createControl(Composite parent
) {
75 Composite container
= new Composite(parent
, SWT
.NULL
);
76 container
.setLayout(new GridLayout(2, false));
77 setControl(container
);
78 setTitle(Messages
.SelectRootNodeWizardPage_WindowTitle
);
79 setDescription(Messages
.SelectRootNodeWizardPage_Description
);
81 new FilteredTree(container
, SWT
.MULTI
| SWT
.H_SCROLL
| SWT
.V_SCROLL
| SWT
.BORDER
, new PatternFilter(), true) {
83 protected TreeViewer
doCreateTreeViewer(Composite aparent
, int style
) {
84 return SelectRootNodeWizardPage
.this.doCreateTreeViewer(aparent
);
89 private TreeViewer
doCreateTreeViewer(Composite parent
) {
90 fCheckboxTreeViewer
= new CheckboxTreeViewer(parent
, SWT
.BORDER
);
92 fContentProvider
= new TmfNavigatorContentProvider() {
95 public Object
[] getElements(Object inputElement
) {
96 return getChildren(inputElement
);
100 public synchronized Object
[] getChildren(Object parentElement
) {
101 if (parentElement
instanceof TmfExperimentElement
) {
102 return ((TmfExperimentElement
) parentElement
).getTraces().toArray();
108 public boolean hasChildren(Object element
) {
109 if (element
instanceof TmfExperimentElement
) {
110 return !(((TmfExperimentElement
) element
).getTraces().isEmpty());
115 fCheckboxTreeViewer
.setContentProvider(fContentProvider
);
116 fLabelProvider
= new TmfNavigatorLabelProvider();
117 fCheckboxTreeViewer
.setLabelProvider(fLabelProvider
);
118 fCheckboxTreeViewer
.setSorter(new ViewerSorter());
120 final Tree tree
= fCheckboxTreeViewer
.getTree();
121 GridData gd
= new GridData(SWT
.FILL
, SWT
.FILL
, true, true);
122 tree
.setLayoutData(gd
);
123 tree
.setHeaderVisible(true);
125 final TreeViewerColumn column
= new TreeViewerColumn(fCheckboxTreeViewer
, SWT
.NONE
);
126 column
.getColumn().setText(Messages
.SelectRootNodeWizardPage_TraceColumnHeader
);
127 column
.setLabelProvider(new ColumnLabelProvider() {
129 public String
getText(Object element
) {
130 return fLabelProvider
.getText(element
);
134 public Image
getImage(Object element
) {
135 return fLabelProvider
.getImage(element
);
139 // Populate the list of traces from the experiment
140 fCheckboxTreeViewer
.setInput(fExperiment
);
141 column
.getColumn().pack();
143 fCheckboxTreeViewer
.addCheckStateListener(new ICheckStateListener() {
145 public void checkStateChanged(CheckStateChangedEvent event
) {
146 Object element
= event
.getElement();
147 // Uncheck all elements
148 for (Object checkedElement
: fCheckboxTreeViewer
.getCheckedElements()) {
149 fCheckboxTreeViewer
.setChecked(checkedElement
, false);
151 fCheckboxTreeViewer
.setChecked(element
, event
.getChecked());
152 setPageComplete(event
.getChecked());
156 setPageComplete(true);
157 // Checks the first element by default
158 fCheckboxTreeViewer
.getTree().getItem(0).setChecked(true);
159 return fCheckboxTreeViewer
;
163 * Method to finalize the select operation.
165 * @return <code>true</code> if successful. Should always be successful.
167 public boolean performFinish() {
169 TmfTraceElement
[] selection
= getSelection();
171 if (selection
.length
> 0 && selection
[0] != null) {
172 setRootNode(selection
[0]);
179 * Get the list of selected traces
181 private @NonNull TmfTraceElement
[] getSelection() {
182 List
<TmfTraceElement
> traces
= new ArrayList
<>();
183 Object
[] selection
= fCheckboxTreeViewer
.getCheckedElements();
184 for (Object sel
: selection
) {
185 if (sel
instanceof TmfTraceElement
) {
186 traces
.add((TmfTraceElement
) sel
);
189 return traces
.toArray(new @NonNull TmfTraceElement
[0]);
193 * Gets the root node.
195 * @return The root node
197 public TmfTraceElement
getRootNode() {
207 private void setRootNode(TmfTraceElement rootNode
) {
208 this.rootNode
= rootNode
;