JAL-2611 reinstated missed commit
[jalview.git] / src / jalview / gui / OverviewPanel.java
index 7a4456e..06c9a61 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;
@@ -50,8 +51,8 @@ import javax.swing.SwingUtilities;
  * @author $author$
  * @version $Revision$
  */
-public class OverviewPanel extends JPanel implements Runnable,
-        ViewportListenerI
+public class OverviewPanel extends JPanel
+        implements Runnable, ViewportListenerI
 {
   private OverviewDimensions od;
 
@@ -65,6 +66,8 @@ public class OverviewPanel extends JPanel implements Runnable,
 
   private boolean showHidden = true;
 
+  private boolean draggingBox = false;
+
   /**
    * Creates a new OverviewPanel object.
    * 
@@ -77,8 +80,8 @@ public class OverviewPanel extends JPanel implements Runnable,
     this.ap = alPanel;
 
     od = new OverviewDimensionsShowHidden(av.getRanges(),
-            (av.isShowAnnotation() && av
-                    .getAlignmentConservationAnnotation() != null));
+            (av.isShowAnnotation()
+                    && av.getAlignmentConservationAnnotation() != null));
 
     setSize(od.getWidth(), od.getHeight());
 
@@ -109,9 +112,35 @@ public class OverviewPanel extends JPanel implements Runnable,
       {
         if (!SwingUtilities.isRightMouseButton(evt))
         {
-          od.updateViewportFromMouse(evt.getX(), evt.getY(), av
-                  .getAlignment().getHiddenSequences(), av.getAlignment()
-                  .getHiddenColumns());
+          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());
+          }
+        }
+      }
+
+      @Override
+      public void mouseMoved(MouseEvent evt)
+      {
+        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));
         }
       }
     });
@@ -129,11 +158,24 @@ public class OverviewPanel extends JPanel implements Runnable,
           }
         }
         else
-        // if (!av.getWrapAlignment())
         {
-          od.updateViewportFromMouse(evt.getX(), evt.getY(), av
-                  .getAlignment().getHiddenSequences(), av.getAlignment()
-                  .getHiddenColumns());
+          // don't do anything if the mouse press is in the overview's box
+          // (wait to see if it's a drag instead)
+          // otherwise update the viewport
+          if (!od.isPositionInBox(evt.getX(), evt.getY()))
+          {
+            draggingBox = false;
+            od.updateViewportFromMouse(evt.getX(), evt.getY(),
+                    av.getAlignment().getHiddenSequences(),
+                    av.getAlignment().getHiddenColumns());
+          }
+          else
+          {
+            draggingBox = true;
+            od.setDragPoint(evt.getX(), evt.getY(),
+                    av.getAlignment().getHiddenSequences(),
+                    av.getAlignment().getHiddenColumns());
+          }
         }
       }
 
@@ -184,15 +226,15 @@ public class OverviewPanel extends JPanel implements Runnable,
     {
       showHidden = false;
       od = new OverviewDimensionsHideHidden(av.getRanges(),
-              (av.isShowAnnotation() && av
-                      .getAlignmentConservationAnnotation() != null));
+              (av.isShowAnnotation()
+                      && av.getAlignmentConservationAnnotation() != null));
     }
     else
     {
       showHidden = true;
       od = new OverviewDimensionsShowHidden(av.getRanges(),
-              (av.isShowAnnotation() && av
-                      .getAlignmentConservationAnnotation() != null));
+              (av.isShowAnnotation()
+                      && av.getAlignmentConservationAnnotation() != null));
     }
     oviewCanvas.resetOviewDims(od);
     updateOverviewImage();
@@ -217,7 +259,7 @@ public class OverviewPanel extends JPanel implements Runnable,
       od.setWidth(getWidth());
       od.setHeight(getHeight());
     }
-    
+
     setPreferredSize(new Dimension(od.getWidth(), od.getHeight()));
 
     if (oviewCanvas.restartDraw())
@@ -234,9 +276,9 @@ public class OverviewPanel extends JPanel implements Runnable,
   public void run()
   {
     oviewCanvas.draw(av.isShowSequenceFeatures(),
-            (av.isShowAnnotation() && av
-                    .getAlignmentConservationAnnotation() != null), ap
-                    .getSeqPanel().seqCanvas.getFeatureRenderer());
+            (av.isShowAnnotation()
+                    && av.getAlignmentConservationAnnotation() != null),
+            ap.getSeqPanel().seqCanvas.getFeatureRenderer());
     setBoxPosition();
   }
 
@@ -247,8 +289,8 @@ public class OverviewPanel extends JPanel implements Runnable,
    */
   private void setBoxPosition()
   {
-    od.setBoxPosition(av.getAlignment().getHiddenSequences(), av
-            .getAlignment().getHiddenColumns());
+    od.setBoxPosition(av.getAlignment().getHiddenSequences(),
+            av.getAlignment().getHiddenColumns());
     repaint();
   }