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