Use the NonNull utility methods where we can
[deliverable/tracecompass.git] / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / tmf / ui / editors / TmfEventsEditor.java
CommitLineData
6151d86c 1/*******************************************************************************
50a41a0d 2 * Copyright (c) 2010, 2014 Ericsson, École Polytechnique de Montréal
6151d86c
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 * Patrick Tasse - Initial API and implementation
50a41a0d 11 * Geneviève Bastien - Experiment instantiated with experiment type
6151d86c
PT
12 *******************************************************************************/
13
2bdf0193 14package org.eclipse.tracecompass.tmf.ui.editors;
6151d86c 15
5db5a3a4
AM
16import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
17
fa62dc1d
BH
18import java.util.List;
19
6151d86c
PT
20import org.eclipse.core.resources.IFile;
21import org.eclipse.core.resources.IMarker;
22import org.eclipse.core.resources.IMarkerDelta;
23import org.eclipse.core.resources.IResource;
24import org.eclipse.core.resources.IResourceChangeEvent;
25import org.eclipse.core.resources.IResourceChangeListener;
26import org.eclipse.core.resources.IResourceDelta;
27import org.eclipse.core.resources.ResourcesPlugin;
28import org.eclipse.core.runtime.CoreException;
6151d86c
PT
29import org.eclipse.core.runtime.IProgressMonitor;
30import org.eclipse.core.runtime.InvalidRegistryObjectException;
93bfd50a 31import org.eclipse.core.runtime.ListenerList;
99d7adc6
AM
32import org.eclipse.jdt.annotation.NonNull;
33import org.eclipse.jdt.annotation.Nullable;
3f43dc48 34import org.eclipse.jface.action.IStatusLineManager;
93bfd50a
PT
35import org.eclipse.jface.util.SafeRunnable;
36import org.eclipse.jface.viewers.ISelection;
37import org.eclipse.jface.viewers.ISelectionChangedListener;
38import org.eclipse.jface.viewers.ISelectionProvider;
39import org.eclipse.jface.viewers.SelectionChangedEvent;
40import org.eclipse.jface.viewers.StructuredSelection;
6151d86c
PT
41import org.eclipse.swt.widgets.Composite;
42import org.eclipse.swt.widgets.Display;
2bdf0193
AM
43import org.eclipse.tracecompass.internal.tmf.ui.Activator;
44import org.eclipse.tracecompass.tmf.core.TmfCommonConstants;
b04903a2 45import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect;
2bdf0193
AM
46import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler;
47import org.eclipse.tracecompass.tmf.core.signal.TmfTimestampFormatUpdateSignal;
48import org.eclipse.tracecompass.tmf.core.signal.TmfTraceClosedSignal;
49import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
50import org.eclipse.tracecompass.tmf.core.signal.TmfTraceSelectedSignal;
51import org.eclipse.tracecompass.tmf.core.trace.ITmfContext;
52import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
2bdf0193 53import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
5c5fa260 54import org.eclipse.tracecompass.tmf.core.trace.experiment.TmfExperiment;
2bdf0193
AM
55import org.eclipse.tracecompass.tmf.ui.project.model.Messages;
56import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentElement;
57import org.eclipse.tracecompass.tmf.ui.project.model.TmfOpenTraceHelper;
58import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectElement;
59import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectRegistry;
60import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
61import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceTypeUIUtils;
62import org.eclipse.tracecompass.tmf.ui.viewers.events.TmfEventsTable;
6151d86c
PT
63import org.eclipse.ui.IEditorInput;
64import org.eclipse.ui.IEditorPart;
65import org.eclipse.ui.IEditorSite;
66import org.eclipse.ui.IFileEditorInput;
faa38350 67import org.eclipse.ui.IPartListener;
6151d86c
PT
68import org.eclipse.ui.IPropertyListener;
69import org.eclipse.ui.IReusableEditor;
faa38350 70import org.eclipse.ui.IWorkbenchPart;
6151d86c
PT
71import org.eclipse.ui.PartInitException;
72import org.eclipse.ui.ide.IGotoMarker;
73import org.eclipse.ui.part.FileEditorInput;
93bfd50a 74import org.eclipse.ui.views.properties.IPropertySheetPage;
6151d86c 75
de34c0b1
AM
76import com.google.common.collect.ImmutableSet;
77import com.google.common.collect.Iterables;
78
6151d86c
PT
79/**
80 * Editor for TMF events
81 *
82 * @version 1.0
83 * @author Patrick Tasse
faa38350 84 * @since 2.0
6151d86c 85 */
eb271b88 86public class TmfEventsEditor extends TmfEditor implements ITmfTraceEditor, IReusableEditor, IPropertyListener, IResourceChangeListener, ISelectionProvider, ISelectionChangedListener, IPartListener, IGotoMarker {
6151d86c
PT
87
88 /** ID for this class */
89 public static final String ID = "org.eclipse.linuxtools.tmf.ui.editors.events"; //$NON-NLS-1$
90
91 private TmfEventsTable fEventsTable;
92 private IFile fFile;
93 private ITmfTrace fTrace;
94 private Composite fParent;
93bfd50a 95 private ListenerList fSelectionChangedListeners = new ListenerList();
81fe3479 96 private boolean fTraceSelected;
eb271b88 97 private IMarker fPendingGotoMarker;
6151d86c
PT
98
99 @Override
100 public void doSave(final IProgressMonitor monitor) {
101 }
102
103 @Override
104 public void doSaveAs() {
105 }
106
6151d86c
PT
107 @Override
108 public void init(final IEditorSite site, IEditorInput input) throws PartInitException {
faa38350 109 IFileEditorInput fileEditorInput;
6151d86c
PT
110 if (input instanceof TmfEditorInput) {
111 fFile = ((TmfEditorInput) input).getFile();
112 fTrace = ((TmfEditorInput) input).getTrace();
faa38350
PT
113 /* change the input to a FileEditorInput to allow open handlers to find this editor */
114 fileEditorInput = new FileEditorInput(fFile);
6151d86c 115 } else if (input instanceof IFileEditorInput) {
faa38350
PT
116 fileEditorInput = (IFileEditorInput) input;
117 fFile = fileEditorInput.getFile();
118 if (fFile == null) {
119 throw new PartInitException("Invalid IFileEditorInput: " + fileEditorInput); //$NON-NLS-1$
6151d86c
PT
120 }
121 try {
122 final String traceTypeId = fFile.getPersistentProperty(TmfCommonConstants.TRACETYPE);
123 if (traceTypeId == null) {
67c53011 124 throw new PartInitException(Messages.TmfOpenTraceHelper_NoTraceType);
6151d86c
PT
125 }
126 if (traceTypeId.equals(TmfExperiment.class.getCanonicalName())) {
127 // Special case: experiment bookmark resource
f537c959 128 final TmfProjectElement project = TmfProjectRegistry.getProject(fFile.getProject(), true);
6151d86c 129 if (project == null) {
67c53011 130 throw new PartInitException(Messages.TmfOpenTraceHelper_NoTraceType);
6151d86c 131 }
339d539c
PT
132 for (final TmfExperimentElement experimentElement : project.getExperimentsFolder().getExperiments()) {
133 if (experimentElement.getResource().equals(fFile.getParent())) {
eb271b88
PT
134 setPartName(experimentElement.getName());
135 super.setSite(site);
136 super.setInput(fileEditorInput);
9d2e08b9 137 TmfOpenTraceHelper.reopenTraceFromElement(experimentElement, this);
eb271b88 138 return;
6151d86c
PT
139 }
140 }
141 } else if (traceTypeId.equals(TmfTrace.class.getCanonicalName())) {
142 // Special case: trace bookmark resource
f537c959 143 final TmfProjectElement project = TmfProjectRegistry.getProject(fFile.getProject(), true);
339d539c
PT
144 for (final TmfTraceElement traceElement : project.getTracesFolder().getTraces()) {
145 if (traceElement.getResource().equals(fFile.getParent())) {
eb271b88
PT
146 setPartName(traceElement.getName());
147 super.setSite(site);
148 super.setInput(fileEditorInput);
149 TmfOpenTraceHelper.reopenTraceFromElement(traceElement, this);
150 return;
6151d86c
PT
151 }
152 }
153 } else {
f537c959 154 final TmfProjectElement project = TmfProjectRegistry.getProject(fFile.getProject(), true);
339d539c
PT
155 for (final TmfTraceElement traceElement : project.getTracesFolder().getTraces()) {
156 if (traceElement.getResource().equals(fFile)) {
eb271b88
PT
157 setPartName(traceElement.getName());
158 super.setSite(site);
159 super.setInput(fileEditorInput);
160 TmfOpenTraceHelper.reopenTraceFromElement(traceElement, this);
161 return;
6151d86c
PT
162 }
163 }
164 }
faa38350
PT
165 } catch (final PartInitException e) {
166 throw e;
6151d86c
PT
167 } catch (final InvalidRegistryObjectException e) {
168 Activator.getDefault().logError("Error initializing TmfEventsEditor", e); //$NON-NLS-1$
169 } catch (final CoreException e) {
170 Activator.getDefault().logError("Error initializing TmfEventsEditor", e); //$NON-NLS-1$
171 }
faa38350 172 } else {
6151d86c
PT
173 throw new PartInitException("Invalid IEditorInput: " + input.getClass()); //$NON-NLS-1$
174 }
faa38350 175 if (fTrace == null) {
6151d86c
PT
176 throw new PartInitException("Invalid IEditorInput: " + fFile.getName()); //$NON-NLS-1$
177 }
178 super.setSite(site);
faa38350 179 super.setInput(fileEditorInput);
6151d86c
PT
180 }
181
182 @Override
183 public boolean isDirty() {
184 return false;
185 }
186
187 @Override
188 public boolean isSaveAsAllowed() {
189 return false;
190 }
191
192 @Override
193 public void setInput(final IEditorInput input) {
194 super.setInput(input);
195 firePropertyChange(IEditorPart.PROP_INPUT);
196 }
197
198 @Override
199 public void propertyChanged(final Object source, final int propId) {
faa38350 200 if (propId == IEditorPart.PROP_INPUT && getEditorInput() instanceof TmfEditorInput) {
1cf25311
PT
201 if (fTrace != null) {
202 broadcast(new TmfTraceClosedSignal(this, fTrace));
203 }
7e81f48c 204 fTraceSelected = false;
6151d86c
PT
205 fFile = ((TmfEditorInput) getEditorInput()).getFile();
206 fTrace = ((TmfEditorInput) getEditorInput()).getTrace();
faa38350 207 /* change the input to a FileEditorInput to allow open handlers to find this editor */
6151d86c
PT
208 super.setInput(new FileEditorInput(fFile));
209 fEventsTable.dispose();
210 if (fTrace != null) {
eb271b88 211 setPartName(fTrace.getName());
6151d86c 212 fEventsTable = createEventsTable(fParent, fTrace.getCacheSize());
93bfd50a 213 fEventsTable.addSelectionChangedListener(this);
6151d86c
PT
214 fEventsTable.setTrace(fTrace, true);
215 fEventsTable.refreshBookmarks(fFile);
eb271b88
PT
216 if (fPendingGotoMarker != null) {
217 fEventsTable.gotoMarker(fPendingGotoMarker);
218 fPendingGotoMarker = null;
219 }
c4352ddc
PT
220
221 /* ensure start time is set */
222 final ITmfContext context = fTrace.seekEvent(0);
223 fTrace.getNext(context);
224 context.dispose();
225
faa38350 226 broadcast(new TmfTraceOpenedSignal(this, fTrace, fFile));
6151d86c 227 } else {
eb271b88 228 setPartName(getEditorInput().getName());
6151d86c 229 fEventsTable = new TmfEventsTable(fParent, 0);
93bfd50a 230 fEventsTable.addSelectionChangedListener(this);
6151d86c
PT
231 }
232 fParent.layout();
233 }
234 }
235
236 @Override
237 public void createPartControl(final Composite parent) {
238 fParent = parent;
239 if (fTrace != null) {
240 setPartName(fTrace.getName());
241 fEventsTable = createEventsTable(parent, fTrace.getCacheSize());
93bfd50a 242 fEventsTable.addSelectionChangedListener(this);
6151d86c
PT
243 fEventsTable.setTrace(fTrace, true);
244 fEventsTable.refreshBookmarks(fFile);
d7ee91bb
PT
245
246 /* ensure start time is set */
247 final ITmfContext context = fTrace.seekEvent(0);
248 fTrace.getNext(context);
249 context.dispose();
250
faa38350 251 broadcast(new TmfTraceOpenedSignal(this, fTrace, fFile));
6151d86c 252 } else {
6151d86c 253 fEventsTable = new TmfEventsTable(parent, 0);
93bfd50a 254 fEventsTable.addSelectionChangedListener(this);
6151d86c 255 }
3f43dc48
PT
256 IStatusLineManager statusLineManager = getEditorSite().getActionBars().getStatusLineManager();
257 fEventsTable.setStatusLineManager(statusLineManager);
6151d86c
PT
258 addPropertyListener(this);
259 ResourcesPlugin.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);
93bfd50a
PT
260 // we need to wrap the ISelectionProvider interface in the editor because
261 // the events table can be replaced later while the selection changed listener
262 // is only added once by the platform to the selection provider set here
263 getSite().setSelectionProvider(this);
faa38350 264 getSite().getPage().addPartListener(this);
6151d86c
PT
265 }
266
267 @Override
268 public void dispose() {
faa38350
PT
269 if (getSite() != null) {
270 getSite().getPage().removePartListener(this);
271 }
6151d86c
PT
272 ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
273 removePropertyListener(this);
274 if (fTrace != null) {
275 broadcast(new TmfTraceClosedSignal(this, fTrace));
276 }
277 if (fEventsTable != null) {
278 fEventsTable.dispose();
279 }
280 super.dispose();
281 }
282
faa38350 283 /**
99d7adc6 284 * Create the event table
faa38350 285 *
99d7adc6
AM
286 * @param parent
287 * The parent composite
288 * @param cacheSize
289 * The cache size
290 * @return The event table instance
faa38350 291 */
99d7adc6 292 protected @NonNull TmfEventsTable createEventsTable(final Composite parent, final int cacheSize) {
de34c0b1
AM
293 ITmfTrace trace = fTrace;
294
295 /*
296 * Check if the trace (or experiment type) defines a specific event
297 * table in its extension point.
298 */
299 TmfEventsTable table = TmfTraceTypeUIUtils.getEventTable(trace, parent, cacheSize);
300 if (table != null) {
301 return table;
302 }
303
304 /*
305 * Use the aspects defined by the trace type (or each trace type in an
306 * experiment) to build a table consisting of these.
307 */
308 Iterable<ITmfEventAspect> aspects = getTraceAspects(trace);
309 if (Iterables.isEmpty(aspects)) {
310 /* Couldn't find any event aspects, use a default table */
311 return new TmfEventsTable(parent, cacheSize);
312 }
313 return new TmfEventsTable(parent, cacheSize, aspects);
6151d86c
PT
314 }
315
99d7adc6
AM
316 /**
317 * Get the event table for the given trace. It will be of the type defined
318 * by the extension point if applicable, else it will be a default table
319 * with the extension-point-defined columns (if any).
320 *
321 * @param trace
322 * The event table is for this trace
323 * @param parent
324 * The parent composite of the table
325 * @param cacheSize
326 * The cache size to use
327 * @return The event table for the trace
328 */
de34c0b1 329 private static @NonNull Iterable<ITmfEventAspect> getTraceAspects(ITmfTrace trace) {
99d7adc6 330 if (trace instanceof TmfExperiment) {
de34c0b1 331 return getExperimentAspects((TmfExperiment) trace);
99d7adc6 332 }
de34c0b1 333 return trace.getEventAspects();
6151d86c
PT
334 }
335
336 /**
337 * Get the events table for an experiment. If all traces in the experiment
99d7adc6
AM
338 * are of the same type, use the same behavior as if it was one trace of
339 * that type.
6151d86c
PT
340 *
341 * @param experiment
342 * the experiment
343 * @param parent
344 * the parent Composite
345 * @param cacheSize
346 * the event table cache size
99d7adc6 347 * @return An event table of the appropriate type
6151d86c 348 */
de34c0b1
AM
349 private static @NonNull Iterable<ITmfEventAspect> getExperimentAspects(
350 final TmfExperiment experiment) {
fa62dc1d 351 List<ITmfTrace> traces = experiment.getTraces();
de34c0b1
AM
352 ImmutableSet.Builder<ITmfEventAspect> builder = new ImmutableSet.Builder<>();
353
354 /* For experiments, we'll add a "trace name" aspect/column */
355 builder.add(ITmfEventAspect.BaseAspects.TRACE_NAME);
99d7adc6
AM
356
357 String commonTraceType = getCommonTraceType(experiment);
358 if (commonTraceType != null) {
359 /*
360 * All the traces in this experiment are of the same type, let's
361 * just use the normal table for that type.
362 */
fa62dc1d 363 builder.addAll(traces.get(0).getEventAspects());
99d7adc6 364
de34c0b1
AM
365 } else {
366 /*
367 * There are different trace types in the experiment, so we are
368 * definitely using a TmfEventsTable. Aggregate the columns from all
369 * trace types.
370 */
371 for (ITmfTrace trace : traces) {
372 Iterable<ITmfEventAspect> traceAspects = trace.getEventAspects();
373 builder.addAll(traceAspects);
99d7adc6
AM
374 }
375 }
5db5a3a4 376 return checkNotNull(builder.build());
99d7adc6
AM
377 }
378
379 /**
380 * Check if an experiment contains traces of all the same type. If so,
381 * returns this type as a String. If not, returns null.
382 *
383 * @param experiment
384 * The experiment
385 * @return The common trace type if there is one, or 'null' if there are
386 * different types.
387 */
388 private static @Nullable String getCommonTraceType(TmfExperiment experiment) {
6151d86c
PT
389 String commonTraceType = null;
390 try {
391 for (final ITmfTrace trace : experiment.getTraces()) {
392 final IResource resource = trace.getResource();
393 if (resource == null) {
394 return null;
395 }
99d7adc6 396
6151d86c
PT
397 final String traceType = resource.getPersistentProperty(TmfCommonConstants.TRACETYPE);
398 if ((commonTraceType != null) && !commonTraceType.equals(traceType)) {
399 return null;
400 }
401 commonTraceType = traceType;
402 }
99d7adc6
AM
403 } catch (CoreException e) {
404 /*
405 * One of the traces didn't advertise its type, we can't infer
406 * anything.
407 */
408 return null;
6151d86c 409 }
99d7adc6 410 return commonTraceType;
6151d86c
PT
411 }
412
413 @Override
414 public ITmfTrace getTrace() {
415 return fTrace;
416 }
417
6151d86c
PT
418 @Override
419 public void setFocus() {
420 fEventsTable.setFocus();
6151d86c
PT
421 }
422
423 @Override
424 public Object getAdapter(final Class adapter) {
425 if (IGotoMarker.class.equals(adapter)) {
eb271b88
PT
426 if (fTrace == null || fEventsTable == null) {
427 return this;
428 }
6151d86c 429 return fEventsTable;
93bfd50a 430 } else if (IPropertySheetPage.class.equals(adapter)) {
faa38350 431 return new UnsortedPropertySheetPage();
6151d86c
PT
432 }
433 return super.getAdapter(adapter);
434 }
435
eb271b88
PT
436 /**
437 * @since 2.1
438 */
439 @Override
440 public void gotoMarker(IMarker marker) {
441 if (fTrace == null || fEventsTable == null) {
442 fPendingGotoMarker = marker;
443 } else {
444 fEventsTable.gotoMarker(marker);
445 }
446 }
447
6151d86c
PT
448 @Override
449 public void resourceChanged(final IResourceChangeEvent event) {
450 for (final IMarkerDelta delta : event.findMarkerDeltas(IMarker.BOOKMARK, false)) {
451 if (delta.getResource().equals(fFile)) {
452 if (delta.getKind() == IResourceDelta.REMOVED) {
453 final IMarker bookmark = delta.getMarker();
454 Display.getDefault().asyncExec(new Runnable() {
455 @Override
456 public void run() {
457 fEventsTable.removeBookmark(bookmark);
458 }
459 });
460 } else if (delta.getKind() == IResourceDelta.CHANGED) {
461 Display.getDefault().asyncExec(new Runnable() {
462 @Override
463 public void run() {
464 fEventsTable.getTable().refresh();
465 }
466 });
467 }
468 }
469 }
470 }
471
93bfd50a
PT
472 // ------------------------------------------------------------------------
473 // ISelectionProvider
474 // ------------------------------------------------------------------------
475
93bfd50a
PT
476 /**
477 * @since 2.0
478 */
479 @Override
480 public void addSelectionChangedListener(ISelectionChangedListener listener) {
481 fSelectionChangedListeners.add(listener);
482 }
483
93bfd50a
PT
484 /**
485 * @since 2.0
486 */
487 @Override
488 public ISelection getSelection() {
489 if (fEventsTable == null) {
490 return StructuredSelection.EMPTY;
491 }
492 return fEventsTable.getSelection();
493 }
494
93bfd50a
PT
495 /**
496 * @since 2.0
497 */
498 @Override
499 public void removeSelectionChangedListener(ISelectionChangedListener listener) {
500 fSelectionChangedListeners.remove(listener);
501 }
502
93bfd50a
PT
503 /**
504 * @since 2.0
505 */
506 @Override
507 public void setSelection(ISelection selection) {
508 // not implemented
509 }
510
511 /**
512 * Notifies any selection changed listeners that the viewer's selection has changed.
513 * Only listeners registered at the time this method is called are notified.
514 *
515 * @param event a selection changed event
516 *
517 * @see ISelectionChangedListener#selectionChanged
518 * @since 2.0
519 */
520 protected void fireSelectionChanged(final SelectionChangedEvent event) {
521 Object[] listeners = fSelectionChangedListeners.getListeners();
522 for (int i = 0; i < listeners.length; ++i) {
523 final ISelectionChangedListener l = (ISelectionChangedListener) listeners[i];
524 SafeRunnable.run(new SafeRunnable() {
525 @Override
526 public void run() {
527 l.selectionChanged(event);
528 }
529 });
530 }
531 }
532
533 // ------------------------------------------------------------------------
534 // ISelectionChangedListener
535 // ------------------------------------------------------------------------
536
93bfd50a
PT
537 /**
538 * @since 2.0
539 */
540 @Override
541 public void selectionChanged(SelectionChangedEvent event) {
542 fireSelectionChanged(event);
543 }
544
faa38350
PT
545 // ------------------------------------------------------------------------
546 // IPartListener
547 // ------------------------------------------------------------------------
548
faa38350
PT
549 /**
550 * @since 2.0
551 */
552 @Override
553 public void partActivated(IWorkbenchPart part) {
554 if (part == this && fTrace != null) {
81fe3479
PT
555 if (fTraceSelected) {
556 return;
557 }
558 fTraceSelected = true;
faa38350
PT
559 broadcast(new TmfTraceSelectedSignal(this, fTrace));
560 }
561 }
562
faa38350
PT
563 /**
564 * @since 2.0
565 */
566 @Override
567 public void partBroughtToTop(IWorkbenchPart part) {
81fe3479
PT
568 if (part == this && fTrace != null) {
569 if (fTraceSelected) {
570 return;
571 }
572 fTraceSelected = true;
573 broadcast(new TmfTraceSelectedSignal(this, fTrace));
574 }
faa38350
PT
575 }
576
faa38350
PT
577 /**
578 * @since 2.0
579 */
580 @Override
581 public void partClosed(IWorkbenchPart part) {
582 }
583
faa38350
PT
584 /**
585 * @since 2.0
586 */
587 @Override
588 public void partDeactivated(IWorkbenchPart part) {
589 }
590
faa38350
PT
591 /**
592 * @since 2.0
593 */
594 @Override
595 public void partOpened(IWorkbenchPart part) {
596 }
597
6151d86c
PT
598 // ------------------------------------------------------------------------
599 // Global commands
600 // ------------------------------------------------------------------------
601
602 /**
603 * Add a bookmark
604 */
605 public void addBookmark() {
606 fEventsTable.addBookmark(fFile);
607 }
608
609
610 // ------------------------------------------------------------------------
611 // Signal handlers
612 // ------------------------------------------------------------------------
613
614 /**
faa38350 615 * Handler for the Trace Selected signal
6151d86c
PT
616 *
617 * @param signal The incoming signal
618 */
619 @TmfSignalHandler
faa38350 620 public void traceSelected(final TmfTraceSelectedSignal signal) {
81fe3479
PT
621 if ((signal.getSource() != this)) {
622 if (signal.getTrace().equals(fTrace)) {
623 getSite().getPage().bringToTop(this);
624 } else {
625 fTraceSelected = false;
626 }
6151d86c
PT
627 }
628 }
629
630 /**
faa38350 631 * Update the display to use the updated timestamp format
6151d86c 632 *
faa38350
PT
633 * @param signal the incoming signal
634 * @since 2.0
6151d86c
PT
635 */
636 @TmfSignalHandler
faa38350 637 public void timestampFormatUpdated(TmfTimestampFormatUpdateSignal signal) {
c1cd9635
MAL
638 if (fEventsTable != null) {
639 fEventsTable.refresh();
640 }
6151d86c
PT
641 }
642
643}
This page took 0.348064 seconds and 5 git commands to generate.