// work through any autoCalculated annotation already on the view
// removing it if it should be placed in a different location on the
// annotation panel.
+ List<String> remains=new ArrayList(visan.keySet());
for (int h = 0; h < hSize; h++)
{
jalview.datamodel.AlignmentAnnotation jalan = al
.getAlignmentAnnotation()[h];
if (jalan.autoCalculated)
{
- JvAnnotRow valan = visan.get(jalan.label);
+ String k;
+ JvAnnotRow valan = visan.get(k=jalan.label);
if (jalan.getCalcId()!=null)
{
- valan = visan.get(jalan.label+ "\t"+jalan.getCalcId());
+ valan = visan.get(k=jalan.label+ "\t"+jalan.getCalcId());
}
if (valan != null)
{
// delete the auto calculated row from the alignment
al.deleteAnnotation(jalan, false);
+ remains.remove(k);
hSize--;
h--;
if (valan != nullAnnot)
}
}
}
+ // Add any (possibly stale) autocalculated rows that were not appended to the view during construction
+ for (String other:remains)
+ {
+ JvAnnotRow othera=visan.get(other);
+ if (othera!=nullAnnot && othera.template.getCalcId()!=null && othera.template.getCalcId().length()>0)
+ {
+ reorder.add(othera);
+ }
+ }
+ // now put the automatic annotation in its correct place
int s = 0, srt[] = new int[reorder.size()];
JvAnnotRow[] rws = new JvAnnotRow[reorder.size()];
for (JvAnnotRow jvar : reorder)