ss: Move plugins to Trace Compass namespace
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / internal / tmf / ui / project / wizards / importtrace / ImportTraceWizardSelectTraceTypePage.java
CommitLineData
d04ec5a7 1/*******************************************************************************
60ae41e1 2 * Copyright (c) 2013, 2014 Ericsson
d04ec5a7
MK
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
1de10308 13package org.eclipse.linuxtools.internal.tmf.ui.project.wizards.importtrace;
d04ec5a7
MK
14
15import java.util.ArrayList;
16import java.util.List;
17
18import org.eclipse.jface.viewers.CheckStateChangedEvent;
19import org.eclipse.jface.viewers.CheckboxTreeViewer;
20import org.eclipse.jface.viewers.ICheckStateListener;
21import org.eclipse.jface.viewers.IStructuredSelection;
22import org.eclipse.jface.viewers.ITreeContentProvider;
23import org.eclipse.jface.viewers.LabelProvider;
47aafe74 24import org.eclipse.linuxtools.tmf.core.project.model.TraceTypeHelper;
d04ec5a7
MK
25import org.eclipse.swt.SWT;
26import org.eclipse.swt.layout.GridData;
27import org.eclipse.swt.layout.GridLayout;
28import org.eclipse.swt.widgets.Button;
29import org.eclipse.swt.widgets.Composite;
30import org.eclipse.swt.widgets.Event;
31import org.eclipse.swt.widgets.Listener;
32import 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 */
41public 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
32a0863e
MK
77 setTitle(Messages.ImportTraceWizardSelectTraceTypePageTitle);
78
d04ec5a7
MK
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 });
92429cf2 124 fTreeView.expandAll();
d04ec5a7
MK
125 }
126
127 @Override
128 public boolean canFlipToNextPage() {
507b1336 129 List<String> tracesToScan = new ArrayList<>();
d04ec5a7
MK
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) {
a36bfd38
MK
162 TraceTypeHelper[] siblings = (TraceTypeHelper[]) tcp.getChildren(parentElement);
163 final TraceTypeHelper first = siblings[0];
d04ec5a7
MK
164 final boolean isFirstChecked = fTreeView.getChecked(first);
165 boolean allSame = true;
a36bfd38 166 for (TraceTypeHelper peer : siblings) {
d04ec5a7
MK
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.049904 seconds and 5 git commands to generate.