import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.ui.IReusableEditor;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IGotoMarker;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.views.properties.IPropertySheetPage;
TmfTraceColumnManager.saveColumnOrder(fTrace.getTraceTypeId(), fEventsTable.getColumnOrder());
}
fEventsTable.dispose();
- fTraceSelected = false;
fFile = ((TmfEditorInput) getEditorInput()).getFile();
fTrace = ((TmfEditorInput) getEditorInput()).getTrace();
/* change the input to a FileEditorInput to allow open handlers to find this editor */
super.setInput(new FileEditorInput(fFile));
createAndInitializeTable();
+ // The table was swapped for a new one, make sure it gets focus if
+ // the editor is active. Otherwise, the new table will not get focus
+ // because the editor already had focus.
+ if (!PlatformUI.getWorkbench().isClosing() && PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart() == getSite().getPart()) {
+ fEventsTable.setFocus();
+ }
fParent.layout();
}
}
if (fTrace != null) {
setPartName(fTrace.getName());
fEventsTable = createEventsTable(fParent, fTrace.getCacheSize());
+ fEventsTable.registerContextMenus(getSite());
fEventsTable.setColumnOrder(TmfTraceColumnManager.loadColumnOrder(fTrace.getTraceTypeId()));
fEventsTable.addSelectionChangedListener(this);
fEventsTable.setTrace(fTrace, true);
fEventsTable.refreshBookmarks(fFile);
- if (fPendingGotoMarker != null) {
- fEventsTable.gotoMarker(fPendingGotoMarker);
- fPendingGotoMarker = null;
- }
/* ensure start time is set */
final ITmfContext context = fTrace.seekEvent(0);
context.dispose();
broadcast(new TmfTraceOpenedSignal(this, fTrace, fFile));
+ if (fTraceSelected) {
+ broadcast(new TmfTraceSelectedSignal(this, fTrace));
+ }
+
+ /* go to marker after trace opened */
+ if (fPendingGotoMarker != null) {
+ fEventsTable.gotoMarker(fPendingGotoMarker);
+ fPendingGotoMarker = null;
+ }
} else {
fEventsTable = new TmfEventsTable(fParent, 0);
fEventsTable.addSelectionChangedListener(this);
@Override
public void resourceChanged(final IResourceChangeEvent event) {
+ final Set<@NonNull IMarker> added = new HashSet<>();
+ final Set<@NonNull IMarker> removed = new HashSet<>();
+ boolean deltaFound = false;
for (final IMarkerDelta delta : event.findMarkerDeltas(IMarker.BOOKMARK, false)) {
if (delta.getResource().equals(fFile)) {
if (delta.getKind() == IResourceDelta.REMOVED) {
- final IMarker bookmark = delta.getMarker();
- Display.getDefault().asyncExec(new Runnable() {
- @Override
- public void run() {
- fEventsTable.removeBookmark(bookmark);
- }
- });
- } else if (delta.getKind() == IResourceDelta.CHANGED) {
- Display.getDefault().asyncExec(new Runnable() {
- @Override
- public void run() {
- fEventsTable.getTable().refresh();
- }
- });
+ removed.add(delta.getMarker());
+ } else if (delta.getKind() == IResourceDelta.ADDED) {
+ added.add(delta.getMarker());
}
+ /* this also covers IResourceDelta.CHANGED */
+ deltaFound = true;
}
}
+ if (!deltaFound) {
+ return;
+ }
+ Display.getDefault().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ if (removed.isEmpty() && added.isEmpty()) {
+ fEventsTable.getTable().refresh();
+ } else {
+ if (!removed.isEmpty()) {
+ fEventsTable.removeBookmark(Iterables.toArray(removed, IMarker.class));
+ }
+ if (!added.isEmpty()) {
+ fEventsTable.addBookmark(Iterables.toArray(added, IMarker.class));
+ }
+ }
+ }
+ });
}
// ------------------------------------------------------------------------
@Override
public void partActivated(IWorkbenchPart part) {
- if (part == this && fTrace != null) {
- if (fTraceSelected) {
+ if (part == this && !fTraceSelected) {
+ fTraceSelected = true;
+ if (fTrace == null) {
return;
}
- fTraceSelected = true;
broadcast(new TmfTraceSelectedSignal(this, fTrace));
}
}
@Override
public void partBroughtToTop(IWorkbenchPart part) {
- if (part == this && fTrace != null) {
- if (fTraceSelected) {
+ if (part == this && !fTraceSelected) {
+ fTraceSelected = true;
+ if (fTrace == null) {
return;
}
- fTraceSelected = true;
broadcast(new TmfTraceSelectedSignal(this, fTrace));
}
}