Commit | Line | Data |
---|---|---|
6e651d8b MAL |
1 | /******************************************************************************* |
2 | * Copyright (c) 2013 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 | * Marc-Andre Laperle - Initial API and implementation | |
11 | *******************************************************************************/ | |
12 | ||
13 | package org.eclipse.linuxtools.internal.tmf.ui.project.wizards.tracepkg.importexport; | |
14 | ||
15 | import java.util.ArrayList; | |
16 | import java.util.List; | |
17 | ||
18 | import org.eclipse.core.resources.IProject; | |
19 | import org.eclipse.jface.viewers.IStructuredContentProvider; | |
20 | import org.eclipse.jface.viewers.TableViewer; | |
21 | import org.eclipse.jface.viewers.Viewer; | |
22 | import org.eclipse.jface.wizard.WizardPage; | |
23 | import org.eclipse.linuxtools.tmf.ui.project.model.TmfNavigatorContentProvider; | |
24 | import org.eclipse.linuxtools.tmf.ui.project.model.TmfNavigatorLabelProvider; | |
25 | import org.eclipse.linuxtools.tmf.ui.project.model.TmfProjectElement; | |
26 | import org.eclipse.linuxtools.tmf.ui.project.model.TmfProjectRegistry; | |
27 | import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceElement; | |
28 | import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceFolder; | |
29 | import org.eclipse.linuxtools.tmf.ui.project.model.TraceUtils; | |
30 | import org.eclipse.swt.SWT; | |
31 | import org.eclipse.swt.events.SelectionAdapter; | |
32 | import org.eclipse.swt.events.SelectionEvent; | |
33 | import org.eclipse.swt.layout.GridData; | |
34 | import org.eclipse.swt.layout.GridLayout; | |
195355a9 | 35 | import org.eclipse.swt.widgets.Button; |
6e651d8b MAL |
36 | import org.eclipse.swt.widgets.Composite; |
37 | import org.eclipse.swt.widgets.Event; | |
38 | import org.eclipse.swt.widgets.Label; | |
39 | import org.eclipse.swt.widgets.Table; | |
40 | import org.eclipse.swt.widgets.TableItem; | |
41 | import org.eclipse.ui.model.WorkbenchLabelProvider; | |
42 | ||
43 | /** | |
44 | * A wizard page for selecting the trace to export when no trace was previously | |
45 | * selected. | |
46 | * | |
47 | * @author Marc-Andre Laperle | |
48 | */ | |
49 | public class ExportTracePackageSelectTraceWizardPage extends WizardPage { | |
50 | ||
51 | private static final String PAGE_NAME = "ExportTracePackageSelectTraceWizardPage"; //$NON-NLS-1$ | |
52 | ||
53 | /** | |
54 | * Construct the select trace page | |
55 | */ | |
56 | public ExportTracePackageSelectTraceWizardPage() { | |
57 | super(PAGE_NAME); | |
58 | } | |
59 | ||
60 | private IProject fSelectedProject; | |
61 | private Table fTraceTable; | |
62 | ||
63 | @Override | |
64 | public void createControl(Composite parent) { | |
65 | Composite projectSelectionGroup = new Composite(parent, SWT.NONE); | |
66 | projectSelectionGroup.setLayout(new GridLayout(2, true)); | |
67 | projectSelectionGroup.setLayoutData(new GridData(GridData.FILL_BOTH)); | |
68 | projectSelectionGroup.setFont(parent.getFont()); | |
69 | ||
70 | Label projectLabel = new Label(projectSelectionGroup, SWT.NONE); | |
71 | projectLabel.setText(Messages.ExportTracePackageSelectTraceWizardPage_ProjectSelection); | |
72 | projectLabel.setLayoutData(new GridData()); | |
73 | ||
74 | Label configLabel = new Label(projectSelectionGroup, SWT.NONE); | |
75 | configLabel.setText(Messages.ExportTracePackageSelectTraceWizardPage_TraceSelection); | |
76 | configLabel.setLayoutData(new GridData()); | |
77 | ||
78 | final Table projectTable = new Table(projectSelectionGroup, SWT.SINGLE | SWT.BORDER); | |
79 | projectTable.setLayoutData(new GridData(GridData.FILL_BOTH)); | |
80 | ||
81 | TableViewer projectViewer = new TableViewer(projectTable); | |
82 | projectViewer.setContentProvider(new TmfNavigatorContentProvider() { | |
83 | ||
84 | @Override | |
85 | public Object[] getElements(Object inputElement) { | |
86 | return (IProject[]) inputElement; | |
87 | } | |
88 | }); | |
89 | projectViewer.setLabelProvider(new WorkbenchLabelProvider()); | |
90 | projectViewer.setInput(TraceUtils.getOpenedTmfProjects().toArray(new IProject[] {})); | |
91 | ||
195355a9 | 92 | fTraceTable = new Table(projectSelectionGroup, SWT.BORDER | SWT.CHECK); |
6e651d8b MAL |
93 | fTraceTable.setLayoutData(new GridData(GridData.FILL_BOTH)); |
94 | ||
95 | final TableViewer traceViewer = new TableViewer(fTraceTable); | |
96 | traceViewer.setContentProvider(new IStructuredContentProvider() { | |
97 | @Override | |
98 | public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { | |
99 | } | |
100 | ||
101 | @Override | |
102 | public void dispose() { | |
103 | } | |
104 | ||
105 | @Override | |
106 | public Object[] getElements(Object inputElement) { | |
107 | if (inputElement instanceof TmfTraceElement[]) { | |
108 | return (TmfTraceElement[]) inputElement; | |
109 | } | |
110 | return null; | |
111 | } | |
112 | }); | |
113 | traceViewer.setLabelProvider(new TmfNavigatorLabelProvider()); | |
114 | fTraceTable.addSelectionListener(new SelectionAdapter() { | |
115 | @Override | |
116 | public void widgetSelected(SelectionEvent e) { | |
195355a9 MAL |
117 | getWizard().getContainer().updateButtons(); |
118 | updateNextPageData(); | |
6e651d8b MAL |
119 | } |
120 | }); | |
121 | ||
122 | projectTable.addSelectionListener(new SelectionAdapter() { | |
123 | @Override | |
124 | public void widgetSelected(SelectionEvent e) { | |
125 | TableItem[] items = projectTable.getSelection(); | |
126 | fSelectedProject = (IProject) items[0].getData(); | |
127 | ||
f537c959 | 128 | TmfProjectElement project = TmfProjectRegistry.getProject(fSelectedProject, true); |
6e651d8b MAL |
129 | |
130 | TmfTraceFolder tracesFolder = project.getTracesFolder(); | |
131 | List<TmfTraceElement> traces = tracesFolder.getTraces(); | |
132 | TmfTraceElement[] array = traces.toArray(new TmfTraceElement[] {}); | |
133 | traceViewer.setInput(array); | |
134 | traceViewer.refresh(); | |
135 | fTraceTable.select(0); | |
136 | fTraceTable.notifyListeners(SWT.Selection, new Event()); | |
137 | getWizard().getContainer().updateButtons(); | |
138 | } | |
139 | }); | |
140 | ||
195355a9 MAL |
141 | Composite btComp = new Composite(projectSelectionGroup, SWT.NONE); |
142 | btComp.setLayout(new GridLayout(2, true)); | |
143 | GridData gd = new GridData(); | |
144 | gd.horizontalSpan = 2; | |
145 | gd.horizontalAlignment = SWT.RIGHT; | |
146 | btComp.setLayoutData(gd); | |
147 | ||
148 | final Button selectAll = new Button(btComp, SWT.PUSH); | |
149 | selectAll.setText(org.eclipse.linuxtools.internal.tmf.ui.project.dialogs.Messages.Dialog_SelectAll); | |
150 | selectAll.addSelectionListener(new SelectionAdapter() { | |
151 | @Override | |
152 | public void widgetSelected(SelectionEvent e) { | |
153 | TableItem[] items = fTraceTable.getItems(); | |
154 | for (TableItem item : items) { | |
155 | item.setChecked(true); | |
156 | } | |
157 | ||
158 | getWizard().getContainer().updateButtons(); | |
159 | updateNextPageData(); | |
160 | } | |
161 | }); | |
162 | ||
163 | final Button deselectAll = new Button(btComp, SWT.PUSH); | |
164 | deselectAll.setText(org.eclipse.linuxtools.internal.tmf.ui.project.dialogs.Messages.Dialog_DeselectAll); | |
165 | deselectAll.addSelectionListener(new SelectionAdapter() { | |
166 | @Override | |
167 | public void widgetSelected(SelectionEvent e) { | |
168 | TableItem[] items = fTraceTable.getItems(); | |
169 | for (TableItem item : items) { | |
170 | item.setChecked(false); | |
171 | } | |
172 | ||
173 | getWizard().getContainer().updateButtons(); | |
174 | updateNextPageData(); | |
175 | } | |
176 | }); | |
177 | ||
6e651d8b MAL |
178 | setControl(projectSelectionGroup); |
179 | setTitle(Messages.ExportTracePackageWizardPage_Title); | |
180 | setMessage(Messages.ExportTracePackageSelectTraceWizardPage_ChooseTrace); | |
181 | } | |
182 | ||
195355a9 MAL |
183 | private ArrayList<TmfTraceElement> getCheckedTraces() { |
184 | TableItem[] items = fTraceTable.getItems(); | |
507b1336 | 185 | ArrayList<TmfTraceElement> traces = new ArrayList<>(); |
195355a9 MAL |
186 | for (TableItem item : items) { |
187 | if (item.getChecked()) { | |
188 | TmfTraceElement trace = (TmfTraceElement) item.getData(); | |
189 | traces.add(trace); | |
190 | } | |
191 | } | |
192 | return traces; | |
193 | } | |
194 | ||
195 | private void updateNextPageData() { | |
196 | ExportTracePackageWizardPage page = (ExportTracePackageWizardPage) getWizard().getPage(ExportTracePackageWizardPage.PAGE_NAME); | |
197 | page.setSelectedTraces(getCheckedTraces()); | |
198 | } | |
199 | ||
6e651d8b MAL |
200 | @Override |
201 | public boolean canFlipToNextPage() { | |
195355a9 | 202 | return getCheckedTraces().size() > 0; |
6e651d8b MAL |
203 | } |
204 | } |