ctf: Move plugins to the Trace Compass namespace
[deliverable/tracecompass.git] / org.eclipse.linuxtools.gdbtrace.ui / src / org / eclipse / linuxtools / internal / gdbtrace / ui / views / events / GdbEventsTable.java
index c842d3ec67e473c84a10a023d8f73ddb5cb7bf06..9b79b04779fd6d56464366bc2b42a352f94dd2e6 100644 (file)
 
 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.event.GdbTraceEvent;
-import org.eclipse.linuxtools.internal.gdbtrace.event.GdbTraceEventContent;
-import org.eclipse.linuxtools.internal.gdbtrace.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.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.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() {
@@ -74,10 +75,8 @@ public class GdbEventsTable extends TmfEventsTable {
                         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;
                         }
                     }
@@ -103,30 +102,34 @@ public class GdbEventsTable extends TmfEventsTable {
     }
 
     @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 = new TmfEventField[0];
-        if (event != null) {
-            GdbTraceEventContent content = (GdbTraceEventContent) event.getContent();
-            fields = new TmfEventField[] {
-                    new TmfEventField(TRACE_FRAME_COLUMN, content.getFrameNumber()),
-                    new TmfEventField(TRACEPOINT_COLUMN, content.getTracepointNumber()),
-                    new TmfEventField(FILE_COLUMN, event.getReference()),
-                    new TmfEventField(CONTENT_COLUMN, content.toString())
-            };
-        }
-        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);
+        }
     }
 }
This page took 0.026506 seconds and 5 git commands to generate.