1 /*******************************************************************************
2 * Copyright (c) 2013 Ericsson
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
10 * Patrick Tasse - Initial API and implementation
11 *******************************************************************************/
13 package org
.eclipse
.linuxtools
.internal
.gdbtrace
.ui
.views
.events
;
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
.event
.ITmfEvent
;
25 import org
.eclipse
.linuxtools
.tmf
.core
.signal
.TmfSignalHandler
;
26 import org
.eclipse
.linuxtools
.tmf
.core
.signal
.TmfTimeSynchSignal
;
27 import org
.eclipse
.linuxtools
.tmf
.core
.signal
.TmfTraceUpdatedSignal
;
28 import org
.eclipse
.linuxtools
.tmf
.core
.trace
.ITmfTrace
;
29 import org
.eclipse
.linuxtools
.tmf
.core
.trace
.TmfExperiment
;
30 import org
.eclipse
.linuxtools
.tmf
.ui
.viewers
.events
.TmfEventsTable
;
31 import org
.eclipse
.linuxtools
.tmf
.ui
.widgets
.virtualtable
.ColumnData
;
32 import org
.eclipse
.swt
.SWT
;
33 import org
.eclipse
.swt
.widgets
.Composite
;
34 import org
.eclipse
.swt
.widgets
.TableItem
;
38 * @author Patrick Tasse
41 public class GdbEventsTable
extends TmfEventsTable
{
43 private static final String TRACE_FRAME_COLUMN
= GdbTraceEventContent
.TRACE_FRAME
;
44 private static final String TRACEPOINT_COLUMN
= GdbTraceEventContent
.TRACEPOINT
;
45 private static final String FILE_COLUMN
= "File"; //$NON-NLS-1$
46 private static final String CONTENT_COLUMN
= "Content"; //$NON-NLS-1$
47 private static final ColumnData
[] COLUMN_DATA
= new ColumnData
[] {
48 new ColumnData(TRACE_FRAME_COLUMN
, 100, SWT
.RIGHT
),
49 new ColumnData(TRACEPOINT_COLUMN
, 100, SWT
.RIGHT
),
50 new ColumnData(FILE_COLUMN
, 100, SWT
.LEFT
),
51 new ColumnData(CONTENT_COLUMN
, 100, SWT
.LEFT
)
54 private GdbTrace fSelectedTrace
= null;
55 private long fSelectedFrame
= 0;
59 * @param parent the parent
60 * @param cacheSize the cache size
62 public GdbEventsTable(Composite parent
, int cacheSize
) {
63 super(parent
, cacheSize
, COLUMN_DATA
);
64 // Set search field ids for event filter
65 fTable
.getColumns()[2].setData(Key
.FIELD_ID
, ITmfEvent
.EVENT_FIELD_REFERENCE
);
66 fTable
.getColumns()[3].setData(Key
.FIELD_ID
, ITmfEvent
.EVENT_FIELD_CONTENT
);
68 // Synchronize currently selected frame in GDB with table selection
69 addSelectionChangedListener(new ISelectionChangedListener() {
71 public void selectionChanged(SelectionChangedEvent e
) {
72 TableItem
[] selection
= fTable
.getSelection();
73 if (selection
.length
> 0) {
74 TableItem selectedTableItem
= selection
[0];
75 if (selectedTableItem
!= null) {
76 Object data
= selectedTableItem
.getData();
77 if (data
instanceof GdbTraceEvent
) {
78 GdbTraceEvent event
= (GdbTraceEvent
) data
;
79 GdbTrace gdbTrace
= (GdbTrace
) event
.getTrace();
80 GdbTraceEventContent content
= (GdbTraceEventContent
) event
.getContent();
81 selectFrame(gdbTrace
, content
.getFrameNumber());
86 fSelectedTrace
= null;
92 public void setTrace(ITmfTrace trace
, boolean disposeOnClose
) {
93 super.setTrace(trace
, disposeOnClose
);
94 if (trace
instanceof GdbTrace
) {
95 fSelectedTrace
= (GdbTrace
) trace
;
97 } else if (trace
instanceof TmfExperiment
) {
98 TmfExperiment experiment
= (TmfExperiment
) trace
;
99 if (experiment
.getTraces().length
> 0) {
100 fSelectedTrace
= (GdbTrace
) experiment
.getTraces()[0];
107 public String
[] getItemStrings(ITmfEvent event
) {
109 return EMPTY_STRING_ARRAY
;
111 // FIXME Unchecked cast. Null check should be replaced with instanceof
112 // GdbTraceEvent check, and its getContent() should be overriden.
113 GdbTraceEventContent content
= (GdbTraceEventContent
) event
.getContent();
114 return new String
[] {
115 String
.valueOf(content
.getFrameNumber()),
116 String
.valueOf(content
.getTracepointNumber()),
117 event
.getReference(),
124 public void currentTimeUpdated(final TmfTimeSynchSignal signal
) {
125 // do not synchronize on time
128 private void selectFrame(final GdbTrace gdbTrace
, final long frameNumber
) {
129 Job b
= new Job("GDB Trace select frame") { //$NON-NLS-1$
131 protected IStatus
run(IProgressMonitor monitor
) {
132 // This sends commands to GDB and can potentially wait on the UI
133 // thread (gdb traces console buffer full) so it needs to be
134 // exectued on a non-UI thread
135 gdbTrace
.selectFrame(frameNumber
);
136 fSelectedTrace
= gdbTrace
;
137 fSelectedFrame
= frameNumber
;
138 return Status
.OK_STATUS
;
147 public void traceUpdated(TmfTraceUpdatedSignal signal
) {
148 super.traceUpdated(signal
);
149 if (fSelectedTrace
.getNbFrames() == fSelectedTrace
.getNbEvents()) {
150 selectFrame(fSelectedTrace
, fSelectedFrame
);