Merge branch 'develop' into feature/JAL-2611
[jalview.git] / src / jalview / gui / OverviewPanel.java
index 0f276d7..c81ac2f 100755 (executable)
@@ -28,6 +28,7 @@ import jalview.viewmodel.OverviewDimensionsShowHidden;
 import jalview.viewmodel.ViewportListenerI;
 
 import java.awt.BorderLayout;
+import java.awt.Cursor;
 import java.awt.Dimension;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
@@ -109,11 +110,12 @@ public class OverviewPanel extends JPanel implements Runnable,
       @Override
       public void mouseDragged(MouseEvent evt)
       {
-        if (!SwingUtilities.isRightMouseButton(evt)
-                && !av.getWrapAlignment())
+        if (!SwingUtilities.isRightMouseButton(evt))
         {
           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());
@@ -124,7 +126,6 @@ public class OverviewPanel extends JPanel implements Runnable,
                   .getAlignment().getHiddenSequences(), av.getAlignment()
                   .getHiddenColumns());
           }
-
         }
       }
 
@@ -134,12 +135,12 @@ public class OverviewPanel extends JPanel implements Runnable,
         if (od.isPositionInBox(evt.getX(), evt.getY()))
         {
           // display drag cursor at mouse position
-
+          setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
         }
         else
         {
           // reset cursor
-
+          setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
         }
       }
     });
@@ -156,7 +157,8 @@ public class OverviewPanel extends JPanel implements Runnable,
             showPopupMenu(evt);
           }
         }
-        else if (!av.getWrapAlignment())
+        else
+        // if (!av.getWrapAlignment())
         {
           if (!od.isPositionInBox(evt.getX(), evt.getY()))
           {
@@ -194,11 +196,8 @@ public class OverviewPanel extends JPanel implements Runnable,
           showPopupMenu(evt);
         }
       }
-
-
     });
 
-
     updateOverviewImage();
   }
 
@@ -256,6 +255,14 @@ public class OverviewPanel extends JPanel implements Runnable,
    */
   public void updateOverviewImage()
   {
+    if (oviewCanvas == null)
+    {
+      /*
+       * panel has been disposed
+       */
+      return;
+    }
+
     if ((getWidth() > 0) && (getHeight() > 0))
     {
       od.setWidth(getWidth());
@@ -272,7 +279,6 @@ public class OverviewPanel extends JPanel implements Runnable,
     Thread thread = new Thread(this);
     thread.start();
     repaint();
-
   }
 
   @Override
@@ -302,4 +308,21 @@ public class OverviewPanel extends JPanel implements Runnable,
   {
     setBoxPosition();
   }
+
+  /**
+   * Removes this object as a property change listener, and nulls references
+   */
+  protected void dispose()
+  {
+    try
+    {
+      av.getRanges().removePropertyChangeListener(this);
+    } finally
+    {
+      av = null;
+      oviewCanvas = null;
+      ap = null;
+      od = null;
+    }
+  }
 }