JAL-1517 source formatting
[jalview.git] / src / jalview / gui / AlignmentPanel.java
index c392b1c..134019d 100644 (file)
@@ -1,19 +1,22 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8)
- * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
+ * Copyright (C) 2014 The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  * Jalview is free software: you can redistribute it and/or
  * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
  *  
  * Jalview is distributed in the hope that it will be useful, but 
  * WITHOUT ANY WARRANTY; without even the implied warranty 
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
  * PURPOSE.  See the GNU General Public License for more details.
  * 
- * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
 package jalview.gui;
 
@@ -422,15 +425,33 @@ public class AlignmentPanel extends GAlignmentPanel implements
   {
     int height = annotationPanel.adjustPanelHeight();
 
-    if (hscroll.isVisible())
-    {
-      height += hscroll.getPreferredSize().height;
-    }
-    if (height > alignFrame.getHeight() / 2)
-    {
-      height = alignFrame.getHeight() / 2;
+    int theight = av.getCharHeight()
+            * (av.getAlignment().getHeight() + (!av.hasHiddenRows() ? 0
+                    : av.getAlignment().getHiddenSequences().getSize()));
+    float sscaling = (float) (theight / (1.0 * theight + height));
+    float ascaling = (float) (height * 1.0 / alignFrame.getHeight());
+    int rheight = alignFrame.getHeight() - height - av.getCharHeight();
+    if (adjustPanelHeight)
+    {
+      // NOTE: this logic is different in the applet. Need a better algorithm to
+      // define behaviour
+      // try and set height according to alignment
+      if (ascaling > 0 && sscaling < 0.5)
+      {
+        // if the alignment is too big then
+        // default is 0.5 split
+        height = alignFrame.getHeight() / 2;
+      }
+      else
+      {
+        // if space for more than one sequence row left when annotation is fully
+        // displayed then set height to annotation height
+        // otherwise, leave at least two lines of sequence shown.
+        height = (rheight > av.getCharHeight()) ? height
+                : (-av.getCharHeight() * 3 + (int) (alignFrame.getHeight() * (1 - sscaling)));
+      }
     }
-    if (!adjustPanelHeight)
+    else
     {
       // maintain same window layout whilst updating sliders
       height = annotationScroller.getSize().height;
@@ -485,7 +506,7 @@ public class AlignmentPanel extends GAlignmentPanel implements
         return false;
       }
 
-      //fastPaint = false;
+      fastPaint = false;
       vscroll.setValue(vscroll.getValue() - 1);
     }
     else
@@ -495,11 +516,11 @@ public class AlignmentPanel extends GAlignmentPanel implements
         return false;
       }
 
-      //fastPaint = false;
+      fastPaint = false;
       vscroll.setValue(vscroll.getValue() + 1);
     }
 
-    //fastPaint = true;
+    fastPaint = true;
 
     return true;
   }
@@ -521,7 +542,7 @@ public class AlignmentPanel extends GAlignmentPanel implements
         return false;
       }
 
-      //fastPaint = false;
+      fastPaint = false;
       hscroll.setValue(hscroll.getValue() - 1);
     }
     else
@@ -531,11 +552,11 @@ public class AlignmentPanel extends GAlignmentPanel implements
         return false;
       }
 
-      //fastPaint = false;
+      fastPaint = false;
       hscroll.setValue(hscroll.getValue() + 1);
     }
 
-    //fastPaint = true;
+    fastPaint = true;
 
     return true;
   }
@@ -688,7 +709,7 @@ public class AlignmentPanel extends GAlignmentPanel implements
         seqPanel.seqCanvas.fastPaint(scrollX, scrollY);
         scalePanel.repaint();
 
-        if (av.getShowAnnotation() && scrollX!=0)
+        if (av.getShowAnnotation() && scrollX != 0)
         {
           annotationPanel.fastPaint(scrollX);
         }
@@ -1094,7 +1115,9 @@ public class AlignmentPanel extends GAlignmentPanel implements
   void makeAlignmentImage(int type, File file)
   {
     long progress = System.currentTimeMillis();
-    if (alignFrame != null)
+    boolean headless = (System.getProperty("java.awt.headless") != null && System
+            .getProperty("java.awt.headless").equals("true"));
+    if (alignFrame != null && !headless)
     {
       alignFrame.setProgressBar("Saving "
               + (type == jalview.util.ImageMaker.PNG ? "PNG image"
@@ -1115,8 +1138,7 @@ public class AlignmentPanel extends GAlignmentPanel implements
       if (av.getWrapAlignment())
       {
         height = getWrappedHeight();
-        if (System.getProperty("java.awt.headless") != null
-                && System.getProperty("java.awt.headless").equals("true"))
+        if (headless)
         {
           // need to obtain default alignment width and then add in any
           // additional allowance for id margin
@@ -1184,7 +1206,7 @@ public class AlignmentPanel extends GAlignmentPanel implements
       }
     } finally
     {
-      if (alignFrame != null)
+      if (alignFrame != null && !headless)
       {
         alignFrame.setProgressBar("Export complete.", progress);
       }