JAL-3369 JAL-3253-applet adds embedded dim checking for overview frame
[jalview.git] / src / jalview / appletgui / OverviewPanel.java
index 0256055..ef684f7 100755 (executable)
@@ -31,6 +31,7 @@ import java.awt.BorderLayout;
 import java.awt.CheckboxMenuItem;
 import java.awt.Cursor;
 import java.awt.Dimension;
+import java.awt.Frame;
 import java.awt.Panel;
 import java.awt.PopupMenu;
 import java.awt.event.ComponentAdapter;
@@ -43,16 +44,19 @@ import java.awt.event.MouseListener;
 import java.awt.event.MouseMotionListener;
 import java.beans.PropertyChangeEvent;
 
+import javax.swing.SwingUtilities;
+
+@SuppressWarnings("serial")
 public class OverviewPanel extends Panel implements Runnable,
         MouseMotionListener, MouseListener, ViewportListenerI
 {
-  private OverviewDimensions od;
+  OverviewDimensions od;
 
-  private OverviewCanvas oviewCanvas;
+  OverviewCanvas canvas;
 
   private AlignViewport av;
 
-  private AlignmentPanel ap;
+  AlignmentPanel ap;
 
   private boolean showHidden = true;
 
@@ -70,9 +74,9 @@ public class OverviewPanel extends Panel implements Runnable,
             (av.isShowAnnotation()
                     && av.getSequenceConsensusHash() != null));
 
-    oviewCanvas = new OverviewCanvas(od, av);
+    canvas = new OverviewCanvas(this, od, av);
     setLayout(new BorderLayout());
-    add(oviewCanvas, BorderLayout.CENTER);
+    add(canvas, BorderLayout.CENTER);
 
     setSize(new Dimension(od.getWidth(), od.getHeight()));
 
@@ -125,13 +129,14 @@ public class OverviewPanel extends Panel implements Runnable,
   {
     if (od.isPositionInBox(evt.getX(), evt.getY()))
     {
-      // display drag cursor at mouse position
-      setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
+      this.getParent()
+              .setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
     }
     else
     {
-      // reset cursor
-      setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+      this.getParent()
+              .setCursor(
+                      Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
     }
   }
 
@@ -141,7 +146,7 @@ public class OverviewPanel extends Panel implements Runnable,
     if ((evt.getModifiers()
             & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK)
     {
-      if (!Platform.isAMac())
+      if (!Platform.isMac()) // BH was excluding JavaScript
       {
         showPopupMenu(evt);
       }
@@ -154,9 +159,15 @@ public class OverviewPanel extends Panel implements Runnable,
       if (!od.isPositionInBox(evt.getX(), evt.getY()))
       { 
        draggingBox = false;
+
+        // display drag cursor at mouse position
+        setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
+
         od.updateViewportFromMouse(evt.getX(), evt.getY(),
                 av.getAlignment().getHiddenSequences(),
                 av.getAlignment().getHiddenColumns());
+        getParent()
+                .setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
       }
       else
       {
@@ -171,37 +182,38 @@ public class OverviewPanel extends Panel implements Runnable,
   @Override
   public void mouseReleased(MouseEvent evt)
   {
+    draggingBox = false;
   }
 
   @Override
   public void mouseDragged(MouseEvent evt)
   {
-    if ((evt.getModifiers()
-            & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK)
+    if (Platform.isWinRightButton(evt)) 
     {
-      if (!Platform.isAMac())
-      {
-        showPopupMenu(evt);
-      }
+       showPopupMenu(evt);
+       return;
     }
-    else
-    {
-      if (draggingBox)
-      {
-        // set the mouse position as a fixed point in the box
-        // and drag relative to that position
-        od.adjustViewportFromMouse(evt.getX(), evt.getY(),
-                av.getAlignment().getHiddenSequences(),
-                av.getAlignment().getHiddenColumns());
-      }
-      else
-      {
-        od.updateViewportFromMouse(evt.getX(), evt.getY(),
-                av.getAlignment().getHiddenSequences(),
-                av.getAlignment().getHiddenColumns());
-      }
-      ap.paintAlignment(false, false);
+
+    if (SwingUtilities.isRightMouseButton(evt))
+    { 
+       return;
     }
+    
+         if (draggingBox)
+         {
+           // set the mouse position as a fixed point in the box
+           // and drag relative to that position
+           od.adjustViewportFromMouse(evt.getX(), evt.getY(),
+                   av.getAlignment().getHiddenSequences(),
+                   av.getAlignment().getHiddenColumns());
+         }
+         else
+         {
+           od.updateViewportFromMouse(evt.getX(), evt.getY(),
+                   av.getAlignment().getHiddenSequences(),
+                   av.getAlignment().getHiddenColumns());
+         }
+         ap.paintAlignment(false, false);
   }
 
   /**
@@ -209,7 +221,7 @@ public class OverviewPanel extends Panel implements Runnable,
    */
   public void updateOverviewImage()
   {
-    if (oviewCanvas == null)
+    if (canvas == null)
     {
       /*
        * panel has been disposed
@@ -228,7 +240,7 @@ public class OverviewPanel extends Panel implements Runnable,
     {
       if (updateRunning)
       {
-        oviewCanvas.restartDraw();
+        canvas.restartDraw();
         return;
       }
 
@@ -243,7 +255,7 @@ public class OverviewPanel extends Panel implements Runnable,
   @Override
   public void run()
   {
-    oviewCanvas.draw(av.isShowSequenceFeatures(),
+    canvas.draw(av.isShowSequenceFeatures(),
             (av.isShowAnnotation()
                     && av.getAlignmentConservationAnnotation() != null),
             ap.seqPanel.seqCanvas.getFeatureRenderer());
@@ -310,7 +322,7 @@ public class OverviewPanel extends Panel implements Runnable,
               (av.isShowAnnotation()
                       && av.getAlignmentConservationAnnotation() != null));
     }
-    oviewCanvas.resetOviewDims(od);
+    canvas.resetOviewDims(od);
     updateOverviewImage();
   }
 
@@ -322,10 +334,17 @@ public class OverviewPanel extends Panel implements Runnable,
     try
     {
       av.getRanges().removePropertyChangeListener(this);
+      Frame parent = (Frame) getParent();
+      parent.dispose();
+      parent.setVisible(false);
     } finally
     {
       av = null;
-      oviewCanvas = null;
+      if (canvas != null)
+      {
+        canvas.dispose();
+      }
+      canvas = null;
       ap = null;
       od = null;
     }