]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.charts/src/org/simantics/charts/editor/TimeSeriesEditor.java
Fixed context menu popup location for HiDPI displays with display zoom
[simantics/platform.git] / bundles / org.simantics.charts / src / org / simantics / charts / editor / TimeSeriesEditor.java
index 4f633fbe6924c5478277604500b9ada221b2334d..bffd4c8a24952fb60bfae8cd517be91a9d24e36d 100644 (file)
@@ -134,6 +134,7 @@ import org.simantics.utils.threads.ThreadUtils;
 import org.simantics.utils.ui.BundleUtils;
 import org.simantics.utils.ui.ErrorLogger;
 import org.simantics.utils.ui.ExceptionUtils;
+import org.simantics.utils.ui.SWTDPIUtil;
 import org.simantics.utils.ui.SWTUtils;
 import org.simantics.utils.ui.dialogs.ShowMessage;
 import org.simantics.utils.ui.jface.ActiveSelectionProvider;
@@ -567,13 +568,12 @@ public class TimeSeriesEditor extends ResourceEditorPart {
                 if (event.button != MouseEvent.RIGHT_BUTTON)
                     return false;
 
-                final Point p = new Point((int) event.screenPosition.getX(), (int) event.screenPosition.getY());
-                SWTUtils.asyncExec(chassis, new Runnable() {
-                    @Override
-                    public void run() {
-                        if (!canvas.isDisposed())
-                            showPopup(p);
-                    }
+                Point p = new Point(
+                        SWTDPIUtil.downscaleSwt((int) event.screenPosition.getX()),
+                        SWTDPIUtil.downscaleSwt((int) event.screenPosition.getY()));
+                SWTUtils.asyncExec(chassis, () -> {
+                    if (!canvas.isDisposed())
+                        showPopup(p);
                 });
                 return true;
             }
@@ -586,6 +586,7 @@ public class TimeSeriesEditor extends ResourceEditorPart {
         // Track data source and preinitialize chartData
         project.addHintListener(chartDataListener);
         chartData.readFrom( (ChartData) project.getHint( chartDataKey ) );
+        chartData.reference();
 
         if (chartData.run != null) {
             milestoneListener = new MilestoneSpecListener();
@@ -748,6 +749,7 @@ public class TimeSeriesEditor extends ResourceEditorPart {
                 chartData.datasource.removeListener( stepListener );
             if (chartData.experiment!=null)
                 chartData.experiment.removeListener( experimentStateListener );
+            chartData.dereference();
             chartData.readFrom( null );
         }
 
@@ -840,7 +842,9 @@ public class TimeSeriesEditor extends ResourceEditorPart {
         }
 
         if (doLayout) trendNode.layout();
+        this.chartData.dereference();
         this.chartData.readFrom( data );
+        this.chartData.reference();
         tp.setDirty();
         
         if (!ObjectUtils.objectEquals(oldExperimentResource, newExperimentResource)) {
@@ -989,18 +993,18 @@ public class TimeSeriesEditor extends ResourceEditorPart {
         tp.setDirty();
     }
 
-    @SuppressWarnings("rawtypes")
+    @SuppressWarnings("unchecked")
     @Override
-    public Object getAdapter(Class adapter) {
+    public <T> T getAdapter(Class<T> adapter) {
         if (adapter == INode.class) {
             ICanvasContext ctx = cvsCtx;
             if (ctx != null)
-                return ctx.getSceneGraph();
+                return (T) ctx.getSceneGraph();
         }
         if (adapter == IPropertyPage.class)
-            return new StandardPropertyPage(getSite(), getPropertyPageContexts());
+            return (T) new StandardPropertyPage(getSite(), getPropertyPageContexts());
         if (adapter == ICanvasContext.class)
-            return cvsCtx;
+            return (T) cvsCtx;
         return super.getAdapter(adapter);
     }