tmf: Move plugins to the Trace Compass namespace
[deliverable/tracecompass.git] / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / linuxtools / internal / tmf / ui / project / wizards / importtrace / ImportTraceWizardSelectTraceTypePage.java
1 /*******************************************************************************
2 * Copyright (c) 2013, 2014 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 * Matthew Khouzam - Initial API and implementation
11 *******************************************************************************/
12
13 package org.eclipse.linuxtools.internal.tmf.ui.project.wizards.importtrace;
14
15 import java.util.ArrayList;
16 import java.util.List;
17
18 import org.eclipse.jface.viewers.CheckStateChangedEvent;
19 import org.eclipse.jface.viewers.CheckboxTreeViewer;
20 import org.eclipse.jface.viewers.ICheckStateListener;
21 import org.eclipse.jface.viewers.IStructuredSelection;
22 import org.eclipse.jface.viewers.ITreeContentProvider;
23 import org.eclipse.jface.viewers.LabelProvider;
24 import org.eclipse.linuxtools.tmf.core.project.model.TraceTypeHelper;
25 import org.eclipse.swt.SWT;
26 import org.eclipse.swt.layout.GridData;
27 import org.eclipse.swt.layout.GridLayout;
28 import org.eclipse.swt.widgets.Button;
29 import org.eclipse.swt.widgets.Composite;
30 import org.eclipse.swt.widgets.Event;
31 import org.eclipse.swt.widgets.Listener;
32 import org.eclipse.ui.IWorkbench;
33
34 /**
35 * <b>Select trace types to import</b>, this page is the first of three pages
36 * shown. This one selects the type of traces that are to be scanned.
37 *
38 * @author Matthew Khouzam
39 * @since 2.0
40 */
41 public class ImportTraceWizardSelectTraceTypePage extends AbstractImportTraceWizardPage {
42
43 private CheckboxTreeViewer fTreeView;
44 private final TraceTypeContentProvider fProvider = new TraceTypeContentProvider();
45
46 /**
47 * Select trace types to import
48 *
49 * @param name
50 * The name of the page.
51 * @param selection
52 * The current selection
53 */
54 protected ImportTraceWizardSelectTraceTypePage(String name, IStructuredSelection selection) {
55 super(name, selection);
56 }
57
58 /**
59 * Select trace types to import
60 *
61 * @param workbench
62 * The workbench reference.
63 * @param selection
64 * The current selection
65 */
66 public ImportTraceWizardSelectTraceTypePage(IWorkbench workbench, IStructuredSelection selection) {
67 super(workbench, selection);
68 }
69
70 @Override
71 public void createControl(Composite parent) {
72 super.createControl(parent);
73 Composite control = (Composite) this.getControl();
74
75 final ICheckStateListener listener = new TraceTypeCheckListener();
76
77 setTitle(Messages.ImportTraceWizardSelectTraceTypePageTitle);
78
79 fTreeView = new CheckboxTreeViewer(control, SWT.BORDER);
80 fTreeView.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
81 fTreeView.setContentProvider(fProvider);
82 fTreeView.setInput(fProvider);
83 fTreeView.setLabelProvider(new LabelProvider() {
84 @Override
85 public String getText(Object element) {
86 return element.toString();
87 }
88 });
89 fTreeView.addCheckStateListener(listener);
90
91 // populateTree(treeView);
92
93 Composite buttonArea = new Composite(control, SWT.NONE);
94 buttonArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
95 buttonArea.setLayout(new GridLayout(2, false));
96
97 Button selectAll = new Button(buttonArea, SWT.NONE);
98 selectAll.setText(Messages.ImportTraceWizardSelectAll);
99 selectAll.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false));
100 selectAll.addListener(SWT.Selection, new Listener() {
101 @Override
102 public void handleEvent(Event event) {
103 String elements[] = (String[]) ((ITreeContentProvider) fTreeView.getContentProvider()).getElements(null);
104 for (String key : elements) {
105 fTreeView.setSubtreeChecked(key, true);
106 }
107 getWizard().getContainer().updateButtons();
108 }
109 });
110
111 Button selectNone = new Button(buttonArea, SWT.NONE);
112 selectNone.setText(Messages.ImportTraceWizardPageSelectNone);
113 selectNone.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false));
114 selectNone.addListener(SWT.Selection, new Listener() {
115 @Override
116 public void handleEvent(Event event) {
117 String elements[] = (String[]) ((ITreeContentProvider) fTreeView.getContentProvider()).getElements(null);
118 for (String key : elements) {
119 fTreeView.setSubtreeChecked(key, false);
120 }
121 getWizard().getContainer().updateButtons();
122 }
123 });
124 fTreeView.expandAll();
125 }
126
127 @Override
128 public boolean canFlipToNextPage() {
129 List<String> tracesToScan = new ArrayList<>();
130 String elements[] = (String[]) fProvider.getElements(null);
131 for (String traceFamily : elements) {
132 final TraceTypeHelper[] children = (TraceTypeHelper[]) fProvider.getChildren(traceFamily);
133 if (children != null) {
134 for (TraceTypeHelper traceType : children) {
135 if (fTreeView.getChecked(traceType)) {
136 tracesToScan.add(traceType.getCanonicalName());
137 }
138 }
139 }
140 }
141 ((BatchImportTraceWizard) getWizard()).setTraceTypesToScan(tracesToScan);
142 if (tracesToScan.isEmpty()) {
143 setErrorMessage(Messages.ImportTraceWizardPageSelectHint);
144 } else {
145 setErrorMessage(null);
146 }
147 return super.canFlipToNextPage() && !tracesToScan.isEmpty();
148 }
149
150 private final class TraceTypeCheckListener implements ICheckStateListener {
151 @Override
152 public void checkStateChanged(CheckStateChangedEvent event) {
153
154 boolean checkStatus = event.getChecked();
155 Object element = event.getElement();
156
157 fTreeView.setGrayed(element, false);
158 fTreeView.setSubtreeChecked(element, checkStatus);
159 ITreeContentProvider tcp = (ITreeContentProvider) fTreeView.getContentProvider();
160 String parentElement = (String) tcp.getParent(element);
161 if (parentElement != null) {
162 TraceTypeHelper[] siblings = (TraceTypeHelper[]) tcp.getChildren(parentElement);
163 final TraceTypeHelper first = siblings[0];
164 final boolean isFirstChecked = fTreeView.getChecked(first);
165 boolean allSame = true;
166 for (TraceTypeHelper peer : siblings) {
167 final boolean peerChecked = fTreeView.getChecked(peer);
168 if (peerChecked != isFirstChecked) {
169 allSame = false;
170 }
171 }
172 if (allSame) {
173 fTreeView.setGrayed(parentElement, false);
174 fTreeView.setChecked(parentElement, checkStatus);
175 } else {
176 fTreeView.setChecked(parentElement, false);
177 fTreeView.setGrayed(parentElement, true);
178 }
179 }
180 getWizard().getContainer().updateButtons();
181
182 }
183 }
184 }
This page took 0.036979 seconds and 5 git commands to generate.