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