Font oldFont;
/*
+ * The font on opening the dialog (to be restored on Cancel)
+ * on the other half of a split frame (if applicable)
+ */
+ Font oldComplementFont;
+
+ /*
* the state of 'scale protein as cDNA' on opening the dialog
*/
boolean oldProteinScale;
private boolean lastSelMono = false;
+ private boolean oldSmoothFont;
+
+ private boolean oldComplementSmooth;
+
/**
* Creates a new FontChooser for a tree panel
*
public FontChooser(TreePanel treePanel)
{
this.tp = treePanel;
- ap = treePanel.treeCanvas.ap;
+ ap = treePanel.getTreeCanvas().getAssociatedPanel();
oldFont = treePanel.getTreeFont();
defaultButton.setVisible(false);
smoothFont.setEnabled(false);
oldFont = alignPanel.av.getFont();
oldProteinScale = alignPanel.av.isScaleProteinAsCdna();
oldMirrorFont = alignPanel.av.isProteinFontAsCdna();
-
+ oldSmoothFont = alignPanel.av.antiAlias;
this.ap = alignPanel;
init();
}
boolean inSplitFrame = ap.av.getCodingComplement() != null;
if (inSplitFrame)
{
+ oldComplementFont = ((AlignViewport) ap.av.getCodingComplement())
+ .getFont();
+ oldComplementSmooth = ((AlignViewport) ap.av
+ .getCodingComplement()).antiAlias;
scaleAsCdna.setVisible(true);
scaleAsCdna.setSelected(ap.av.isScaleProteinAsCdna());
fontAsCdna.setVisible(true);
fontAsCdna.setSelected(ap.av.isProteinFontAsCdna());
}
- if (tp != null)
+ if (isTreeFont())
{
Desktop.addInternalFrame(frame,
MessageManager.getString("action.change_font_tree_panel"),
fontStyle.setSelectedIndex(oldFont.getStyle());
FontMetrics fm = getGraphics().getFontMetrics(oldFont);
- monospaced.setSelected(fm.getStringBounds("M", getGraphics())
- .getWidth() == fm.getStringBounds("|", getGraphics())
- .getWidth());
+ monospaced.setSelected(
+ fm.getStringBounds("M", getGraphics()).getWidth() == fm
+ .getStringBounds("|", getGraphics()).getWidth());
init = false;
}
{
ap.av.antiAlias = smoothFont.isSelected();
ap.getAnnotationPanel().image = null;
- ap.paintAlignment(true);
+ ap.paintAlignment(true, false);
+ if (ap.av.getCodingComplement() != null && ap.av.isProteinFontAsCdna())
+ {
+ ((AlignViewport) ap.av
+ .getCodingComplement()).antiAlias = ap.av.antiAlias;
+ SplitFrame sv = (SplitFrame) ap.alignFrame.getSplitViewContainer();
+ sv.adjustLayout();
+ sv.repaint();
+ }
+
}
/**
@Override
protected void cancel_actionPerformed()
{
- if (ap != null)
+ if (isTreeFont())
+ {
+ tp.setTreeFont(oldFont);
+ }
+ else if (ap != null)
{
ap.av.setFont(oldFont, true);
ap.av.setScaleProteinAsCdna(oldProteinScale);
ap.av.setProteinFontAsCdna(oldMirrorFont);
- ap.paintAlignment(true);
+ ap.av.antiAlias = oldSmoothFont;
+ ap.fontChanged();
if (scaleAsCdna.isVisible() && scaleAsCdna.isEnabled())
{
ap.av.getCodingComplement().setScaleProteinAsCdna(oldProteinScale);
ap.av.getCodingComplement().setProteinFontAsCdna(oldMirrorFont);
- ap.av.getCodingComplement().setFont(oldFont, true);
+ ((AlignViewport) ap.av
+ .getCodingComplement()).antiAlias = oldComplementSmooth;
+ ap.av.getCodingComplement().setFont(oldComplementFont, true);
+ SplitFrame splitFrame = (SplitFrame) ap.alignFrame
+ .getSplitViewContainer();
+ splitFrame.adjustLayout();
+ splitFrame.repaint();
}
}
- else if (tp != null)
- {
- tp.setTreeFont(oldFont);
- }
try
{
}
}
+ private boolean isTreeFont()
+ {
+ return tp != null;
+ }
+
/**
* DOCUMENT ME!
*/
double iw = iBounds.getWidth();
if (mw < 1 || iw < 1)
{
- String message = iBounds.getHeight() < 1 ? MessageManager
- .getString("label.font_doesnt_have_letters_defined")
+ String message = iBounds.getHeight() < 1
+ ? MessageManager
+ .getString("label.font_doesnt_have_letters_defined")
: MessageManager.getString("label.font_too_small");
JvOptionPane.showInternalMessageDialog(this, message,
MessageManager.getString("label.invalid_font"),
{
fontSize.setSelectedItem(lastSelected.getSize());
}
- if (!lastSelected.getName().equals(
- fontName.getSelectedItem().toString()))
+ if (!lastSelected.getName()
+ .equals(fontName.getSelectedItem().toString()))
{
fontName.setSelectedItem(lastSelected.getName());
}
}
return;
}
- if (tp != null)
+ if (isTreeFont())
{
tp.setTreeFont(newFont);
}
ap.fontChanged();
/*
- * adjust other half of split frame if any, if either same
- * font, or proportionate scaling, is selected
+ * adjust other half of split frame if present, whether or not same font or
+ * scale to cDNA is selected, because a font change may affect character
+ * width, and this is kept the same in both panels
*/
- if (fontAsCdna.isEnabled())
+ if (fontAsCdna.isVisible())
{
if (fontAsCdna.isSelected())
{
- /*
- * copy the font
- */
ap.av.getCodingComplement().setFont(newFont, true);
}
- if (fontAsCdna.isSelected() || scaleAsCdna.isSelected())
- {
- /*
- * adjust layout for font change and/or sizing
- */
- SplitFrame splitFrame = (SplitFrame) ap.alignFrame
- .getSplitViewContainer();
- splitFrame.repaint();
- }
+
+ SplitFrame splitFrame = (SplitFrame) ap.alignFrame
+ .getSplitViewContainer();
+ splitFrame.adjustLayout();
+ splitFrame.repaint();
}
}
protected void scaleAsCdna_actionPerformed()
{
ap.av.setScaleProteinAsCdna(scaleAsCdna.isSelected());
- ap.av.getCodingComplement().setScaleProteinAsCdna(
- scaleAsCdna.isSelected());
+ ap.av.getCodingComplement()
+ .setScaleProteinAsCdna(scaleAsCdna.isSelected());
final SplitFrame splitFrame = (SplitFrame) ap.alignFrame
.getSplitViewContainer();
splitFrame.adjustLayout();
/**
* Turn on/off mirroring of font across split frame. If turning on, also
- * copies the current font across the split frame. If turning off, does not
- * change fonts.
+ * copies the current font across the split frame. If turning off, restores
+ * the other half of the split frame to its initial font.
*/
@Override
protected void mirrorFonts_actionPerformed()
ap.av.setProteinFontAsCdna(selected);
ap.av.getCodingComplement().setProteinFontAsCdna(selected);
- if (selected)
+ /*
+ * reset other half of split frame if turning option off
+ */
+ if (!selected)
{
- changeFont();
+ ap.av.getCodingComplement().setFont(oldComplementFont, true);
}
+
+ changeFont();
}
}