package org.eclipse.linuxtools.internal.gdbtrace.ui.views.events;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.linuxtools.internal.gdbtrace.core.event.GdbTraceEvent;
import org.eclipse.linuxtools.internal.gdbtrace.core.event.GdbTraceEventContent;
import org.eclipse.linuxtools.internal.gdbtrace.core.trace.GdbTrace;
-import org.eclipse.linuxtools.tmf.core.event.ITmfEvent;
-import org.eclipse.linuxtools.tmf.core.event.ITmfEventField;
-import org.eclipse.linuxtools.tmf.core.event.TmfEventField;
import org.eclipse.linuxtools.tmf.core.signal.TmfSignalHandler;
import org.eclipse.linuxtools.tmf.core.signal.TmfTimeSynchSignal;
+import org.eclipse.linuxtools.tmf.core.signal.TmfTraceUpdatedSignal;
import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;
import org.eclipse.linuxtools.tmf.core.trace.TmfExperiment;
import org.eclipse.linuxtools.tmf.ui.viewers.events.TmfEventsTable;
-import org.eclipse.linuxtools.tmf.ui.widgets.virtualtable.ColumnData;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TableItem;
/**
- * GDB Events Table
- * @author Patrick Tasse
+ * GDB Event Table
*
+ * @author Patrick Tasse
*/
public class GdbEventsTable extends TmfEventsTable {
- private static final String TRACE_FRAME_COLUMN = GdbTraceEventContent.TRACE_FRAME;
- private static final String TRACEPOINT_COLUMN = GdbTraceEventContent.TRACEPOINT;
- private static final String FILE_COLUMN = "File"; //$NON-NLS-1$
- private static final String CONTENT_COLUMN = "Content"; //$NON-NLS-1$
- private static final ColumnData[] COLUMN_DATA = new ColumnData[] {
- new ColumnData(TRACE_FRAME_COLUMN, 100, SWT.RIGHT),
- new ColumnData(TRACEPOINT_COLUMN, 100, SWT.RIGHT),
- new ColumnData(FILE_COLUMN, 100, SWT.LEFT),
- new ColumnData(CONTENT_COLUMN, 100, SWT.LEFT)
- };
+ // ------------------------------------------------------------------------
+ // Fields
+ // ------------------------------------------------------------------------
private GdbTrace fSelectedTrace = null;
private long fSelectedFrame = 0;
+ // ------------------------------------------------------------------------
+ // Constructor
+ // ------------------------------------------------------------------------
+
/**
* Constructor
- * @param parent the parent
- * @param cacheSize the cache size
+ *
+ * @param parent
+ * the parent
+ * @param cacheSize
+ * the cache size
*/
public GdbEventsTable(Composite parent, int cacheSize) {
- super(parent, cacheSize, COLUMN_DATA);
- // Set search field ids for event filter
- fTable.getColumns()[2].setData(Key.FIELD_ID, ITmfEvent.EVENT_FIELD_REFERENCE);
- fTable.getColumns()[3].setData(Key.FIELD_ID, ITmfEvent.EVENT_FIELD_CONTENT);
+ super(parent, cacheSize, GdbEventTableColumns.GDB_COLUMNS);
+ // Set the alignment of the first two columns
+ fTable.getColumns()[0].setAlignment(SWT.RIGHT);
+ fTable.getColumns()[1].setAlignment(SWT.RIGHT);
// Synchronize currently selected frame in GDB with table selection
addSelectionChangedListener(new ISelectionChangedListener() {
if (data instanceof GdbTraceEvent) {
GdbTraceEvent event = (GdbTraceEvent) data;
GdbTrace gdbTrace = (GdbTrace) event.getTrace();
- GdbTraceEventContent content = (GdbTraceEventContent) event.getContent();
- gdbTrace.selectFrame(content.getFrameNumber());
- fSelectedTrace = gdbTrace;
- fSelectedFrame = content.getFrameNumber();
+ GdbTraceEventContent content = event.getContent();
+ selectFrame(gdbTrace, content.getFrameNumber());
return;
}
}
}
@Override
- protected void populateCompleted() {
- if (fSelectedTrace != null) {
- fSelectedTrace.selectFrame(fSelectedFrame);
- }
+ @TmfSignalHandler
+ public void currentTimeUpdated(final TmfTimeSynchSignal signal) {
+ // do not synchronize on time
}
- @Override
- protected ITmfEventField[] extractItemFields(ITmfEvent event) {
- ITmfEventField[] fields = EMPTY_FIELD_ARRAY;
- if (event != null) {
- GdbTraceEventContent content = (GdbTraceEventContent) event.getContent();
- fields = new TmfEventField[] {
- new TmfEventField(TRACE_FRAME_COLUMN, content.getFrameNumber(), null),
- new TmfEventField(TRACEPOINT_COLUMN, content.getTracepointNumber(), null),
- new TmfEventField(FILE_COLUMN, event.getReference(), null),
- new TmfEventField(CONTENT_COLUMN, content.toString(), null)
- };
- }
- return fields;
+ private void selectFrame(final GdbTrace gdbTrace, final long frameNumber) {
+ Job b = new Job("GDB Trace select frame") { //$NON-NLS-1$
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ // This sends commands to GDB and can potentially wait on the UI
+ // thread (gdb traces console buffer full) so it needs to be
+ // exectued on a non-UI thread
+ gdbTrace.selectFrame(frameNumber);
+ fSelectedTrace = gdbTrace;
+ fSelectedFrame = frameNumber;
+ return Status.OK_STATUS;
+ }
+ };
+ b.setSystem(true);
+ b.schedule();
}
@Override
@TmfSignalHandler
- public void currentTimeUpdated(final TmfTimeSynchSignal signal) {
- // do not synchronize on time
+ public void traceUpdated(TmfTraceUpdatedSignal signal) {
+ super.traceUpdated(signal);
+ if (fSelectedTrace.getNbFrames() == fSelectedTrace.getNbEvents()) {
+ selectFrame(fSelectedTrace, fSelectedFrame);
+ }
}
}