tmf: Keep focused item aligned on vertical zoom
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / tmf / ui / widgets / timegraph / TimeGraphCombo.java
index 11d916eb1c981c7da44991ab12df84dafc10243e..33fdfb4dc91b42465d6c3b707e5f60c2b41a467c 100644 (file)
@@ -43,6 +43,7 @@ import org.eclipse.swt.events.ControlAdapter;
 import org.eclipse.swt.events.ControlEvent;
 import org.eclipse.swt.events.DisposeEvent;
 import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.KeyEvent;
 import org.eclipse.swt.events.MouseEvent;
 import org.eclipse.swt.events.MouseTrackAdapter;
 import org.eclipse.swt.events.MouseWheelListener;
@@ -177,6 +178,18 @@ public class TimeGraphCombo extends Composite {
                 public void resetVerticalZoom() {
                     TimeGraphCombo.this.resetVerticalZoom();
                 }
+
+                @Override
+                public void setElementPosition(ITimeGraphEntry entry, int y) {
+                    /*
+                     * Queue the update to make sure the time graph combo has finished
+                     * updating the item heights.
+                     */
+                    getDisplay().asyncExec(() -> {
+                        super.setElementPosition(entry, y);
+                        alignTreeItems(false);
+                    });
+                }
             };
         }
     }
@@ -242,7 +255,7 @@ public class TimeGraphCombo extends Composite {
      * The TreeLabelProviderWrapper is used to intercept the filler items
      * from the calls to the tree's real label provider.
      */
-    private class TreeLabelProviderWrapper implements ITableLabelProvider {
+    private static class TreeLabelProviderWrapper implements ITableLabelProvider {
         private final ITableLabelProvider labelProvider;
 
         public TreeLabelProviderWrapper(ITableLabelProvider labelProvider) {
@@ -334,7 +347,7 @@ public class TimeGraphCombo extends Composite {
      * the time graph combo's real ViewerFilters. These filler items should
      * always be visible.
      */
-    private class ViewerFilterWrapper extends ViewerFilter {
+    private static class ViewerFilterWrapper extends ViewerFilter {
 
         private ViewerFilter fWrappedFilter;
 
@@ -563,11 +576,14 @@ public class TimeGraphCombo extends Composite {
                     fTimeGraphViewer.setSelection((ITimeGraphEntry) treeItems.get(treeItems.size() - 1).getData());
                     event.doit = false;
                 } else if ((event.character == '+' || event.character == '=') && ((event.stateMask & SWT.CTRL) != 0)) {
-                    verticalZoom(true);
+                    fTimeGraphViewer.getTimeGraphControl().keyPressed(new KeyEvent(event));
+                    return;
                 } else if (event.character == '-' && ((event.stateMask & SWT.CTRL) != 0)) {
-                    verticalZoom(false);
+                    fTimeGraphViewer.getTimeGraphControl().keyPressed(new KeyEvent(event));
+                    return;
                 } else if (event.character == '0' && ((event.stateMask & SWT.CTRL) != 0)) {
-                    resetVerticalZoom();
+                    fTimeGraphViewer.getTimeGraphControl().keyPressed(new KeyEvent(event));
+                    return;
                 } else {
                     return;
                 }
@@ -878,6 +894,7 @@ public class TimeGraphCombo extends Composite {
         final Tree tree = fTreeViewer.getTree();
         for (String columnName : columnNames) {
             TreeColumn column = new TreeColumn(tree, SWT.LEFT);
+            column.setMoveable(true);
             column.setText(columnName);
             column.pack();
         }
@@ -1240,7 +1257,9 @@ public class TimeGraphCombo extends Composite {
                 if (SWT.getPlatform().equals("gtk")) { //$NON-NLS-1$
                     TreeItem topItem = tree.getTopItem();
                     tree.getDisplay().asyncExec(() -> {
-                        tree.setTopItem(topItem);
+                        if (!tree.isDisposed() && !topItem.isDisposed()) {
+                            tree.setTopItem(topItem);
+                        }
                     });
                 }
             }
This page took 0.032131 seconds and 5 git commands to generate.