tmf: Remove the ITmfEventTableColumns extension point
[deliverable/tracecompass.git] / org.eclipse.tracecompass.gdbtrace.ui / src / org / eclipse / tracecompass / internal / gdbtrace / ui / views / events / GdbEventsTable.java
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 * Patrick Tasse - Initial API and implementation
11 *******************************************************************************/
12
13 package org.eclipse.tracecompass.internal.gdbtrace.ui.views.events;
14
15 import org.eclipse.core.runtime.IProgressMonitor;
16 import org.eclipse.core.runtime.IStatus;
17 import org.eclipse.core.runtime.Status;
18 import org.eclipse.core.runtime.jobs.Job;
19 import org.eclipse.jface.viewers.ISelectionChangedListener;
20 import org.eclipse.jface.viewers.SelectionChangedEvent;
21 import org.eclipse.swt.SWT;
22 import org.eclipse.swt.widgets.Composite;
23 import org.eclipse.swt.widgets.TableItem;
24 import org.eclipse.tracecompass.internal.gdbtrace.core.event.GdbTraceEvent;
25 import org.eclipse.tracecompass.internal.gdbtrace.core.event.GdbTraceEventContent;
26 import org.eclipse.tracecompass.internal.gdbtrace.core.trace.GdbEventAspects;
27 import org.eclipse.tracecompass.internal.gdbtrace.core.trace.GdbTrace;
28 import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler;
29 import org.eclipse.tracecompass.tmf.core.signal.TmfTimeSynchSignal;
30 import org.eclipse.tracecompass.tmf.core.signal.TmfTraceUpdatedSignal;
31 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
32 import org.eclipse.tracecompass.tmf.core.trace.experiment.TmfExperiment;
33 import org.eclipse.tracecompass.tmf.ui.viewers.events.TmfEventsTable;
34
35 /**
36 * GDB Event Table
37 *
38 * @author Patrick Tasse
39 */
40 public class GdbEventsTable extends TmfEventsTable {
41
42 // ------------------------------------------------------------------------
43 // Fields
44 // ------------------------------------------------------------------------
45
46 private GdbTrace fSelectedTrace = null;
47 private long fSelectedFrame = 0;
48
49 // ------------------------------------------------------------------------
50 // Constructor
51 // ------------------------------------------------------------------------
52
53 /**
54 * Constructor
55 *
56 * @param parent
57 * the parent
58 * @param cacheSize
59 * the cache size
60 */
61 public GdbEventsTable(Composite parent, int cacheSize) {
62 super(parent, cacheSize, GdbEventAspects.getAspects());
63 // Set the alignment of the first two columns
64 fTable.getColumns()[0].setAlignment(SWT.RIGHT);
65 fTable.getColumns()[1].setAlignment(SWT.RIGHT);
66
67 // Synchronize currently selected frame in GDB with table selection
68 addSelectionChangedListener(new ISelectionChangedListener() {
69 @Override
70 public void selectionChanged(SelectionChangedEvent e) {
71 TableItem[] selection = fTable.getSelection();
72 if (selection.length > 0) {
73 TableItem selectedTableItem = selection[0];
74 if (selectedTableItem != null) {
75 Object data = selectedTableItem.getData();
76 if (data instanceof GdbTraceEvent) {
77 GdbTraceEvent event = (GdbTraceEvent) data;
78 GdbTrace gdbTrace = (GdbTrace) event.getTrace();
79 GdbTraceEventContent content = event.getContent();
80 selectFrame(gdbTrace, content.getFrameNumber());
81 return;
82 }
83 }
84 }
85 fSelectedTrace = null;
86 }
87 });
88 }
89
90 @Override
91 public void setTrace(ITmfTrace trace, boolean disposeOnClose) {
92 super.setTrace(trace, disposeOnClose);
93 if (trace instanceof GdbTrace) {
94 fSelectedTrace = (GdbTrace) trace;
95 fSelectedFrame = 0;
96 } else if (trace instanceof TmfExperiment) {
97 TmfExperiment experiment = (TmfExperiment) trace;
98 if (experiment.getTraces().length > 0) {
99 fSelectedTrace = (GdbTrace) experiment.getTraces()[0];
100 fSelectedFrame = 0;
101 }
102 }
103 }
104
105 @Override
106 @TmfSignalHandler
107 public void currentTimeUpdated(final TmfTimeSynchSignal signal) {
108 // do not synchronize on time
109 }
110
111 private void selectFrame(final GdbTrace gdbTrace, final long frameNumber) {
112 Job b = new Job("GDB Trace select frame") { //$NON-NLS-1$
113 @Override
114 protected IStatus run(IProgressMonitor monitor) {
115 // This sends commands to GDB and can potentially wait on the UI
116 // thread (gdb traces console buffer full) so it needs to be
117 // exectued on a non-UI thread
118 gdbTrace.selectFrame(frameNumber);
119 fSelectedTrace = gdbTrace;
120 fSelectedFrame = frameNumber;
121 return Status.OK_STATUS;
122 }
123 };
124 b.setSystem(true);
125 b.schedule();
126 }
127
128 @Override
129 @TmfSignalHandler
130 public void traceUpdated(TmfTraceUpdatedSignal signal) {
131 super.traceUpdated(signal);
132 if (fSelectedTrace.getNbFrames() == fSelectedTrace.getNbEvents()) {
133 selectFrame(fSelectedTrace, fSelectedFrame);
134 }
135 }
136 }
This page took 0.21407 seconds and 5 git commands to generate.