{
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
}
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;
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;
{
hasHiddenRows = false;
int olY = 0;
+ int nexAA = 0;
for (int i = 0; i < aa.length; i++)
{
visible = true;
continue;
}
olY = y;
+ // look ahead to next annotation
+ for (nexAA=i+1; nexAA<aa.length && !aa[nexAA].visible; nexAA++)
+ ;
y += aa[i].height;
if (clip)
{
}
String label = aa[i].label;
boolean vertBar = false;
+ if ((lastLabel != null && lastLabel.equals(label)))
+ {
+ label = aa[i].description;
+ }
+ else
+ {
+ if (nexAA < aa.length && label.equals(aa[nexAA].label)) // &&
+ // aa[nexY].sequenceRef==aa[i].sequenceRef)
+ {
+ lastLabel = label;
+ // next label is the same as this label
+ label = aa[i].description;
+ }
+ else
+ {
+ lastLabel = label;
+ }
+ }
if (aa[i].sequenceRef != null)
{
if (aa[i].sequenceRef != lastSeqRef)
{
if (vertBar)
{
- g.drawLine(20, y + offset, 20, y - aa[i].height);
- g.drawLine(20, y + offset, x - 20, y + offset);
+ g.drawLine(width-3, y + offset-fontHeight, width-3, (int)(y - 1.5*aa[i].height-offset-fontHeight));
+ // g.drawLine(20, y + offset, x - 20, y + offset);
}
g.drawString(label, x, y + offset);