JAL-2587 fiddling with dimensions
[jalview.git] / src / jalview / gui / OverviewPanel.java
index 0f276d7..ef064f4 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;
@@ -67,6 +69,8 @@ public class OverviewPanel extends JPanel implements Runnable,
 
   private boolean draggingBox = false;
 
+  private ProgressPanel progressPanel;
+
   /**
    * Creates a new OverviewPanel object.
    * 
@@ -82,10 +86,12 @@ 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);
 
     av.getRanges().addPropertyChangeListener(this);
@@ -95,13 +101,9 @@ public class OverviewPanel extends JPanel implements Runnable,
       @Override
       public void componentResized(ComponentEvent evt)
       {
-        if ((getWidth() != od.getWidth())
-                || (getHeight() != (od.getHeight())))
-        {
-          updateOverviewImage();
-          setBoxPosition();
-        }
+        updateOverviewImage();
       }
+
     });
 
     addMouseMotionListener(new MouseMotionAdapter()
@@ -109,11 +111,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 +127,6 @@ public class OverviewPanel extends JPanel implements Runnable,
                   .getAlignment().getHiddenSequences(), av.getAlignment()
                   .getHiddenColumns());
           }
-
         }
       }
 
@@ -134,12 +136,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 +158,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,12 +197,9 @@ public class OverviewPanel extends JPanel implements Runnable,
           showPopupMenu(evt);
         }
       }
-
-
     });
 
-
-    updateOverviewImage();
+    // updateOverviewImage();
   }
 
   /*
@@ -256,13 +256,22 @@ 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());
-      od.setHeight(getHeight());
+      od.setHeight(getHeight() - progressPanel.getHeight());
     }
     
-    setPreferredSize(new Dimension(od.getWidth(), od.getHeight()));
+    setPreferredSize(new Dimension(od.getWidth(),
+            od.getHeight()));
 
     if (oviewCanvas.restartDraw())
     {
@@ -273,6 +282,7 @@ public class OverviewPanel extends JPanel implements Runnable,
     thread.start();
     repaint();
 
+    
   }
 
   @Override
@@ -302,4 +312,22 @@ 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
+    {
+      progressPanel = null;
+      av = null;
+      oviewCanvas = null;
+      ap = null;
+      od = null;
+    }
+  }
 }