default parameter for colours in annotation shading (JAL-234), ensure
authorjprocter <jprocter@compbio.dundee.ac.uk>
Fri, 22 Jul 2011 14:56:24 +0000 (15:56 +0100)
committerjprocter <jprocter@compbio.dundee.ac.uk>
Fri, 22 Jul 2011 14:56:24 +0000 (15:56 +0100)
dialog is reset correctly (JAL-877), propagate colour changes to
structure (JAL-868)

src/jalview/appletgui/AnnotationColourChooser.java
src/jalview/bin/JalviewLite.java
src/jalview/gui/AnnotationColourChooser.java
src/jalview/gui/Preferences.java
src/jalview/jbgui/GPreferences.java

index 41c20bd..25e08b0 100755 (executable)
@@ -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()
index f044411..9a4d9e2 100644 (file)
@@ -2244,6 +2244,34 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
   }\r
 \r
   /**\r
+   * return the given colour value parameter or the given default if parameter not given\r
+   * @param colparam\r
+   * @param defcolour\r
+   * @return\r
+   */\r
+  public Color getDefaultColourParameter(String colparam, Color defcolour)\r
+  {\r
+    String colprop = getParameter(colparam);\r
+    if (colprop==null || colprop.trim().length()==0)\r
+    {\r
+      return defcolour;\r
+    }\r
+    Color col = jalview.schemes.ColourSchemeProperty.getAWTColorFromName(colprop);\r
+    if (col==null)\r
+    {\r
+      try {\r
+        col = new jalview.schemes.UserColourScheme(colprop).findColour('A');\r
+      } catch (Exception ex)\r
+      {\r
+        System.err.println("Couldn't parse '"+colprop+"' as a colour for "+colparam);\r
+        col=null;\r
+      }\r
+    }\r
+    return (col==null) ? defcolour: col;\r
+\r
+  }\r
+\r
+  /**\r
    * bind structures in a viewer to any matching sequences in an alignFrame (use\r
    * sequenceIds to limit scope of search to specific sequences)\r
    * \r
index a05ccf1..639140e 100755 (executable)
@@ -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)
index 70f8f3e..b92f9da 100755 (executable)
@@ -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();
+  }
+
 }
index aaa73a1..42ffa5d 100755 (executable)
@@ -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