JAL-4367 Limit right and top adjustments
[jalview.git] / src / jalview / gui / AnnotationLabels.java
index 08a25ba..7c5afcd 100755 (executable)
@@ -793,9 +793,15 @@ public class AnnotationLabels extends JPanel
     {
       Dimension d = ap.annotationScroller.getPreferredSize();
       int dif = evt.getY() - oldY;
+      dif -= dif % ap.av.getCharHeight();
 
-      dif /= ap.av.getCharHeight();
-      dif *= ap.av.getCharHeight();
+      // don't allow setting an annotation panel height larger than visible
+      // (otherwise you can't get back)
+      if (d.height - dif > ap.idPanelHolder.getHeight()
+              - ap.getIdSpaceFillerPanel1().getHeight())
+      {
+        return;
+      }
 
       if ((d.height - dif) > 20)
       {
@@ -1112,7 +1118,7 @@ public class AnnotationLabels extends JPanel
     if (av.hasHiddenColumns())
     {
       Iterator<int[]> it = av.getAlignment().getHiddenColumns()
-              .getVisContigsIterator(0, sq.getLength(), false);
+              .getVisContigsIterator(0, sq.getLength() + 1, false);
       omitHidden = new String[] { sq.getSequenceStringFromIterator(it) };
     }
 
@@ -1198,20 +1204,21 @@ public class AnnotationLabels extends JPanel
    * @param width
    *          Width for scaling labels
    */
-  public void drawComponent(Graphics g, boolean clip, int givenWidth, boolean forGUI)
+  public void drawComponent(Graphics g, boolean clip, int givenWidth,
+          boolean forGUI)
   {
     int width = givenWidth;
     IdwidthAdjuster iwa = null;
     if (ap != null)
     {
       iwa = ap.idwidthAdjuster;
-      if ((Cache.getDefault(ADJUST_ANNOTATION_LABELS_WIDTH_PREF, true)
-              || Jalview.isHeadlessMode()))
+      if (Cache.getDefault(ADJUST_ANNOTATION_LABELS_WIDTH_PREF, true)
+              || Jalview.isHeadlessMode())
       {
         Graphics2D g2d = (Graphics2D) g;
         Graphics dummy = g2d.create();
-        int newAnnotationIdWidth = drawLabels(dummy, clip, width, false, forGUI,
-                null, false);
+        int newAnnotationIdWidth = drawLabels(dummy, clip, width, false,
+                forGUI, null, false);
         dummy.dispose();
         Dimension d = ap.calculateDefaultAlignmentIdWidth();
         int alignmentIdWidth = d.width;
@@ -1245,8 +1252,10 @@ public class AnnotationLabels extends JPanel
     }
     else
     {
-      int newAnnotationIdWidth = drawLabels(g, clip, width, false, forGUI, null, false);
-      width = newAnnotationIdWidth<givenWidth ? givenWidth: Math.min(newAnnotationIdWidth, givenWidth);
+      int newAnnotationIdWidth = drawLabels(g, clip, width, false, forGUI,
+              null, false);
+      width = newAnnotationIdWidth < givenWidth ? givenWidth
+              : Math.min(newAnnotationIdWidth, givenWidth);
     }
     drawLabels(g, clip, width, true, forGUI, null, false);
   }
@@ -1258,21 +1267,28 @@ public class AnnotationLabels extends JPanel
    * fmetrics must be supplied.
    * 
    * @param g
-   *          Graphics2D instance (used for rendering and font scaling if no fmetrics supplied) 
+   *          Graphics2D instance (used for rendering and font scaling if no
+   *          fmetrics supplied)
    * @param clip
    *          - true indicates that only current visible area needs to be
    *          rendered
    * @param width
    *          Width for scaling labels
-   * @param actuallyDraw - when false, no graphics are rendered to g0
-   * @param forGUI - when false, GUI relevant marks like indicators for dragging annotation panel height are not rendered
+   * @param actuallyDraw
+   *          - when false, no graphics are rendered to g0
+   * @param forGUI
+   *          - when false, GUI relevant marks like indicators for dragging
+   *          annotation panel height are not rendered
    * @param fmetrics
    *          FontMetrics if Graphics object g is null
-   * @param includeHidden - when true returned width includes labels in hidden row width calculation 
+   * @param includeHidden
+   *          - when true returned width includes labels in hidden row width
+   *          calculation
    * @return the width of the annotation labels.
    */
   public int drawLabels(Graphics g0, boolean clip, int width,
-          boolean actuallyDraw, boolean forGUI, FontMetrics fmetrics, boolean includeHidden)
+          boolean actuallyDraw, boolean forGUI, FontMetrics fmetrics,
+          boolean includeHidden)
   {
     if (clip)
     {
@@ -1554,7 +1570,8 @@ public class AnnotationLabels extends JPanel
       }
     }
 
-    if (!resizePanel && dragEvent != null && aa != null && selectedRow>-1 && selectedRow<aa.length)
+    if (!resizePanel && dragEvent != null && aa != null && selectedRow > -1
+            && selectedRow < aa.length)
     {
       if (actuallyDraw && g != null)
       {