JAL-244 More accurate width calculation, allow increased id width adjustment after...
authorBen Soares <b.soares@dundee.ac.uk>
Thu, 20 Jul 2023 11:32:43 +0000 (12:32 +0100)
committerBen Soares <b.soares@dundee.ac.uk>
Thu, 20 Jul 2023 11:32:43 +0000 (12:32 +0100)
src/jalview/gui/AlignmentPanel.java
src/jalview/gui/AnnotationLabels.java

index db193f1..2396329 100644 (file)
@@ -50,6 +50,7 @@ import jalview.api.AlignmentViewPanel;
 import jalview.bin.Cache;
 import jalview.bin.Console;
 import jalview.bin.Jalview;
+import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.HiddenColumns;
 import jalview.datamodel.SearchResultsI;
@@ -296,7 +297,7 @@ public class AlignmentPanel extends GAlignmentPanel implements
     int afwidth = (alignFrame != null ? alignFrame.getWidth() : 300);
     int idWidth = Math.min(afwidth - 200, 2 * afwidth / 3);
     int maxwidth = Math.max(IdwidthAdjuster.MIN_ID_WIDTH, idWidth);
-    return calculateIdWidth(-1);
+    return calculateIdWidth(-1, false, true);
   }
 
   /**
@@ -310,6 +311,12 @@ public class AlignmentPanel extends GAlignmentPanel implements
    */
   protected Dimension calculateIdWidth(int maxwidth)
   {
+    return calculateIdWidth(maxwidth, true, false);
+  }
+
+  public Dimension calculateIdWidth(int maxwidth,
+          boolean includeAnnotations, boolean visibleOnly)
+  {
     Container c = new Container();
 
     FontMetrics fm = c.getFontMetrics(
@@ -329,18 +336,20 @@ public class AlignmentPanel extends GAlignmentPanel implements
     }
 
     // Also check annotation label widths
-    i = 0;
-
-    if (al.getAlignmentAnnotation() != null)
+    if (includeAnnotations && al.getAlignmentAnnotation() != null)
     {
       fm = c.getFontMetrics(getAlabels().getFont());
 
-      while (i < al.getAlignmentAnnotation().length)
+      for (i = 0; i < al.getAlignmentAnnotation().length; i++)
       {
-        String label = al.getAlignmentAnnotation()[i].label;
+        AlignmentAnnotation aa = al.getAlignmentAnnotation()[i];
+        if (visibleOnly && !aa.visible)
+        {
+          continue;
+        }
+        String label = aa.label;
         int stringWidth = fm.stringWidth(label);
         idWidth = Math.max(idWidth, stringWidth);
-        i++;
       }
     }
 
index d459217..ffc565c 100755 (executable)
@@ -1194,7 +1194,7 @@ public class AnnotationLabels extends JPanel
     int width = givenWidth;
     IdwidthAdjuster iwa = ap.idwidthAdjuster;
     if ((Cache.getDefault(ADJUST_ANNOTATION_LABELS_WIDTH_PREF, true)
-            || Jalview.isHeadlessMode()) && !iwa.manuallyAdjusted())
+            || Jalview.isHeadlessMode()))
     {
       Graphics2D g2d = (Graphics2D) g;
       Graphics dummy = g2d.create();