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