tmf: remove open trace directory and use open trace file instead
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / views / filter / FilterView.java
CommitLineData
be222f56 1/*******************************************************************************
11252342 2 * Copyright (c) 2010, 2013 Ericsson
be222f56
PT
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 * Yuriy Vashchuk - Initial API and implementation
ef906471 11 * Xavier Raynaud - add cut/copy/paste/dnd support
be222f56
PT
12 * based on Francois Chouinard ProjectView code.
13 */
14
15package org.eclipse.linuxtools.tmf.ui.views.filter;
16
17import java.io.IOException;
18
19import javax.xml.parsers.ParserConfigurationException;
20
21import org.eclipse.core.resources.IResource;
22import org.eclipse.core.resources.IWorkspace;
23import org.eclipse.core.resources.ResourcesPlugin;
24import org.eclipse.core.runtime.CoreException;
25import org.eclipse.jface.action.Action;
ef906471
XR
26import org.eclipse.jface.action.IMenuListener;
27import org.eclipse.jface.action.IMenuManager;
be222f56 28import org.eclipse.jface.action.IToolBarManager;
ef906471 29import org.eclipse.jface.action.MenuManager;
be222f56
PT
30import org.eclipse.jface.action.Separator;
31import org.eclipse.jface.resource.ImageDescriptor;
32import org.eclipse.jface.viewers.ISelectionChangedListener;
33import org.eclipse.jface.viewers.IStructuredSelection;
34import org.eclipse.jface.viewers.SelectionChangedEvent;
35import org.eclipse.linuxtools.internal.tmf.ui.Activator;
36import org.eclipse.linuxtools.internal.tmf.ui.Messages;
37import org.eclipse.linuxtools.tmf.core.filter.model.ITmfFilterTreeNode;
38import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterNode;
39import org.eclipse.linuxtools.tmf.core.filter.model.TmfFilterRootNode;
40import org.eclipse.linuxtools.tmf.core.filter.xml.TmfFilterXMLParser;
41import org.eclipse.linuxtools.tmf.core.filter.xml.TmfFilterXMLWriter;
42import org.eclipse.linuxtools.tmf.ui.views.TmfView;
43import org.eclipse.swt.SWT;
44import org.eclipse.swt.graphics.Image;
45import org.eclipse.swt.widgets.Composite;
46import org.eclipse.swt.widgets.FileDialog;
ef906471 47import org.eclipse.swt.widgets.Menu;
be222f56
PT
48import org.eclipse.swt.widgets.Shell;
49import org.eclipse.ui.IActionBars;
50import org.xml.sax.SAXException;
51
52/**
53 * View that contain UI to the TMF filter.
54 *
55 * @version 1.0
56 * @author Yuriy Vashchuk
57 */
58public class FilterView extends TmfView {
59
60 /** ID for the Filter view */
61 public static final String ID = "org.eclipse.linuxtools.tmf.ui.views.filter"; //$NON-NLS-1$
62
63 private static final Image SAVE_IMAGE = Activator.getDefault().getImageFromPath("/icons/elcl16/save_button.gif"); //$NON-NLS-1$
64 private static final Image ADD_IMAGE = Activator.getDefault().getImageFromPath("/icons/elcl16/add_button.gif"); //$NON-NLS-1$
be222f56
PT
65 private static final Image IMPORT_IMAGE = Activator.getDefault().getImageFromPath("/icons/elcl16/import_button.gif"); //$NON-NLS-1$
66 private static final Image EXPORT_IMAGE = Activator.getDefault().getImageFromPath("/icons/elcl16/export_button.gif"); //$NON-NLS-1$
67
68 // ------------------------------------------------------------------------
69 // Main data structures
70 // ------------------------------------------------------------------------
71
72 private FilterViewer fViewer;
73 private final ITmfFilterTreeNode fRoot;
74
75 private final IWorkspace fWorkspace;
76
77 private SaveAction fSaveAction;
78 private AddAction fAddAction;
be222f56
PT
79 private ExportAction fExportAction;
80 private ImportAction fImportAction;
81
82 /**
83 * Getter for the Filter Tree Root
84 *
85 * @return The root of builded tree
86 */
87 public ITmfFilterTreeNode getFilterRoot() {
11252342 88 return fRoot;
be222f56
PT
89 }
90
be222f56
PT
91 // ------------------------------------------------------------------------
92 // Constructor
93 // ------------------------------------------------------------------------
94
95 /**
96 * Default Constructor
97 */
98 public FilterView() {
99 super("Filter"); //$NON-NLS-1$
100
101 fWorkspace = ResourcesPlugin.getWorkspace();
102 try {
103 fWorkspace.getRoot().refreshLocal(IResource.DEPTH_INFINITE, null);
104 } catch (CoreException e) {
105 Activator.getDefault().logError("Error refreshing workspace", e); //$NON-NLS-1$
106 }
107
108 fRoot = new TmfFilterRootNode();
109 for (ITmfFilterTreeNode node : FilterManager.getSavedFilters()) {
11252342 110 fRoot.addChild(node);
be222f56 111 }
11252342
AM
112 }
113
114 /**
115 * Refresh the tree widget
be222f56 116 */
11252342
AM
117 public void refresh() {
118 fViewer.refresh();
119 }
120
121 /**
122 * Setter for selection
123 *
124 * @param node
125 * The node to select
be222f56 126 */
11252342
AM
127 public void setSelection(ITmfFilterTreeNode node) {
128 fViewer.setSelection(node, true);
129 }
130
131 // ------------------------------------------------------------------------
132 // ViewPart
133 // ------------------------------------------------------------------------
134
135 @Override
136 public void createPartControl(Composite parent) {
137
138 fViewer = new FilterViewer(parent, SWT.NONE);
139 fViewer.setInput(fRoot);
140
141 contributeToActionBars();
142
143 fViewer.addSelectionChangedListener(new ISelectionChangedListener() {
144 @Override
145 public void selectionChanged(SelectionChangedEvent event) {
146 if (!(event.getSelection().isEmpty()) && event.getSelection() instanceof IStructuredSelection) {
11252342
AM
147 fExportAction.setEnabled(true);
148 } else {
11252342
AM
149 fExportAction.setEnabled(false);
150 }
151 }
152 });
ef906471
XR
153 this.getSite().setSelectionProvider(fViewer.getTreeViewer());
154
155 // Adds root context menu
156 MenuManager menuManager = new MenuManager();
157 menuManager.setRemoveAllWhenShown(true);
158 menuManager.addMenuListener(new IMenuListener() {
159 @Override
160 public void menuAboutToShow(IMenuManager manager) {
161 fViewer.fillContextMenu(manager);
162 }
163 });
164 Menu contextMenu = menuManager.createContextMenu(fViewer.getTreeViewer().getTree());
165 fViewer.getTreeViewer().getTree().setMenu(contextMenu);
166 this.getSite().registerContextMenu(menuManager, fViewer.getTreeViewer());
167 }
168
169 /**
170 * @return the ITmfFilterTreeNode currently selected
171 */
172 ITmfFilterTreeNode getSelection() {
173 return fViewer.getSelection();
11252342
AM
174 }
175
be222f56
PT
176 @Override
177 public void setFocus() {
178 fViewer.setFocus();
179 }
180
11252342
AM
181 @Override
182 public String toString() {
183 return "[FilterView]"; //$NON-NLS-1$
184 }
be222f56
PT
185
186 /**
187 * Builds the menu toolbar
188 */
11252342
AM
189 private void contributeToActionBars() {
190 IActionBars bars = getViewSite().getActionBars();
191 // fillLocalPullDown(bars.getMenuManager());
192 fillLocalToolBar(bars.getToolBarManager());
193 }
194
195 /**
196 * Build the popup menu
197 *
198 * @param manager
199 * The manager to build
200 */
201 private void fillLocalToolBar(IToolBarManager manager) {
202
203 fSaveAction = new SaveAction();
204 fSaveAction.setImageDescriptor(ImageDescriptor.createFromImage(SAVE_IMAGE));
205 fSaveAction.setToolTipText(Messages.FilterView_SaveActionToolTipText);
206
207 fAddAction = new AddAction();
208 fAddAction.setImageDescriptor(ImageDescriptor.createFromImage(ADD_IMAGE));
209 fAddAction.setToolTipText(Messages.FilterView_AddActionToolTipText);
210
11252342
AM
211 fExportAction = new ExportAction();
212 fExportAction.setImageDescriptor(ImageDescriptor.createFromImage(EXPORT_IMAGE));
213 fExportAction.setToolTipText(Messages.FilterView_ExportActionToolTipText);
214
215 fImportAction = new ImportAction();
216 fImportAction.setImageDescriptor(ImageDescriptor.createFromImage(IMPORT_IMAGE));
217 fImportAction.setToolTipText(Messages.FilterView_ImportActionToolTipText);
218
219 manager.add(fSaveAction);
ef906471 220 manager.add(new Separator("add_delete")); //$NON-NLS-1$
11252342 221 manager.add(fAddAction);
ef906471 222 manager.add(new Separator("edit")); //$NON-NLS-1$
11252342
AM
223 manager.add(new Separator());
224 manager.add(fExportAction);
225 manager.add(fImportAction);
226 }
227
228 private class SaveAction extends Action {
229 @Override
230 public void run() {
231 FilterManager.setSavedFilters(fRoot.getChildren());
232 }
233 }
234
235 private class AddAction extends Action {
236 @Override
237 public void run() {
238
239 TmfFilterNode newNode = new TmfFilterNode(fRoot, ""); //$NON-NLS-1$
240 refresh();
241 setSelection(newNode);
242 }
243 }
244
11252342
AM
245 private class ExportAction extends Action {
246 @Override
247 public void run() {
248 try {
249 FileDialog dlg = new FileDialog(new Shell(), SWT.SAVE);
250 dlg.setFilterNames(new String[] { Messages.FilterView_FileDialogFilterName + " (*.filter.xml)" }); //$NON-NLS-1$
251 dlg.setFilterExtensions(new String[] { "*.filter.xml" }); //$NON-NLS-1$
252
253 String fn = dlg.open();
254 if (fn != null) {
255 TmfFilterXMLWriter writerXML = new TmfFilterXMLWriter(fRoot);
256 writerXML.saveTree(fn);
257 }
258
259 } catch (ParserConfigurationException e) {
260 Activator.getDefault().logError("Error parsing filter xml file", e); //$NON-NLS-1$
261 }
262 }
263 }
264
265 private class ImportAction extends Action {
266 @Override
267 public void run() {
268 if (fViewer != null) {
269 ITmfFilterTreeNode root = null;
270 try {
271 FileDialog dlg = new FileDialog(new Shell(), SWT.OPEN);
272 dlg.setFilterNames(new String[] { Messages.FilterView_FileDialogFilterName + " (*.filter.xml)" }); //$NON-NLS-1$
273 dlg.setFilterExtensions(new String[] { "*.filter.xml" }); //$NON-NLS-1$
274
275 TmfFilterXMLParser parserXML = null;
276 String fn = dlg.open();
277 if (fn != null) {
278 parserXML = new TmfFilterXMLParser(fn);
279 root = parserXML.getTree();
280 }
281
282 } catch (SAXException e) {
283 Activator.getDefault().logError("Error importing filter xml file", e); //$NON-NLS-1$
284 } catch (IOException e) {
285 Activator.getDefault().logError("Error importing filter xml file", e); //$NON-NLS-1$
286 }
287
288 if (root != null) {
289 for (ITmfFilterTreeNode node : root.getChildren()) {
290 if (node instanceof TmfFilterNode) {
291 fRoot.addChild(node);
292 refresh();
293 fViewer.setSelection(node);
294 }
295 }
296 }
297 }
298 }
299 }
be222f56 300
90e2b925 301}
This page took 0.070068 seconds and 5 git commands to generate.