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