From aaf78c2f304b237a9c800137126967ace9437c99 Mon Sep 17 00:00:00 2001 From: jprocter Date: Fri, 22 Jul 2011 15:56:24 +0100 Subject: [PATCH] default parameter for colours in annotation shading (JAL-234), ensure dialog is reset correctly (JAL-877), propagate colour changes to structure (JAL-868) --- src/jalview/appletgui/AnnotationColourChooser.java | 39 ++++++++-- src/jalview/bin/JalviewLite.java | 28 +++++++ src/jalview/gui/AnnotationColourChooser.java | 46 ++++++++--- src/jalview/gui/Preferences.java | 31 ++++++++ src/jalview/jbgui/GPreferences.java | 82 ++++++++++++++++++-- 5 files changed, 204 insertions(+), 22 deletions(-) diff --git a/src/jalview/appletgui/AnnotationColourChooser.java b/src/jalview/appletgui/AnnotationColourChooser.java index 41c20bd..25e08b0 100755 --- a/src/jalview/appletgui/AnnotationColourChooser.java +++ b/src/jalview/appletgui/AnnotationColourChooser.java @@ -82,16 +82,17 @@ public class AnnotationColourChooser extends Panel implements return; } + minColour.setBackground(av.applet.getDefaultColourParameter("ANNOTATIONCOLOUR_MIN",Color.orange)); + maxColour.setBackground(av.applet.getDefaultColourParameter("ANNOTATIONCOLOUR_MAX",Color.red)); + if (oldcs instanceof AnnotationColourGradient) { AnnotationColourGradient acg = (AnnotationColourGradient) oldcs; - minColour.setBackground(acg.getMinColour()); - maxColour.setBackground(acg.getMaxColour()); - } - else - { - minColour.setBackground(Color.orange); - maxColour.setBackground(Color.red); + currentColours.setState(acg.predefinedColours); + if (!acg.predefinedColours) { + minColour.setBackground(acg.getMinColour()); + maxColour.setBackground(acg.getMaxColour()); + } } adjusting = true; @@ -116,6 +117,27 @@ public class AnnotationColourChooser extends Panel implements threshold.addItem("Above Threshold"); threshold.addItem("Below Threshold"); + if (oldcs instanceof AnnotationColourGradient) + { + AnnotationColourGradient acg = (AnnotationColourGradient) oldcs; + annotations.select(acg.getAnnotation()); + switch (acg.getAboveThreshold()) { + case AnnotationColourGradient.NO_THRESHOLD: + threshold.select("No Threshold"); + break; + case AnnotationColourGradient.ABOVE_THRESHOLD: + threshold.select("Above Threshold"); + break; + case AnnotationColourGradient.BELOW_THRESHOLD: + threshold.select("Below Threshold"); + break; + default: + throw new Error("Implementation error: don't know about threshold setting for current AnnotationColourGradient."); + } + thresholdIsMin.setState(acg.thresholdIsMinMax); + thresholdValue.setText(""+acg.getAnnotationThreshold()); + } + adjusting = false; changeColour(); @@ -430,7 +452,8 @@ public class AnnotationColourChooser extends Panel implements } } - ap.paintAlignment(false); + // update colours in linked windows + ap.paintAlignment(true); } void reset() diff --git a/src/jalview/bin/JalviewLite.java b/src/jalview/bin/JalviewLite.java index f044411..9a4d9e2 100644 --- a/src/jalview/bin/JalviewLite.java +++ b/src/jalview/bin/JalviewLite.java @@ -2244,6 +2244,34 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv } /** + * return the given colour value parameter or the given default if parameter not given + * @param colparam + * @param defcolour + * @return + */ + public Color getDefaultColourParameter(String colparam, Color defcolour) + { + String colprop = getParameter(colparam); + if (colprop==null || colprop.trim().length()==0) + { + return defcolour; + } + Color col = jalview.schemes.ColourSchemeProperty.getAWTColorFromName(colprop); + if (col==null) + { + try { + col = new jalview.schemes.UserColourScheme(colprop).findColour('A'); + } catch (Exception ex) + { + System.err.println("Couldn't parse '"+colprop+"' as a colour for "+colparam); + col=null; + } + } + return (col==null) ? defcolour: col; + + } + + /** * bind structures in a viewer to any matching sequences in an alignFrame (use * sequenceIds to limit scope of search to specific sequences) * diff --git a/src/jalview/gui/AnnotationColourChooser.java b/src/jalview/gui/AnnotationColourChooser.java index a05ccf1..639140e 100755 --- a/src/jalview/gui/AnnotationColourChooser.java +++ b/src/jalview/gui/AnnotationColourChooser.java @@ -24,6 +24,7 @@ import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; +import jalview.bin.Cache; import jalview.datamodel.*; import jalview.schemes.*; import java.awt.Dimension; @@ -92,16 +93,21 @@ public class AnnotationColourChooser extends JPanel return; } + // Always get default shading from preferences. + minColour.setBackground(Cache.getDefaultColour("ANNOTATIONCOLOUR_MIN", Color.orange)); + maxColour.setBackground(Cache.getDefaultColour("ANNOTATIONCOLOUR_MAX", Color.red)); + if (oldcs instanceof AnnotationColourGradient) { AnnotationColourGradient acg = (AnnotationColourGradient) oldcs; - minColour.setBackground(acg.getMinColour()); - maxColour.setBackground(acg.getMaxColour()); - } - else - { - minColour.setBackground(Color.orange); - maxColour.setBackground(Color.red); + currentColours.setSelected(acg.predefinedColours); + if (acg.predefinedColours) + { + + } else { + minColour.setBackground(acg.getMinColour()); + maxColour.setBackground(acg.getMaxColour()); + } } adjusting = true; @@ -122,6 +128,27 @@ public class AnnotationColourChooser extends JPanel threshold.addItem("Above Threshold"); threshold.addItem("Below Threshold"); + if (oldcs instanceof AnnotationColourGradient) + { + AnnotationColourGradient acg = (AnnotationColourGradient) oldcs; + annotations.setSelectedItem(acg.getAnnotation()); + switch (acg.getAboveThreshold()) { + case AnnotationColourGradient.NO_THRESHOLD: + threshold.setSelectedItem("No Threshold"); + break; + case AnnotationColourGradient.ABOVE_THRESHOLD: + threshold.setSelectedItem("Above Threshold"); + break; + case AnnotationColourGradient.BELOW_THRESHOLD: + threshold.setSelectedItem("Below Threshold"); + break; + default: + throw new Error("Implementation error: don't know about threshold setting for current AnnotationColourGradient."); + } + thresholdIsMin.setSelected(acg.thresholdIsMinMax); + thresholdValue.setText(""+acg.getAnnotationThreshold()); + } + try { jbInit(); @@ -132,6 +159,7 @@ public class AnnotationColourChooser extends JPanel adjusting = false; changeColour(); + validate(); } @@ -424,8 +452,8 @@ public class AnnotationColourChooser extends JPanel } } - - ap.paintAlignment(false); + // ensure all associated views (overviews, structures, etc) are notified of updated colours. + ap.paintAlignment(true); } public void ok_actionPerformed(ActionEvent e) diff --git a/src/jalview/gui/Preferences.java b/src/jalview/gui/Preferences.java index 70f8f3e..b92f9da 100755 --- a/src/jalview/gui/Preferences.java +++ b/src/jalview/gui/Preferences.java @@ -147,6 +147,12 @@ public class Preferences extends GPreferences colour.setSelectedItem(string); + /** + * default min-max colours for annotation shading + */ + minColour.setBackground(Cache.getDefaultColour("ANNOTATIONCOLOUR_MIN", Color.orange)); + maxColour.setBackground(Cache.getDefaultColour("ANNOTATIONCOLOUR_MAX", Color.red)); + String[] fonts = java.awt.GraphicsEnvironment .getLocalGraphicsEnvironment().getAvailableFontFamilyNames(); @@ -329,6 +335,9 @@ public class Preferences extends GPreferences Cache.applicationProperties.setProperty("SORT_ALIGNMENT", sortby .getSelectedItem().toString()); + Cache.applicationProperties.setProperty("ANNOTATIONCOLOUR_MIN", minColour.getBackground().toString()); + Cache.applicationProperties.setProperty("ANNOTATIONCOLOUR_MAX", maxColour.getBackground().toString()); + if (epsRendering.getSelectedItem().equals("Prompt each time")) { Cache.applicationProperties.remove("EPS_RENDERING"); @@ -641,4 +650,26 @@ public class Preferences extends GPreferences { return groupURLLinks; } + public void minColour_actionPerformed() + { + Color col = JColorChooser.showDialog(this, + "Select Colour for Minimum Value", minColour.getBackground()); + if (col != null) + { + minColour.setBackground(col); + } + minColour.repaint(); + } + + public void maxColour_actionPerformed() + { + Color col = JColorChooser.showDialog(this, + "Select Colour for Maximum Value", maxColour.getBackground()); + if (col != null) + { + maxColour.setBackground(col); + } + maxColour.repaint(); + } + } diff --git a/src/jalview/jbgui/GPreferences.java b/src/jalview/jbgui/GPreferences.java index aaa73a1..42ffa5d 100755 --- a/src/jalview/jbgui/GPreferences.java +++ b/src/jalview/jbgui/GPreferences.java @@ -46,6 +46,7 @@ public class GPreferences extends JPanel protected JCheckBox quality = new JCheckBox(); JPanel visualTab = new JPanel(); + JPanel visual2Tab = new JPanel(); protected JCheckBox fullScreen = new JCheckBox(); @@ -55,6 +56,12 @@ public class GPreferences extends JPanel protected JCheckBox annotations = new JCheckBox(); + protected JPanel minColour = new JPanel(); + JLabel mincolourLabel = new JLabel(); + + protected JPanel maxColour = new JPanel(); + JLabel maxcolourLabel = new JLabel(); + JLabel gapLabel = new JLabel(); protected JComboBox colour = new JComboBox(); @@ -132,9 +139,12 @@ public class GPreferences extends JPanel JLabel sortLabel = new JLabel(); JPanel jPanel2 = new JPanel(); + JPanel visual2panel = new JPanel(); GridLayout gridLayout2 = new GridLayout(); + GridLayout gridLayout4 = new GridLayout(); + JPanel annsettingsPanel = new JPanel(); JPanel autoAnnotSettings1 = new JPanel(); @@ -229,6 +239,22 @@ public class GPreferences extends JPanel protected JCheckBox followHighlight = new JCheckBox(); + public void addtoLayout(JPanel panel, String tooltip, JComponent label, JComponent valBox) + { + JPanel laypanel = new JPanel(),labPanel=new JPanel(), valPanel=new JPanel(); + laypanel.setSize(panel.getWidth(),33); + labPanel.setBounds(new Rectangle(7, 7, 158, 23)); + valPanel.setBounds(new Rectangle(172, 7, 270,23)); + labPanel.setLayout(new GridLayout()); + valPanel.setLayout(new GridLayout()); + labPanel.add(label); + valPanel.add(valBox); + laypanel.add(labPanel); + laypanel.add(valPanel); + panel.add(laypanel); + valPanel.setToolTipText(tooltip); + labPanel.setToolTipText(tooltip); + } /** * Creates a new GPreferences object. */ @@ -276,6 +302,8 @@ public class GPreferences extends JPanel quality.setText("Quality"); visualTab.setBorder(new TitledBorder("Open new alignment")); visualTab.setLayout(null); + visual2Tab.setBorder(new TitledBorder("Open new alignment")); + visual2Tab.setLayout(new FlowLayout()); fullScreen.setFont(verdana11); fullScreen.setHorizontalAlignment(SwingConstants.RIGHT); fullScreen.setHorizontalTextPosition(SwingConstants.LEFT); @@ -395,7 +423,7 @@ public class GPreferences extends JPanel colour.setBounds(new Rectangle(172, 225, 155, 21)); colourLabel.setFont(verdana11); colourLabel.setHorizontalAlignment(SwingConstants.RIGHT); - colourLabel.setText("Colour "); + colourLabel.setText("Alignment Colour "); fontLabel.setFont(verdana11); fontLabel.setHorizontalAlignment(SwingConstants.RIGHT); fontLabel.setText("Font "); @@ -407,6 +435,32 @@ public class GPreferences extends JPanel fontNameCB.setBounds(new Rectangle(172, 104, 147, 23)); gapSymbolCB.setFont(verdana11); gapSymbolCB.setBounds(new Rectangle(172, 204, 69, 23)); + mincolourLabel.setFont(verdana11); + mincolourLabel.setHorizontalAlignment(SwingConstants.RIGHT); + mincolourLabel.setText("Minimum Colour"); + minColour.setFont(verdana11); + minColour.setBorder(BorderFactory.createEtchedBorder()); + minColour.setPreferredSize(new Dimension(40, 20)); + minColour.addMouseListener(new MouseAdapter() + { + public void mousePressed(MouseEvent e) + { + minColour_actionPerformed(); + } + }); + maxcolourLabel.setFont(verdana11); + maxcolourLabel.setHorizontalAlignment(SwingConstants.RIGHT); + maxcolourLabel.setText("Maximumum Colour "); + maxColour.setFont(verdana11); + maxColour.setBorder(BorderFactory.createEtchedBorder()); + maxColour.setPreferredSize(new Dimension(40, 20)); + maxColour.addMouseListener(new MouseAdapter() + { + public void mousePressed(MouseEvent e) + { + maxColour_actionPerformed(); + } + }); startupCheckbox.setText("Open file"); startupCheckbox.setFont(verdana11); startupCheckbox.setHorizontalAlignment(SwingConstants.RIGHT); @@ -535,7 +589,7 @@ public class GPreferences extends JPanel sortLabel.setText("Sort by "); jPanel2.setBounds(new Rectangle(7, 17, 158, 278)); jPanel2.setLayout(gridLayout2); - gridLayout2.setRows(13); + gridLayout2.setRows(12); exportTab.setLayout(null); epsLabel.setFont(verdana11); epsLabel.setHorizontalAlignment(SwingConstants.RIGHT); @@ -620,15 +674,13 @@ public class GPreferences extends JPanel jPanel2.add(showUnconserved); jPanel2.add(idItalics); jPanel2.add(smoothFont); - jPanel2.add(wrap); jPanel2.add(gapLabel); - jPanel2.add(colourLabel); + jPanel2.add(wrap); jPanel2.add(sortLabel); jPanel2.add(startupCheckbox); visualTab.add(annotations); visualTab.add(startupFileTextfield); visualTab.add(sortby); - visualTab.add(colour); visualTab.add(gapSymbolCB); visualTab.add(fontNameCB); visualTab.add(fontSizeCB); @@ -671,6 +723,13 @@ public class GPreferences extends JPanel tooltipSettings.add(showNpTooltip); visualTab.add(tooltipSettings); visualTab.add(jPanel2); + addtoLayout(visual2Tab, "Default Colourscheme for alignment", colourLabel, colour); + addtoLayout(visual2Tab, "Default Minimum Colour for annotation shading", mincolourLabel,minColour); + addtoLayout(visual2Tab,"Default Maximum Colour for annotation shading", maxcolourLabel, maxColour); + +// visual2panel.add(minColour); +// visual2panel.add(maxColour); +// visual2Tab.add(visual2panel); linkPanel.add(editLinkButtons, BorderLayout.EAST); editLinkButtons.add(newLink, null); @@ -727,6 +786,7 @@ public class GPreferences extends JPanel gapSymbolCB.setRenderer(dlcr); tabbedPane.add(visualTab, "Visual"); + tabbedPane.add(visual2Tab,"Colours"); tabbedPane.add(connectTab, "Connections"); tabbedPane.add(exportTab, "Output"); jPanel11.add(jLabel1); @@ -749,6 +809,18 @@ public class GPreferences extends JPanel exportTab.add(jPanel11); } + protected void maxColour_actionPerformed() + { + // TODO Auto-generated method stub + + } + + protected void minColour_actionPerformed() + { + // TODO Auto-generated method stub + + } + protected void showunconserved_actionPerformed(ActionEvent e) { // TODO Auto-generated method stub -- 1.7.10.2