import java.util.List;
+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.jdt.annotation.NonNull;
import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
-import org.eclipse.tracecompass.tmf.core.signal.TmfWindowRangeUpdatedSignal;
-import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler;
import org.eclipse.tracecompass.tmf.core.signal.TmfSelectionRangeUpdatedSignal;
+import org.eclipse.tracecompass.tmf.core.signal.TmfSignalHandler;
+import org.eclipse.tracecompass.tmf.core.signal.TmfWindowRangeUpdatedSignal;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.ui.viewers.TmfTimeViewer;
fTreeViewer.setLabelProvider(new TreeLabelProvider());
List<TmfTreeColumnData> columns = getColumnDataProvider().getColumnData();
this.setTreeColumns(columns);
+
}
/**
* Get the tree viewer object
*
* @return The tree viewer object displayed by this viewer
+ * @since 2.2
*/
- protected TreeViewer getTreeViewer() {
+ public TreeViewer getTreeViewer() {
return fTreeViewer;
}
* <code>false</code> for the visible time range
*/
protected void updateContent(final long start, final long end, final boolean isSelection) {
- Thread thread = new Thread() {
+ Job thread = new Job("") { //$NON-NLS-1$
@Override
- public void run() {
+ public IStatus run(IProgressMonitor monitor) {
final ITmfTreeViewerEntry rootEntry = updateElements(start, end, isSelection);
/* Set the input in main thread only if it didn't change */
if (rootEntry != null) {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
+ if (fTreeViewer.getControl().isDisposed()) {
+ return;
+ }
+
if (rootEntry != fTreeViewer.getInput()) {
fTreeViewer.setInput(rootEntry);
contentChanged(rootEntry);
}
});
}
+ return Status.OK_STATUS;
}
};
- thread.start();
+ thread.setSystem(true);
+ thread.schedule();
}
/**
@TmfSignalHandler
public void selectionRangeUpdated(TmfSelectionRangeUpdatedSignal signal) {
super.selectionRangeUpdated(signal);
- if ((signal.getSource() != this) && (getTrace() != null)) {
+ if (signal != null && (signal.getSource() != this) && (getTrace() != null)) {
updateContent(this.getSelectionBeginTime(), this.getSelectionEndTime(), true);
}
}