From 8181358395df043e2554381f84229cc0e0323011 Mon Sep 17 00:00:00 2001 From: gmungoc Date: Fri, 31 Mar 2017 09:42:57 +0100 Subject: [PATCH] JAL-2435 slightly more sensible behaviour changing fonts in split frame --- src/jalview/api/AlignViewportI.java | 14 +++ src/jalview/api/ViewStyleI.java | 14 +++ src/jalview/gui/FontChooser.java | 120 ++++++++++++++++---------- src/jalview/gui/SplitFrame.java | 11 +-- src/jalview/jbgui/GFontChooser.java | 79 ++++++----------- src/jalview/viewmodel/AlignmentViewport.java | 34 +++++--- src/jalview/viewmodel/styles/ViewStyle.java | 20 +++++ 7 files changed, 177 insertions(+), 115 deletions(-) diff --git a/src/jalview/api/AlignViewportI.java b/src/jalview/api/AlignViewportI.java index 0239762..9e6d1c0 100644 --- a/src/jalview/api/AlignViewportI.java +++ b/src/jalview/api/AlignViewportI.java @@ -480,4 +480,18 @@ public interface AlignViewportI extends ViewStyleI * when true, charWidth/height is set according to font metrics */ void setFont(Font newFont, boolean b); + + /** + * Answers true if split screen protein and cDNA use the same font + * + * @return + */ + boolean isProteinFontAsCdna(); + + /** + * Set the flag for whether split screen protein and cDNA use the same font + * + * @return + */ + void setProteinFontAsCdna(boolean b); } diff --git a/src/jalview/api/ViewStyleI.java b/src/jalview/api/ViewStyleI.java index db82dcf..2b554ea 100644 --- a/src/jalview/api/ViewStyleI.java +++ b/src/jalview/api/ViewStyleI.java @@ -257,4 +257,18 @@ public interface ViewStyleI * @return */ void setScaleProteinAsCdna(boolean b); + + /** + * Answers true if split screen protein and cDNA use the same font + * + * @return + */ + boolean isProteinFontAsCdna(); + + /** + * Set the flag for whether split screen protein and cDNA use the same font + * + * @return + */ + void setProteinFontAsCdna(boolean b); } diff --git a/src/jalview/gui/FontChooser.java b/src/jalview/gui/FontChooser.java index b03d7a5..fdf3d2a 100755 --- a/src/jalview/gui/FontChooser.java +++ b/src/jalview/gui/FontChooser.java @@ -26,7 +26,6 @@ import jalview.util.MessageManager; import java.awt.Font; import java.awt.FontMetrics; -import java.awt.event.ActionEvent; import java.awt.geom.Rectangle2D; import javax.swing.JInternalFrame; @@ -49,8 +48,16 @@ public class FontChooser extends GFontChooser */ Font oldFont; + /* + * the state of 'scale protein as cDNA' on opening the dialog + */ boolean oldProteinScale; + /* + * the state of 'same font for protein and cDNA' on opening the dialog + */ + boolean oldMirrorFont; + boolean init = true; JInternalFrame frame; @@ -63,33 +70,32 @@ public class FontChooser extends GFontChooser private boolean lastSelMono = false; /** - * Creates a new FontChooser object. + * Creates a new FontChooser for a tree panel * - * @param ap - * DOCUMENT ME! + * @param treePanel */ - public FontChooser(TreePanel tp) + public FontChooser(TreePanel treePanel) { - this.tp = tp; - ap = tp.treeCanvas.ap; - oldFont = tp.getTreeFont(); + this.tp = treePanel; + ap = treePanel.treeCanvas.ap; + oldFont = treePanel.getTreeFont(); defaultButton.setVisible(false); smoothFont.setEnabled(false); init(); } /** - * Creates a new FontChooser object. + * Creates a new FontChooser for an alignment panel * - * @param ap - * DOCUMENT ME! + * @param alignPanel */ - public FontChooser(AlignmentPanel ap) + public FontChooser(AlignmentPanel alignPanel) { - oldFont = ap.av.getFont(); - oldProteinScale = ap.av.isScaleProteinAsCdna(); + oldFont = alignPanel.av.getFont(); + oldProteinScale = alignPanel.av.isScaleProteinAsCdna(); + oldMirrorFont = alignPanel.av.isProteinFontAsCdna(); - this.ap = ap; + this.ap = alignPanel; init(); } @@ -111,7 +117,7 @@ public class FontChooser extends GFontChooser scaleAsCdna.setVisible(true); scaleAsCdna.setSelected(ap.av.isScaleProteinAsCdna()); fontAsCdna.setVisible(true); - fontAsCdna.setSelected(true); + fontAsCdna.setSelected(ap.av.isProteinFontAsCdna()); } if (tp != null) @@ -159,7 +165,7 @@ public class FontChooser extends GFontChooser } @Override - public void smoothFont_actionPerformed(ActionEvent e) + protected void smoothFont_actionPerformed() { ap.av.antiAlias = smoothFont.isSelected(); ap.getAnnotationPanel().image = null; @@ -173,7 +179,7 @@ public class FontChooser extends GFontChooser * DOCUMENT ME! */ @Override - protected void ok_actionPerformed(ActionEvent e) + protected void ok_actionPerformed() { try { @@ -198,16 +204,19 @@ public class FontChooser extends GFontChooser * DOCUMENT ME! */ @Override - protected void cancel_actionPerformed(ActionEvent e) + protected void cancel_actionPerformed() { if (ap != null) { ap.av.setFont(oldFont, true); ap.av.setScaleProteinAsCdna(oldProteinScale); + ap.av.setProteinFontAsCdna(oldMirrorFont); ap.paintAlignment(true); + if (scaleAsCdna.isVisible() && scaleAsCdna.isEnabled()) { ap.av.getCodingComplement().setScaleProteinAsCdna(oldProteinScale); + ap.av.getCodingComplement().setProteinFontAsCdna(oldMirrorFont); ap.av.getCodingComplement().setFont(oldFont, true); } } @@ -215,9 +224,6 @@ public class FontChooser extends GFontChooser { tp.setTreeFont(oldFont); } - fontName.setSelectedItem(oldFont.getName()); - fontSize.setSelectedItem(oldFont.getSize()); - fontStyle.setSelectedIndex(oldFont.getStyle()); try { @@ -290,14 +296,27 @@ public class FontChooser extends GFontChooser ap.fontChanged(); /* - * and change font in other half of split frame if any + * adjust other half of split frame if any, if either same + * font, or proportionate scaling, is selected */ - if (fontAsCdna.isEnabled() && fontAsCdna.isSelected()) + if (fontAsCdna.isEnabled()) { - ap.av.getCodingComplement().setFont(newFont, true); - SplitFrame splitFrame = (SplitFrame) ap.alignFrame - .getSplitViewContainer(); - splitFrame.repaint(); + 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(); + } } } @@ -311,13 +330,10 @@ public class FontChooser extends GFontChooser } /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! + * Updates on change of selected font name */ @Override - protected void fontName_actionPerformed(ActionEvent e) + protected void fontName_actionPerformed() { if (init) { @@ -328,13 +344,10 @@ public class FontChooser extends GFontChooser } /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! + * Updates on change of selected font size */ @Override - protected void fontSize_actionPerformed(ActionEvent e) + protected void fontSize_actionPerformed() { if (init) { @@ -345,13 +358,10 @@ public class FontChooser extends GFontChooser } /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! + * Updates on change of selected font style */ @Override - protected void fontStyle_actionPerformed(ActionEvent e) + protected void fontStyle_actionPerformed() { if (init) { @@ -364,11 +374,9 @@ public class FontChooser extends GFontChooser /** * Make selected settings the defaults by storing them (via Cache class) in * the .jalview_properties file (the file is only written when Jalview exits) - * - * @param e */ @Override - public void defaultButton_actionPerformed(ActionEvent e) + public void defaultButton_actionPerformed() { Cache.setProperty("FONT_NAME", fontName.getSelectedItem().toString()); Cache.setProperty("FONT_STYLE", fontStyle.getSelectedIndex() + ""); @@ -384,7 +392,7 @@ public class FontChooser extends GFontChooser * characters */ @Override - protected void scaleAsCdna_actionPerformed(ActionEvent e) + protected void scaleAsCdna_actionPerformed() { ap.av.setScaleProteinAsCdna(scaleAsCdna.isSelected()); ap.av.getCodingComplement().setScaleProteinAsCdna( @@ -394,4 +402,22 @@ public class FontChooser extends GFontChooser splitFrame.adjustLayout(); splitFrame.repaint(); } + + /** + * 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. + */ + @Override + protected void mirrorFonts_actionPerformed() + { + boolean selected = fontAsCdna.isSelected(); + ap.av.setProteinFontAsCdna(selected); + ap.av.getCodingComplement().setProteinFontAsCdna(selected); + + if (selected) + { + changeFont(); + } + } } diff --git a/src/jalview/gui/SplitFrame.java b/src/jalview/gui/SplitFrame.java index 6c849c3..3174259 100644 --- a/src/jalview/gui/SplitFrame.java +++ b/src/jalview/gui/SplitFrame.java @@ -21,7 +21,6 @@ package jalview.gui; import jalview.api.SplitContainerI; -import jalview.api.ViewStyleI; import jalview.datamodel.AlignmentI; import jalview.jbgui.GAlignFrame; import jalview.jbgui.GSplitFrame; @@ -189,10 +188,12 @@ public class SplitFrame extends GSplitFrame implements SplitContainerI : (!bottomAlignment.isNucleotide() ? bottomViewport : null); if (protein != null && cdna != null) { - ViewStyleI vs = protein.getViewStyle(); - int scale = vs.isScaleProteinAsCdna() ? 3 : 1; - vs.setCharWidth(scale * cdna.getViewStyle().getCharWidth()); - protein.setViewStyle(vs); + // if (protein.isProteinFontAsCdna()) + // { + // TODO handle different fonts + int scale = protein.isScaleProteinAsCdna() ? 3 : 1; + protein.setCharWidth(scale * cdna.getViewStyle().getCharWidth()); + // } } } diff --git a/src/jalview/jbgui/GFontChooser.java b/src/jalview/jbgui/GFontChooser.java index 81a0d7d..5c15e80 100755 --- a/src/jalview/jbgui/GFontChooser.java +++ b/src/jalview/jbgui/GFontChooser.java @@ -103,7 +103,7 @@ public class GFontChooser extends JPanel @Override public void actionPerformed(ActionEvent e) { - fontSize_actionPerformed(e); + fontSize_actionPerformed(); } }); @@ -115,7 +115,7 @@ public class GFontChooser extends JPanel @Override public void actionPerformed(ActionEvent e) { - fontStyle_actionPerformed(e); + fontStyle_actionPerformed(); } }); @@ -139,7 +139,7 @@ public class GFontChooser extends JPanel @Override public void actionPerformed(ActionEvent e) { - fontName_actionPerformed(e); + fontName_actionPerformed(); } }); @@ -150,7 +150,7 @@ public class GFontChooser extends JPanel @Override public void actionPerformed(ActionEvent e) { - ok_actionPerformed(e); + ok_actionPerformed(); } }); @@ -161,7 +161,7 @@ public class GFontChooser extends JPanel @Override public void actionPerformed(ActionEvent e) { - cancel_actionPerformed(e); + cancel_actionPerformed(); } }); @@ -172,7 +172,7 @@ public class GFontChooser extends JPanel @Override public void actionPerformed(ActionEvent e) { - defaultButton_actionPerformed(e); + defaultButton_actionPerformed(); } }); @@ -185,7 +185,7 @@ public class GFontChooser extends JPanel @Override public void actionPerformed(ActionEvent e) { - smoothFont_actionPerformed(e); + smoothFont_actionPerformed(); } }); @@ -202,7 +202,7 @@ public class GFontChooser extends JPanel @Override public void actionPerformed(ActionEvent e) { - scaleAsCdna_actionPerformed(e); + scaleAsCdna_actionPerformed(); } }); @@ -214,6 +214,14 @@ public class GFontChooser extends JPanel fontAsCdna.setOpaque(false); fontAsCdna.setText(MessageManager.getString("label.font_as_cdna")); fontAsCdna.setBounds(new Rectangle(1, 105, 350, 23)); + fontAsCdna.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + mirrorFonts_actionPerformed(); + } + }); monospaced.setEnabled(false); monospaced.setFont(JvSwingUtils.getLabelFont()); @@ -272,72 +280,39 @@ public class GFontChooser extends JPanel this.add(jPanel1, null); } - protected void scaleAsCdna_actionPerformed(ActionEvent e) + protected void mirrorFonts_actionPerformed() { } - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - protected void ok_actionPerformed(ActionEvent e) + protected void scaleAsCdna_actionPerformed() { } - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - protected void cancel_actionPerformed(ActionEvent e) + protected void ok_actionPerformed() { } - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - protected void fontName_actionPerformed(ActionEvent e) + protected void cancel_actionPerformed() { } - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - protected void fontSize_actionPerformed(ActionEvent e) + protected void fontName_actionPerformed() { } - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - protected void fontStyle_actionPerformed(ActionEvent e) + protected void fontSize_actionPerformed() { } - /** - * DOCUMENT ME! - * - * @param e - * DOCUMENT ME! - */ - public void defaultButton_actionPerformed(ActionEvent e) + protected void fontStyle_actionPerformed() { } - public void smoothFont_actionPerformed(ActionEvent e) + public void defaultButton_actionPerformed() { + } + protected void smoothFont_actionPerformed() + { } } diff --git a/src/jalview/viewmodel/AlignmentViewport.java b/src/jalview/viewmodel/AlignmentViewport.java index 3547757..85df8bc 100644 --- a/src/jalview/viewmodel/AlignmentViewport.java +++ b/src/jalview/viewmodel/AlignmentViewport.java @@ -20,17 +20,6 @@ */ package jalview.viewmodel; -import java.awt.Color; -import java.beans.PropertyChangeSupport; -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.BitSet; -import java.util.Deque; -import java.util.HashMap; -import java.util.Hashtable; -import java.util.List; -import java.util.Map; - import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder; import jalview.analysis.Conservation; import jalview.api.AlignCalcManagerI; @@ -68,6 +57,17 @@ import jalview.workers.ComplementConsensusThread; import jalview.workers.ConsensusThread; import jalview.workers.StrucConsensusThread; +import java.awt.Color; +import java.beans.PropertyChangeSupport; +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.BitSet; +import java.util.Deque; +import java.util.HashMap; +import java.util.Hashtable; +import java.util.List; +import java.util.Map; + /** * base class holding visualization and analysis attributes and common logic for * an active alignment view displayed in the GUI @@ -2648,6 +2648,18 @@ public abstract class AlignmentViewport implements AlignViewportI, viewStyle.setScaleProteinAsCdna(b); } + @Override + public boolean isProteinFontAsCdna() + { + return viewStyle.isProteinFontAsCdna(); + } + + @Override + public void setProteinFontAsCdna(boolean b) + { + viewStyle.setProteinFontAsCdna(b); + } + /** * @return true if view should scroll to show the highlighted region of a * sequence diff --git a/src/jalview/viewmodel/styles/ViewStyle.java b/src/jalview/viewmodel/styles/ViewStyle.java index 14a1bde..f01047d 100644 --- a/src/jalview/viewmodel/styles/ViewStyle.java +++ b/src/jalview/viewmodel/styles/ViewStyle.java @@ -168,6 +168,12 @@ public class ViewStyle implements ViewStyleI */ private boolean scaleProteinAsCdna = true; + /* + * if true, font changes to protein or cDNA are applied to both + * sides of a split screen + */ + private boolean proteinFontAsCdna = true; + /** * Copy constructor * @@ -195,6 +201,7 @@ public class ViewStyle implements ViewStyleI setScaleAboveWrapped(vs.getScaleAboveWrapped()); setScaleLeftWrapped(vs.getScaleLeftWrapped()); setScaleProteinAsCdna(vs.isScaleProteinAsCdna()); + setProteinFontAsCdna(vs.isProteinFontAsCdna()); setScaleRightWrapped(vs.getScaleRightWrapped()); setSeqNameItalics(vs.isSeqNameItalics()); setShowAnnotation(vs.isShowAnnotation()); @@ -255,6 +262,7 @@ public class ViewStyle implements ViewStyleI && getScaleAboveWrapped() == vs.getScaleAboveWrapped() && getScaleLeftWrapped() == vs.getScaleLeftWrapped() && isScaleProteinAsCdna() == vs.isScaleProteinAsCdna() + && isProteinFontAsCdna() == vs.isProteinFontAsCdna() && getScaleRightWrapped() == vs.getScaleRightWrapped() && isSeqNameItalics() == vs.isSeqNameItalics() && isShowAnnotation() == vs.isShowAnnotation() @@ -1094,4 +1102,16 @@ public class ViewStyle implements ViewStyleI { this.scaleProteinAsCdna = b; } + + @Override + public boolean isProteinFontAsCdna() + { + return proteinFontAsCdna; + } + + @Override + public void setProteinFontAsCdna(boolean b) + { + proteinFontAsCdna = b; + } } -- 1.7.10.2