From: James Procter Date: Wed, 15 Mar 2023 17:30:48 +0000 (+0000) Subject: JAL-4091 JAL-4147 - revised annotation label display so consecutive runs of rows... X-Git-Tag: Release_2_11_3_0~15^2^2~14 X-Git-Url: http://source.jalview.org/gitweb/?p=jalview.git;a=commitdiff_plain;h=7340ceba8e1dafe0a3c9ce14ca4c1b1c29a25e0d JAL-4091 JAL-4147 - revised annotation label display so consecutive runs of rows with the same label have their description shown instead of the bare label --- diff --git a/src/jalview/analysis/AnnotationSorter.java b/src/jalview/analysis/AnnotationSorter.java index 92ed9be..0f0cf68 100644 --- a/src/jalview/analysis/AnnotationSorter.java +++ b/src/jalview/analysis/AnnotationSorter.java @@ -156,8 +156,15 @@ public class AnnotationSorter { return showAutocalcAbove ? 1 : -1; } - int sequenceOrder = compareSequences(o1, o2); - return sequenceOrder == 0 ? compareLabels(o1, o2) : sequenceOrder; + int computedOrder = compareSequences(o1, o2); + if (computedOrder==0) { + computedOrder = compareLabels(o1, o2); + } + if (computedOrder==0) + { + computedOrder = compareDescriptions(o1,o2); + } + return computedOrder; } @Override @@ -358,6 +365,29 @@ public class AnnotationSorter } String label1 = o1.label; String label2 = o2.label; + return compareString(label1,label2); + } + + /** + * Non-case-sensitive comparison of annotation descriptions. Returns zero if either + * argument is null. + * + * @param o1 + * @param o2 + * @return + */ + private int compareDescriptions(AlignmentAnnotation o1, AlignmentAnnotation o2) + { + if (o1 == null || o2 == null) + { + return 0; + } + String label1 = o1.description; + String label2 = o2.description; + return compareString(label1,label2); + } + private int compareString(String label1, String label2) + { if (label1 == null && label2 == null) { return 0; diff --git a/src/jalview/gui/AnnotationLabels.java b/src/jalview/gui/AnnotationLabels.java index c01a6f3..0ccd6c2 100755 --- a/src/jalview/gui/AnnotationLabels.java +++ b/src/jalview/gui/AnnotationLabels.java @@ -1087,6 +1087,7 @@ public class AnnotationLabels extends JPanel g.translate(0, getScrollOffset()); g.setColor(Color.black); SequenceI lastSeqRef = null; + String lastLabel = null; AlignmentAnnotation[] aa = av.getAlignment().getAlignmentAnnotation(); int fontHeight = g.getFont().getSize(); int y = 0; @@ -1111,6 +1112,7 @@ public class AnnotationLabels extends JPanel { hasHiddenRows = false; int olY = 0; + int nexAA = 0; for (int i = 0; i < aa.length; i++) { visible = true; @@ -1120,6 +1122,9 @@ public class AnnotationLabels extends JPanel continue; } olY = y; + // look ahead to next annotation + for (nexAA=i+1; nexAA