X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FFontChooser.java;h=443ebceafffe130b69023898846b5f54fec24c8c;hb=106a3890f956e2aa7780b2985f4326655912a558;hp=6456878256f4c0dbbaab6c72d3274a8666676bfb;hpb=e0c4027fce496e56101696f10559eb3ea94c7e7e;p=jalview.git diff --git a/src/jalview/appletgui/FontChooser.java b/src/jalview/appletgui/FontChooser.java index 6456878..443ebce 100644 --- a/src/jalview/appletgui/FontChooser.java +++ b/src/jalview/appletgui/FontChooser.java @@ -20,6 +20,8 @@ */ package jalview.appletgui; +import jalview.util.MessageManager; + import java.awt.BorderLayout; import java.awt.Button; import java.awt.Checkbox; @@ -37,9 +39,6 @@ import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; -import jalview.api.ViewStyleI; -import jalview.util.MessageManager; - /** * This dialog allows the user to try different font settings and related * options. Changes are immediately visible on the alignment or tree. The user @@ -59,6 +58,8 @@ public class FontChooser extends Panel implements ItemListener private Checkbox scaleAsCdna = new Checkbox(); + private Checkbox fontAsCdna = new Checkbox(); + private Button ok = new Button(); private Button cancel = new Button(); @@ -69,10 +70,20 @@ public class FontChooser extends Panel implements ItemListener private Font oldFont; + private Font oldComplementFont; + private int oldCharWidth = 0; + /* + * the state of 'scale protein to cDNA' on opening the dialog + */ private boolean oldScaleProtein = false; + /* + * the state of 'same font for protein and cDNA' on opening the dialog + */ + boolean oldMirrorFont; + private Font lastSelected = null; private int lastSelStyle = 0; @@ -83,6 +94,8 @@ public class FontChooser extends Panel implements ItemListener private Frame frame; + boolean inSplitFrame = false; + /** * Constructor for a TreePanel font chooser * @@ -112,8 +125,9 @@ public class FontChooser extends Panel implements ItemListener { this.ap = ap; oldFont = ap.av.getFont(); - oldCharWidth = ap.av.getViewStyle().getCharWidth(); - oldScaleProtein = ap.av.getViewStyle().isScaleProteinAsCdna(); + oldCharWidth = ap.av.getCharWidth(); + oldScaleProtein = ap.av.isScaleProteinAsCdna(); + oldMirrorFont = ap.av.isProteinFontAsCdna(); try { @@ -152,7 +166,7 @@ public class FontChooser extends Panel implements ItemListener this.frame = new Frame(); frame.add(this); jalview.bin.JalviewLite.addFrame(frame, - MessageManager.getString("action.change_font"), 440, 115); + MessageManager.getString("action.change_font"), 440, 145); init = false; } @@ -160,6 +174,7 @@ public class FontChooser extends Panel implements ItemListener /** * Actions on change of font name, size or style. */ + @Override public void itemStateChanged(ItemEvent evt) { final Object source = evt.getSource(); @@ -179,6 +194,29 @@ public class FontChooser extends Panel implements ItemListener { scaleAsCdna_actionPerformed(); } + else if (source == fontAsCdna) + { + mirrorFont_actionPerformed(); + } + } + + /** + * Action on checking or unchecking 'use same font across split screen' + * option. When checked, the font settings are copied to the other half of the + * split screen. When unchecked, the other half is restored to its initial + * settings. + */ + protected void mirrorFont_actionPerformed() + { + boolean selected = fontAsCdna.getState(); + ap.av.setProteinFontAsCdna(selected); + ap.av.getCodingComplement().setProteinFontAsCdna(selected); + + if (!selected) + { + ap.av.getCodingComplement().setFont(oldComplementFont, true); + } + changeFont(); } /** @@ -205,20 +243,25 @@ public class FontChooser extends Panel implements ItemListener if (ap != null) { ap.av.setScaleProteinAsCdna(oldScaleProtein); + ap.av.setProteinFontAsCdna(oldMirrorFont); + if (ap.av.getCodingComplement() != null) { ap.av.getCodingComplement().setScaleProteinAsCdna(oldScaleProtein); - ap.alignFrame.getSplitFrame().repaint(); + ap.av.getCodingComplement().setProteinFontAsCdna(oldMirrorFont); + ap.av.getCodingComplement().setFont(oldComplementFont, true); + SplitFrame splitFrame = ap.alignFrame.getSplitFrame(); + splitFrame.adjustLayout(); + splitFrame.getComplement(ap.alignFrame).alignPanel.fontChanged(); + splitFrame.repaint(); } - ap.av.setFont(oldFont); - ViewStyleI style = ap.av.getViewStyle(); - if (style.getCharWidth() != oldCharWidth) + ap.av.setFont(oldFont, true); + if (ap.av.getCharWidth() != oldCharWidth) { - style.setCharWidth(oldCharWidth); - ap.av.setViewStyle(style); + ap.av.setCharWidth(oldCharWidth); } - ap.paintAlignment(true); + ap.paintAlignment(true, false); } else if (tp != null) { @@ -247,11 +290,11 @@ public class FontChooser extends Panel implements ItemListener } Font newFont = new Font(fontName.getSelectedItem().toString(), - fontStyle.getSelectedIndex(), Integer.parseInt(fontSize - .getSelectedItem().toString())); + fontStyle.getSelectedIndex(), + Integer.parseInt(fontSize.getSelectedItem().toString())); FontMetrics fm = getGraphics().getFontMetrics(newFont); - double mw = fm.getStringBounds("M", getGraphics()).getWidth(), iw = fm - .getStringBounds("I", getGraphics()).getWidth(); + double mw = fm.getStringBounds("M", getGraphics()).getWidth(), + iw = fm.getStringBounds("I", getGraphics()).getWidth(); if (mw < 1 || iw < 1) { // TODO: JAL-1100 @@ -276,8 +319,23 @@ public class FontChooser extends Panel implements ItemListener } else if (ap != null) { - ap.av.setFont(newFont); + ap.av.setFont(newFont, true); ap.fontChanged(); + + /* + * and change font in other half of split frame if any + */ + if (inSplitFrame) + { + if (fontAsCdna.getState()) + { + ap.av.getCodingComplement().setFont(newFont, true); + } + SplitFrame splitFrame = ap.alignFrame.getSplitFrame(); + splitFrame.adjustLayout(); + splitFrame.getComplement(ap.alignFrame).alignPanel.fontChanged(); + splitFrame.repaint(); + } } // remember last selected lastSelected = newFont; @@ -344,6 +402,11 @@ public class FontChooser extends Panel implements ItemListener scaleAsCdna.addItemListener(this); scaleAsCdna.setState(ap.av.isScaleProteinAsCdna()); + fontAsCdna.setLabel(MessageManager.getString("label.font_as_cdna")); + fontAsCdna.setFont(VERDANA_11PT); + fontAsCdna.addItemListener(this); + fontAsCdna.setState(ap.av.isProteinFontAsCdna()); + ok.setFont(VERDANA_11PT); ok.setLabel(MessageManager.getString("action.ok")); ok.addActionListener(new ActionListener() @@ -388,7 +451,8 @@ public class FontChooser extends Panel implements ItemListener stylePanel.add(fontStyle, BorderLayout.CENTER); sizePanel.add(sizeLabel, BorderLayout.WEST); sizePanel.add(fontSize, BorderLayout.CENTER); - scalePanel.add(scaleAsCdna, BorderLayout.CENTER); + scalePanel.add(scaleAsCdna, BorderLayout.NORTH); + scalePanel.add(fontAsCdna, BorderLayout.SOUTH); okCancelPanel.add(ok, null); okCancelPanel.add(cancel, null); @@ -402,6 +466,9 @@ public class FontChooser extends Panel implements ItemListener this.add(optionsPanel, BorderLayout.NORTH); if (ap.alignFrame.getSplitFrame() != null) { + inSplitFrame = true; + oldComplementFont = ((AlignViewport) ap.av.getCodingComplement()) + .getFont(); this.add(scalePanel, BorderLayout.CENTER); } this.add(okCancelPanel, BorderLayout.SOUTH); @@ -414,11 +481,9 @@ public class FontChooser extends Panel implements ItemListener protected void scaleAsCdna_actionPerformed() { ap.av.setScaleProteinAsCdna(scaleAsCdna.getState()); - ap.av.getCodingComplement().setScaleProteinAsCdna( - scaleAsCdna.getState()); - ap.alignFrame.getSplitFrame().adjustLayout(); - ap.paintAlignment(true); - ap.alignFrame.getSplitFrame().repaint(); + ap.av.getCodingComplement() + .setScaleProteinAsCdna(scaleAsCdna.getState()); + changeFont(); } }