}
/**
- * DOCUMENT ME!
+ * Calculates the height of the annotation displayed in the annotation panel.
+ * Callers should normally call the ap.adjustAnnotationHeight method to ensure all
+ * annotation associated components are updated correctly.
+ *
*/
public int adjustPanelHeight()
{
}
this.setPreferredSize(new Dimension(1, height));
+ ap.alabels.validate();
return height;
}
|| label2.equals(LABEL))
{
tlabel = anot[index].description;
- if (tlabel == null)
+ if (tlabel == null || tlabel.length()<1)
{
if (label2.equals(HELIX) || label2.equals(SHEET))
{
int iconOffset = 0;
boolean validRes = false;
boolean validEnd = false;
+ boolean labelAllCols = false;
+ boolean centreColLabels,centreColLabelsDef = av.getCentreColumnLabels();
+ boolean scaleColLabel=false;
boolean[] graphGroupDrawn = new boolean[aa.length];
-
+ int charOffset = 0; // offset for a label
+ float fmWidth, fmScaling = 1f; // scaling for a label to fit it into a column.
+ Font ofont = g.getFont();
// \u03B2 \u03B1
for (int i = 0; i < aa.length; i++)
{
{
continue;
}
-
+ centreColLabels = row.centreColLabels || centreColLabelsDef;
+ labelAllCols = row.showAllColLabels;
+ scaleColLabel = row.scaleColLabel;
lastSS = ' ';
lastSSX = 0;
&& row.annotations[column].displayCharacter != null
&& (row.annotations[column].displayCharacter.length() > 0))
{
-
- int charOffset = (av.getCentreColumnLabels()) ? ((av.charWidth - fm
- .charsWidth(row.annotations[column].displayCharacter
- .toCharArray(), 0,
- row.annotations[column].displayCharacter.length())) / 2)
- : (av.charWidth - fm
- .charWidth(row.annotations[column].displayCharacter
- .charAt(0))) / 2;
-
+
+ if (centreColLabels || scaleColLabel)
+ {
+ fmWidth = (float) fm
+ .charsWidth(row.annotations[column].displayCharacter
+ .toCharArray(), 0,
+ row.annotations[column].displayCharacter.length());
+
+ if ( scaleColLabel ) {
+ // justify the label and scale to fit in column
+ if (fmWidth > av.charWidth) {
+ // scale only if the current font isn't already small enough
+ fmScaling = av.charWidth;
+ fmScaling /= fmWidth;
+ g.setFont(ofont.deriveFont(AffineTransform.getScaleInstance(fmScaling, 1.0)));
+ // and update the label's width to reflect the scaling.
+ fmWidth = av.charWidth;
+ }
+ }
+ } else {
+ fmWidth = (float) fm
+ .charWidth(row.annotations[column].displayCharacter.charAt(0));
+ }
+ charOffset = (int) ((av.charWidth - fmWidth) / 2f);
+
if (row.annotations[column].colour == null)
g.setColor(Color.black);
else
(x * av.charWidth) + charOffset, y + iconOffset);
}
else if (row.annotations[column - 1] == null
- || (!row.annotations[column].displayCharacter
+ || (labelAllCols||!row.annotations[column].displayCharacter
.equals(row.annotations[column - 1].displayCharacter) || (row.annotations[column].displayCharacter
.length() < 2 && row.annotations[column].secondaryStructure == ' ')))
{
g.drawString(row.annotations[column].displayCharacter, x
* av.charWidth + charOffset, y + iconOffset);
}
+ g.setFont(ofont);
}
if (row.hasIcons)