JAL-2587 tidies
[jalview.git] / src / jalview / gui / OverviewPanel.java
index 7a4456e..791de99 100755 (executable)
@@ -20,6 +20,7 @@
  */
 package jalview.gui;
 
+import jalview.renderer.OverviewRenderer;
 import jalview.util.MessageManager;
 import jalview.util.Platform;
 import jalview.viewmodel.OverviewDimensions;
@@ -28,6 +29,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;
@@ -65,6 +67,10 @@ public class OverviewPanel extends JPanel implements Runnable,
 
   private boolean showHidden = true;
 
+  private boolean draggingBox = false;
+
+  private ProgressPanel progressPanel;
+
   /**
    * Creates a new OverviewPanel object.
    * 
@@ -80,11 +86,16 @@ public class OverviewPanel extends JPanel implements Runnable,
             (av.isShowAnnotation() && av
                     .getAlignmentConservationAnnotation() != null));
 
-    setSize(od.getWidth(), od.getHeight());
 
-    oviewCanvas = new OverviewCanvas(od, av);
+
     setLayout(new BorderLayout());
+    progressPanel = new ProgressPanel(OverviewRenderer.UPDATE,
+            MessageManager.getString("label.oview_calc"));
+    this.add(progressPanel, BorderLayout.SOUTH);
+    oviewCanvas = new OverviewCanvas(od, av, progressPanel);
+
     add(oviewCanvas, BorderLayout.CENTER);
+    setSize(od.getWidth(), od.getHeight());
 
     av.getRanges().addPropertyChangeListener(this);
 
@@ -93,12 +104,7 @@ public class OverviewPanel extends JPanel implements Runnable,
       @Override
       public void componentResized(ComponentEvent evt)
       {
-        if ((getWidth() != od.getWidth())
-                || (getHeight() != (od.getHeight())))
-        {
-          updateOverviewImage();
-          setBoxPosition();
-        }
+        updateOverviewImage();
       }
     });
 
@@ -109,9 +115,35 @@ public class OverviewPanel extends JPanel implements Runnable,
       {
         if (!SwingUtilities.isRightMouseButton(evt))
         {
-          od.updateViewportFromMouse(evt.getX(), evt.getY(), av
+          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));
         }
       }
     });
@@ -131,9 +163,31 @@ public class OverviewPanel extends JPanel implements Runnable,
         else
         // if (!av.getWrapAlignment())
         {
-          od.updateViewportFromMouse(evt.getX(), evt.getY(), av
-                  .getAlignment().getHiddenSequences(), av.getAlignment()
-                  .getHiddenColumns());
+          if (!od.isPositionInBox(evt.getX(), evt.getY()))
+          {
+            // 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
+            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());
+          }
+        }
+      }
+
+      @Override
+      public void mouseReleased(MouseEvent evt)
+      {
+        if (draggingBox)
+        {
+          draggingBox = false;
         }
       }
 
@@ -218,7 +272,8 @@ public class OverviewPanel extends JPanel implements Runnable,
       od.setHeight(getHeight());
     }
     
-    setPreferredSize(new Dimension(od.getWidth(), od.getHeight()));
+    setPreferredSize(new Dimension(od.getWidth(),
+            od.getHeight()));
 
     if (oviewCanvas.restartDraw())
     {
@@ -228,6 +283,8 @@ public class OverviewPanel extends JPanel implements Runnable,
     Thread thread = new Thread(this);
     thread.start();
     repaint();
+
+    
   }
 
   @Override
@@ -268,6 +325,7 @@ public class OverviewPanel extends JPanel implements Runnable,
       av.getRanges().removePropertyChangeListener(this);
     } finally
     {
+      progressPanel = null;
       av = null;
       oviewCanvas = null;
       ap = null;