From 4772c2b206c62f3e26e66cca8396ba031ff48b3e Mon Sep 17 00:00:00 2001 From: gmungoc Date: Wed, 8 Mar 2017 16:25:55 +0000 Subject: [PATCH] JAL-2435 copy font changes across split screen --- resources/lang/Messages.properties | 1 + resources/lang/Messages_es.properties | 3 ++- src/jalview/api/AlignViewportI.java | 10 ++++++++++ src/jalview/appletgui/AlignViewport.java | 20 +++++++++++++------ src/jalview/appletgui/FontChooser.java | 31 ++++++++++++++++++++++++++---- src/jalview/appletgui/SeqPanel.java | 4 +++- src/jalview/gui/AlignViewport.java | 13 +++++-------- src/jalview/gui/FontChooser.java | 30 +++++++++++++++++++---------- src/jalview/jbgui/GFontChooser.java | 28 +++++++++++++++++++++++---- 9 files changed, 106 insertions(+), 34 deletions(-) diff --git a/resources/lang/Messages.properties b/resources/lang/Messages.properties index f720f39..f6ab2f5 100644 --- a/resources/lang/Messages.properties +++ b/resources/lang/Messages.properties @@ -1214,6 +1214,7 @@ label.configure_displayed_columns = Customise Displayed Options label.start_jalview = Start Jalview label.biojs_html_export = BioJS label.scale_as_cdna = Scale protein residues to codons +label.font_as_cdna = Use same font for cDNA and peptide label.scale_protein_to_cdna = Scale Protein to cDNA label.scale_protein_to_cdna_tip = Make protein residues same width as codons in split frame views info.select_annotation_row = Select Annotation Row diff --git a/resources/lang/Messages_es.properties b/resources/lang/Messages_es.properties index d408fee..82264d8 100644 --- a/resources/lang/Messages_es.properties +++ b/resources/lang/Messages_es.properties @@ -1145,6 +1145,7 @@ label.open_split_window=Abrir ventana dividida label.open_split_window?=¿Quieres abrir ventana dividida, con cDNA y proteína vinculadas? status.searching_for_pdb_structures=Buscando Estructuras PDB label.scale_as_cdna=Adaptar residuos proteicos a los codones +label.font_as_cdna=Utilizar la misma fuente para nucleotídos y proteicos action.export_hidden_sequences=Exportar Secuencias Ocultas action.export_hidden_columns=Exportar Columnas Ocultas label.found_structures_summary=Resumen de Estructuras Encontradas @@ -1164,6 +1165,7 @@ label.find=Buscar label.select_pdb_file=Seleccionar Fichero PDB label.structures_filter=Filtro de Estructuras label.scale_protein_to_cdna=Adaptar proteína a cDNA +label.scale_protein_to_cdna_tip=Hacer a los residuos de proteínas de la misma anchura que los codones en ventanas divididas status.loading_cached_pdb_entries=Cargando Entradas PDB en Caché label.select=Seleccionar : label.select_by_annotation=Seleccionar/Ocultar Columnas por Anotación @@ -1181,7 +1183,6 @@ info.change_threshold_mode_to_enable=Cambiar Modo de Umbral para Habilitar label.separate_multiple_query_values=Introducir uno o mas {0}s separados por punto y coma ";" label.let_chimera_manage_structure_colours=Deja que Chimera maneje colores de estructuras label.view_rna_structure=Estructura 2D VARNA -label.scale_protein_to_cdna_tip=Hacer a los residuos de proteínas de la misma anchura que los codones en ventanas divididas label.colour_with_chimera=Colorear con Chimera label.show_pdbstruct_dialog=Datos de Estructura 3D... label.hide_all=Ocultar todos diff --git a/src/jalview/api/AlignViewportI.java b/src/jalview/api/AlignViewportI.java index 2802684..2401593 100644 --- a/src/jalview/api/AlignViewportI.java +++ b/src/jalview/api/AlignViewportI.java @@ -35,6 +35,7 @@ import jalview.renderer.ResidueShaderI; import jalview.schemes.ColourSchemeI; import java.awt.Color; +import java.awt.Font; import java.util.Hashtable; import java.util.List; import java.util.Map; @@ -456,4 +457,13 @@ public interface AlignViewportI extends ViewStyleI * @return search results or null */ SearchResultsI getSearchResults(); + + /** + * Updates view settings with the given font. You may need to call + * AlignmentPanel.fontChanged to update the layout geometry. + * + * @param setGrid + * when true, charWidth/height is set according to font metrics + */ + void setFont(Font newFont, boolean b); } diff --git a/src/jalview/appletgui/AlignViewport.java b/src/jalview/appletgui/AlignViewport.java index fc087c6..b7dc5c4 100644 --- a/src/jalview/appletgui/AlignViewport.java +++ b/src/jalview/appletgui/AlignViewport.java @@ -42,6 +42,7 @@ import jalview.structure.VamsasSource; import jalview.viewmodel.AlignmentViewport; import java.awt.Font; +import java.awt.FontMetrics; public class AlignViewport extends AlignmentViewport implements SelectionSource, VamsasSource, CommandListener @@ -131,7 +132,7 @@ public class AlignViewport extends AlignmentViewport implements } } } - setFont(font); + setFont(font, true); MAC = new jalview.util.Platform().isAMac(); @@ -271,7 +272,11 @@ public class AlignViewport extends AlignmentViewport implements private float heightScale = 1, widthScale = 1; - public void setFont(Font f) + /** + * {@inheritDoc} + */ + @Override + public void setFont(Font f, boolean setGrid) { font = f; if (nullFrame == null) @@ -280,14 +285,17 @@ public class AlignViewport extends AlignmentViewport implements nullFrame.addNotify(); } - java.awt.FontMetrics fm = nullFrame.getGraphics().getFontMetrics(font); - setCharHeight((int) (heightScale * fm.getHeight())); - setCharWidth((int) (widthScale * fm.charWidth('M'))); + if (setGrid) + { + FontMetrics fm = nullFrame.getGraphics().getFontMetrics(font); + setCharHeight((int) (heightScale * fm.getHeight())); + setCharWidth((int) (widthScale * fm.charWidth('M'))); + } if (isUpperCasebold()) { Font f2 = new Font(f.getName(), Font.BOLD, f.getSize()); - fm = nullFrame.getGraphics().getFontMetrics(f2); + FontMetrics fm = nullFrame.getGraphics().getFontMetrics(f2); setCharWidth((int) (widthScale * (fm.stringWidth("MMMMMMMMMMM") / 10))); } } diff --git a/src/jalview/appletgui/FontChooser.java b/src/jalview/appletgui/FontChooser.java index 59f6957..727aa88 100644 --- a/src/jalview/appletgui/FontChooser.java +++ b/src/jalview/appletgui/FontChooser.java @@ -59,6 +59,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(); @@ -83,6 +85,8 @@ public class FontChooser extends Panel implements ItemListener private Frame frame; + boolean inSplitFrame = false; + /** * Constructor for a TreePanel font chooser * @@ -152,7 +156,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 +164,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(); @@ -208,10 +213,11 @@ public class FontChooser extends Panel implements ItemListener if (ap.av.getCodingComplement() != null) { ap.av.getCodingComplement().setScaleProteinAsCdna(oldScaleProtein); + ap.av.getCodingComplement().setFont(oldFont, true); ap.alignFrame.getSplitFrame().repaint(); } - ap.av.setFont(oldFont); + ap.av.setFont(oldFont, true); ViewStyleI style = ap.av.getViewStyle(); if (style.getCharWidth() != oldCharWidth) { @@ -276,8 +282,19 @@ 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 && fontAsCdna.getState()) + { + ap.av.getCodingComplement().setFont(newFont, true); + SplitFrame splitFrame = ap.alignFrame.getSplitFrame(); + splitFrame.adjustLayout(); + splitFrame.repaint(); + } } // remember last selected lastSelected = newFont; @@ -344,6 +361,10 @@ 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.setState(true); + ok.setFont(VERDANA_11PT); ok.setLabel(MessageManager.getString("action.ok")); ok.addActionListener(new ActionListener() @@ -388,7 +409,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 +424,7 @@ public class FontChooser extends Panel implements ItemListener this.add(optionsPanel, BorderLayout.NORTH); if (ap.alignFrame.getSplitFrame() != null) { + inSplitFrame = true; this.add(scalePanel, BorderLayout.CENTER); } this.add(okCancelPanel, BorderLayout.SOUTH); diff --git a/src/jalview/appletgui/SeqPanel.java b/src/jalview/appletgui/SeqPanel.java index 1352fe9..bfec643 100644 --- a/src/jalview/appletgui/SeqPanel.java +++ b/src/jalview/appletgui/SeqPanel.java @@ -955,7 +955,9 @@ public class SeqPanel extends Panel implements MouseMotionListener, fontSize = 1; } - av.setFont(new Font(av.font.getName(), av.font.getStyle(), fontSize)); + av.setFont( + new Font(av.font.getName(), av.font.getStyle(), fontSize), + true); av.setCharWidth(oldWidth); } else diff --git a/src/jalview/gui/AlignViewport.java b/src/jalview/gui/AlignViewport.java index e0efa7c..c1792c8 100644 --- a/src/jalview/gui/AlignViewport.java +++ b/src/jalview/gui/AlignViewport.java @@ -57,6 +57,7 @@ import jalview.ws.params.AutoCalcSetting; import java.awt.Container; import java.awt.Dimension; import java.awt.Font; +import java.awt.FontMetrics; import java.awt.Rectangle; import java.util.ArrayList; import java.util.Hashtable; @@ -351,23 +352,19 @@ public class AlignViewport extends AlignmentViewport implements boolean validCharWidth; /** - * update view settings with the given font. You may need to call - * alignPanel.fontChanged to update the layout geometry - * - * @param setGrid - * when true, charWidth/height is set according to font mentrics + * {@inheritDoc} */ + @Override public void setFont(Font f, boolean setGrid) { font = f; Container c = new Container(); - java.awt.FontMetrics fm = c.getFontMetrics(font); - int w = viewStyle.getCharWidth(), ww = fm.charWidth('M'), h = viewStyle - .getCharHeight(); if (setGrid) { + FontMetrics fm = c.getFontMetrics(font); + int ww = fm.charWidth('M'); setCharHeight(fm.getHeight()); setCharWidth(ww); } diff --git a/src/jalview/gui/FontChooser.java b/src/jalview/gui/FontChooser.java index 8220aea..b03d7a5 100755 --- a/src/jalview/gui/FontChooser.java +++ b/src/jalview/gui/FontChooser.java @@ -31,7 +31,6 @@ import java.awt.geom.Rectangle2D; import javax.swing.JInternalFrame; import javax.swing.JLayeredPane; -import javax.swing.JOptionPane; /** * DOCUMENT ME! @@ -103,14 +102,16 @@ public class FontChooser extends GFontChooser /* * Enable 'scale protein as cDNA' in a SplitFrame view. The selection is - * stored in the ViewStyle of both dna and protein Viewport + * stored in the ViewStyle of both dna and protein Viewport. Also enable + * checkbox for copy font changes to other half of split frame. */ - scaleAsCdna.setEnabled(false); - if (ap.av.getCodingComplement() != null) + boolean inSplitFrame = ap.av.getCodingComplement() != null; + if (inSplitFrame) { - scaleAsCdna.setEnabled(true); scaleAsCdna.setVisible(true); scaleAsCdna.setSelected(ap.av.isScaleProteinAsCdna()); + fontAsCdna.setVisible(true); + fontAsCdna.setSelected(true); } if (tp != null) @@ -122,7 +123,7 @@ public class FontChooser extends GFontChooser else { Desktop.addInternalFrame(frame, - MessageManager.getString("action.change_font"), 380, 200, + MessageManager.getString("action.change_font"), 380, 220, false); } @@ -204,10 +205,10 @@ public class FontChooser extends GFontChooser ap.av.setFont(oldFont, true); ap.av.setScaleProteinAsCdna(oldProteinScale); ap.paintAlignment(true); - if (scaleAsCdna.isEnabled()) + if (scaleAsCdna.isVisible() && scaleAsCdna.isEnabled()) { - ap.av.setScaleProteinAsCdna(oldProteinScale); ap.av.getCodingComplement().setScaleProteinAsCdna(oldProteinScale); + ap.av.getCodingComplement().setFont(oldFont, true); } } else if (tp != null) @@ -287,6 +288,17 @@ public class FontChooser extends GFontChooser { ap.av.setFont(newFont, true); ap.fontChanged(); + + /* + * and change font in other half of split frame if any + */ + if (fontAsCdna.isEnabled() && fontAsCdna.isSelected()) + { + ap.av.getCodingComplement().setFont(newFont, true); + SplitFrame splitFrame = (SplitFrame) ap.alignFrame + .getSplitViewContainer(); + splitFrame.repaint(); + } } monospaced.setSelected(mw == iw); @@ -381,7 +393,5 @@ public class FontChooser extends GFontChooser .getSplitViewContainer(); splitFrame.adjustLayout(); splitFrame.repaint(); - // ap.paintAlignment(true); - // TODO would like to repaint } } diff --git a/src/jalview/jbgui/GFontChooser.java b/src/jalview/jbgui/GFontChooser.java index 8c893a2..81a0d7d 100755 --- a/src/jalview/jbgui/GFontChooser.java +++ b/src/jalview/jbgui/GFontChooser.java @@ -63,6 +63,8 @@ public class GFontChooser extends JPanel protected JCheckBox scaleAsCdna = new JCheckBox(); + protected JCheckBox fontAsCdna = new JCheckBox(); + /** * Creates a new GFontChooser object. */ @@ -98,6 +100,7 @@ public class GFontChooser extends JPanel fontSize.setPreferredSize(new Dimension(50, 21)); fontSize.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(ActionEvent e) { fontSize_actionPerformed(e); @@ -109,6 +112,7 @@ public class GFontChooser extends JPanel fontStyle.setPreferredSize(new Dimension(90, 21)); fontStyle.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(ActionEvent e) { fontStyle_actionPerformed(e); @@ -132,6 +136,7 @@ public class GFontChooser extends JPanel fontName.setPreferredSize(new Dimension(180, 21)); fontName.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(ActionEvent e) { fontName_actionPerformed(e); @@ -142,6 +147,7 @@ public class GFontChooser extends JPanel ok.setFont(VERDANA_11PT); ok.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(ActionEvent e) { ok_actionPerformed(e); @@ -152,6 +158,7 @@ public class GFontChooser extends JPanel cancel.setFont(VERDANA_11PT); cancel.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(ActionEvent e) { cancel_actionPerformed(e); @@ -162,6 +169,7 @@ public class GFontChooser extends JPanel defaultButton.setText(MessageManager.getString("label.set_as_default")); defaultButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { defaultButton_actionPerformed(e); @@ -171,9 +179,10 @@ public class GFontChooser extends JPanel smoothFont.setFont(JvSwingUtils.getLabelFont()); smoothFont.setOpaque(false); smoothFont.setText(MessageManager.getString("label.anti_alias_fonts")); - smoothFont.setBounds(new Rectangle(41, 65, 260, 23)); + smoothFont.setBounds(new Rectangle(1, 65, 300, 23)); smoothFont.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { smoothFont_actionPerformed(e); @@ -181,21 +190,31 @@ public class GFontChooser extends JPanel }); /* - * Scale protein as cDNA is only visible in SplitFrame protein alignment + * Scale protein as cDNA is only visible in SplitFrame */ scaleAsCdna.setVisible(false); scaleAsCdna.setFont(JvSwingUtils.getLabelFont()); scaleAsCdna.setOpaque(false); scaleAsCdna.setText(MessageManager.getString("label.scale_as_cdna")); - scaleAsCdna.setBounds(new Rectangle(41, 85, 260, 23)); + scaleAsCdna.setBounds(new Rectangle(1, 85, 300, 23)); scaleAsCdna.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { scaleAsCdna_actionPerformed(e); } }); + /* + * Same font for cDNA/peptide is only visible in SplitFrame + */ + fontAsCdna.setVisible(false); + fontAsCdna.setFont(JvSwingUtils.getLabelFont()); + fontAsCdna.setOpaque(false); + fontAsCdna.setText(MessageManager.getString("label.font_as_cdna")); + fontAsCdna.setBounds(new Rectangle(1, 105, 350, 23)); + monospaced.setEnabled(false); monospaced.setFont(JvSwingUtils.getLabelFont()); monospaced.setOpaque(false); @@ -239,13 +258,14 @@ public class GFontChooser extends JPanel */ JPanel jPanel4 = new JPanel(); jPanel4.setOpaque(false); - jPanel4.setBounds(new Rectangle(24, 112, 300, 35)); + jPanel4.setBounds(new Rectangle(24, 132, 300, 35)); jPanel4.add(defaultButton); jPanel4.add(ok); jPanel4.add(cancel); this.add(smoothFont); this.add(scaleAsCdna); + this.add(fontAsCdna); this.add(jPanel3, null); this.add(jPanel2, null); this.add(jPanel4); -- 1.7.10.2