\r
package org.eclipse.linuxtools.tmf.ui.viewers.events;\r
\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.core.runtime.Status;\r
+import org.eclipse.core.runtime.jobs.Job;\r
import org.eclipse.linuxtools.tmf.component.ITmfDataProvider;\r
import org.eclipse.linuxtools.tmf.component.TmfComponent;\r
import org.eclipse.linuxtools.tmf.event.TmfEvent;\r
protected boolean fPackDone = false;\r
\r
// Table column names\r
- private final String TIMESTAMP_COLUMN = "Timestamp";\r
- private final String SOURCE_COLUMN = "Source";\r
- private final String TYPE_COLUMN = "Type";\r
- private final String REFERENCE_COLUMN = "File";\r
- private final String CONTENT_COLUMN = "Content";\r
- private final String[] columnProperties = new String[] {\r
+ static private final String TIMESTAMP_COLUMN = "Timestamp";\r
+ static private final String SOURCE_COLUMN = "Source";\r
+ static private final String TYPE_COLUMN = "Type";\r
+ static private final String REFERENCE_COLUMN = "File";\r
+ static private final String CONTENT_COLUMN = "Content";\r
+ static private final String[] COLUMN_NAMES = new String[] {\r
TIMESTAMP_COLUMN,\r
SOURCE_COLUMN,\r
TYPE_COLUMN,\r
};\r
\r
// Column data\r
- private class ColumnData {\r
+ static private class ColumnData {\r
public final String header;\r
public final int width;\r
public final int alignment;\r
}\r
};\r
\r
- private ColumnData[] columnData = new ColumnData[] {\r
- new ColumnData(columnProperties[0], 100, SWT.LEFT),\r
- new ColumnData(columnProperties[1], 100, SWT.LEFT),\r
- new ColumnData(columnProperties[2], 100, SWT.LEFT),\r
- new ColumnData(columnProperties[3], 100, SWT.LEFT),\r
- new ColumnData(columnProperties[4], 100, SWT.LEFT)\r
+ static private ColumnData[] COLUMN_DATA = new ColumnData[] {\r
+ new ColumnData(COLUMN_NAMES[0], 100, SWT.LEFT),\r
+ new ColumnData(COLUMN_NAMES[1], 100, SWT.LEFT),\r
+ new ColumnData(COLUMN_NAMES[2], 100, SWT.LEFT),\r
+ new ColumnData(COLUMN_NAMES[3], 100, SWT.LEFT),\r
+ new ColumnData(COLUMN_NAMES[4], 100, SWT.LEFT)\r
};\r
\r
// ------------------------------------------------------------------------\r
private TmfEvent[] cache = new TmfEvent[1];\r
private int cacheStartIndex = 0;\r
private int cacheEndIndex = 0;\r
+ private boolean fDisposeOnClose;\r
// private IResourceChangeListener fResourceChangeListener;\r
\r
// ------------------------------------------------------------------------\r
\r
public void dispose() {\r
fTable.dispose();\r
- if (fTrace != null) {\r
+ if (fTrace != null && fDisposeOnClose) {\r
fTrace.dispose();\r
}\r
super.dispose();\r
* FIXME: Add support for column selection\r
*/\r
protected void createColumnHeaders(Table table) {\r
- for (int i = 0; i < columnData.length; i++) {\r
- TableColumn column = new TableColumn(table, columnData[i].alignment, i);\r
- column.setText(columnData[i].header);\r
- column.setWidth(columnData[i].width);\r
+ for (int i = 0; i < COLUMN_DATA.length; i++) {\r
+ TableColumn column = new TableColumn(table, COLUMN_DATA[i].alignment, i);\r
+ column.setText(COLUMN_DATA[i].header);\r
+ column.setWidth(COLUMN_DATA[i].width);\r
}\r
}\r
\r
fTable.setFocus();\r
}\r
\r
- public void setTrace(ITmfTrace trace) {\r
+ /**\r
+ * @param trace\r
+ * @param disposeOnClose true if the trace should be disposed when the table is disposed\r
+ */\r
+ public void setTrace(ITmfTrace trace, boolean disposeOnClose) {\r
+ if (fTrace != null && fDisposeOnClose) {\r
+ fTrace.dispose();\r
+ }\r
fTrace = trace;\r
+ fDisposeOnClose = disposeOnClose;\r
\r
// Perform the updates on the UI thread\r
fTable.getDisplay().syncExec(new Runnable() {\r
public void run() {\r
- //fTable.setSelection(0); PATA\r
+ //fTable.setSelection(0);\r
fTable.removeAll();\r
cacheStartIndex = cacheEndIndex = 0; // Clear the cache\r
\r
}\r
\r
@TmfSignalHandler\r
- public void currentTimeUpdated(TmfTimeSynchSignal signal) {\r
+ public void currentTimeUpdated(final TmfTimeSynchSignal signal) {\r
if (signal.getSource() != fTable && fTrace != null) {\r
- final int index = (int) fTrace.getRank(signal.getCurrentTime());\r
- // Perform the updates on the UI thread\r
- fTable.getDisplay().asyncExec(new Runnable() {\r
- public void run() {\r
- fTable.setSelection(index);\r
- // The timestamp might not correspond to an actual event\r
- // and the selection will point to the next experiment event.\r
- // But we would like to display both the event before and\r
- // after the selected timestamp.\r
- // This works fine by default except when the selected event\r
- // is the top displayed event. The following ensures that we\r
- // always see both events.\r
- if ((index > 0) && (index == fTable.getTopIndex())) {\r
- fTable.setTopIndex(index - 1);\r
- }\r
- }\r
- });\r
+ Job job = new Job("seeking...") {\r
+ @Override\r
+ protected IStatus run(IProgressMonitor monitor) {\r
+ final int index = (int) fTrace.getRank(signal.getCurrentTime());\r
+ // Perform the updates on the UI thread\r
+ fTable.getDisplay().asyncExec(new Runnable() {\r
+ public void run() {\r
+ fTable.setSelection(index);\r
+ // The timestamp might not correspond to an actual event\r
+ // and the selection will point to the next experiment event.\r
+ // But we would like to display both the event before and\r
+ // after the selected timestamp.\r
+ // This works fine by default except when the selected event\r
+ // is the top displayed event. The following ensures that we\r
+ // always see both events.\r
+ if ((index > 0) && (index == fTable.getTopIndex())) {\r
+ fTable.setTopIndex(index - 1);\r
+ }\r
+ }\r
+ });\r
+ return Status.OK_STATUS;\r
+ }};\r
+ job.schedule();\r
}\r
}\r
}\r
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.ViewerDropAdapter;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.dnd.TransferData;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IReusableEditor;
fViewer.getTree().addMouseListener(new MouseAdapter() {
@Override
public void mouseDoubleClick(MouseEvent event) {
- TreeSelection selection = (TreeSelection) fViewer.getSelection();
- Object element = selection.getFirstElement();
+ TreeItem treeItem = fViewer.getTree().getItem(new Point(event.x, event.y));
+ if (treeItem == null) return;
+ Object element = treeItem.getData();
if (element instanceof TmfExperimentNode) {
TmfExperimentNode experiment = (TmfExperimentNode) element;
selectExperiment(experiment);