JAL-2401 don't apply lower case colour to upper case
[jalview.git] / src / jalview / gui / UserDefinedColours.java
index 8af0af0..6e9a121 100755 (executable)
@@ -29,6 +29,7 @@ import jalview.jbgui.GUserDefinedColours;
 import jalview.schemabinding.version2.Colour;
 import jalview.schemabinding.version2.JalviewUserColours;
 import jalview.schemes.ColourSchemeI;
+import jalview.schemes.ColourSchemeLoader;
 import jalview.schemes.ColourSchemes;
 import jalview.schemes.ResidueProperties;
 import jalview.schemes.UserColourScheme;
@@ -64,13 +65,14 @@ import javax.swing.event.ChangeListener;
 public class UserDefinedColours extends GUserDefinedColours implements
         ChangeListener
 {
-  private static final Font VERDANA_BOLD_10 = new Font("Verdana", Font.BOLD, 10);
+  private static final Font VERDANA_BOLD_10 = new Font("Verdana",
+          Font.BOLD, 10);
 
   public static final String USER_DEFINED_COLOURS = "USER_DEFINED_COLOURS";
 
   private static final String LAST_DIRECTORY = "LAST_DIRECTORY";
 
-  private static final int MY_FRAME_HEIGHT = 420;
+  private static final int MY_FRAME_HEIGHT = 440;
 
   private static final int MY_FRAME_WIDTH = 810;
 
@@ -100,7 +102,7 @@ public class UserDefinedColours extends GUserDefinedColours implements
    */
   public UserDefinedColours(AlignmentPanel ap, SequenceGroup sg)
   {
-    super();
+    this();
 
     lcaseColour.setEnabled(false);
 
@@ -141,7 +143,7 @@ public class UserDefinedColours extends GUserDefinedColours implements
   public UserDefinedColours(JalviewStructureDisplayI viewer,
           ColourSchemeI oldcs)
   {
-    super();
+    this();
     this.structureViewer = viewer;
 
     colorChooser.getSelectionModel().addChangeListener(this);
@@ -150,7 +152,8 @@ public class UserDefinedColours extends GUserDefinedColours implements
 
     if (oldColourScheme instanceof UserColourScheme)
     {
-      schemeName.setText(((UserColourScheme) oldColourScheme).getSchemeName());
+      schemeName.setText(((UserColourScheme) oldColourScheme)
+              .getSchemeName());
     }
 
     resetButtonPanel(false);
@@ -159,6 +162,12 @@ public class UserDefinedColours extends GUserDefinedColours implements
 
   }
 
+  public UserDefinedColours()
+  {
+    super();
+    selectedButtons = new ArrayList<JButton>();
+  }
+
   void showFrame()
   {
     colorChooser.getSelectionModel().addChangeListener(this);
@@ -254,35 +263,36 @@ public class UserDefinedColours extends GUserDefinedColours implements
   }
 
   /**
-   * DOCUMENT ME!
+   * ChangeListener handler for when a colour is picked in the colour chooser.
+   * The action is to apply the colour to all selected buttons as their
+   * background colour. Foreground colour (text) is set to a lighter shade in
+   * order to highlight which buttons are selected. If 'Lower Case Colour' is
+   * active, then the colour is applied to all lower case buttons (as well as
+   * the Lower Case Colour button itself).
    * 
    * @param evt
-   *          DOCUMENT ME!
    */
   @Override
   public void stateChanged(ChangeEvent evt)
   {
-    if (selectedButtons != null)
+    JButton button = null;
+    final Color newColour = colorChooser.getColor();
+    if (lcaseColour.isSelected())
     {
-      JButton button = null;
-      final Color newColour = colorChooser.getColor();
-      for (int i = 0; i < selectedButtons.size(); i++)
+      selectedButtons.clear();
+      for (int i = 0; i < lowerCaseButtons.size(); i++)
       {
-        button = selectedButtons.get(i);
+        button = lowerCaseButtons.get(i);
         button.setBackground(newColour);
-        button.setForeground(ColorUtils.brighterThan(newColour));
-      }
-      if (button == lcaseColour)
-      {
-        for (int i = 0; i < lowerCaseButtons.size(); i++)
-        {
-          button = lowerCaseButtons.get(i);
-          button.setBackground(newColour);
-          button.setForeground(ColorUtils.brighterThan(button
-                  .getBackground()));
-        }
+        button.setForeground(ColorUtils.brighterThan(button.getBackground()));
       }
     }
+    for (int i = 0; i < selectedButtons.size(); i++)
+    {
+      button = selectedButtons.get(i);
+      button.setBackground(newColour);
+      button.setForeground(ColorUtils.brighterThan(newColour));
+    }
   }
 
   /**
@@ -305,11 +315,6 @@ public class UserDefinedColours extends GUserDefinedColours implements
    */
   public void colourButtonPressed(MouseEvent e)
   {
-    if (selectedButtons == null)
-    {
-      selectedButtons = new ArrayList<JButton>();
-    }
-
     JButton pressed = (JButton) e.getSource();
 
     if (e.isShiftDown())
@@ -403,8 +408,8 @@ public class UserDefinedColours extends GUserDefinedColours implements
    * @param buttonIndex
    *          the button's position in the list
    */
-  JButton makeButton(String label, String residue,
-          List<JButton> buttons, int buttonIndex)
+  JButton makeButton(String label, String residue, List<JButton> buttons,
+          int buttonIndex)
   {
     final JButton button;
     Color col;
@@ -435,7 +440,8 @@ public class UserDefinedColours extends GUserDefinedColours implements
       col = Color.white;
       if (oldColourScheme != null && oldColourScheme.isSimple())
       {
-        col = oldColourScheme.findColour(residue.charAt(0));
+        col = oldColourScheme.findColour(residue.charAt(0), 0, null, null,
+                0f);
       }
     }
 
@@ -605,8 +611,8 @@ public class UserDefinedColours extends GUserDefinedColours implements
     upperCaseButtons = new ArrayList<JButton>();
     lowerCaseButtons = new ArrayList<JButton>();
 
-    JalviewFileChooser chooser = new JalviewFileChooser(
-            Cache.getProperty(LAST_DIRECTORY), "jc", "Jalview User Colours");
+    JalviewFileChooser chooser = new JalviewFileChooser("jc",
+            "Jalview User Colours");
     chooser.setFileView(new JalviewFileView());
     chooser.setDialogTitle(MessageManager
             .getString("label.load_colour_scheme"));
@@ -621,7 +627,8 @@ public class UserDefinedColours extends GUserDefinedColours implements
     File choice = chooser.getSelectedFile();
     Cache.setProperty(LAST_DIRECTORY, choice.getParent());
 
-    UserColourScheme ucs = ColourSchemes.loadColourScheme(choice.getAbsolutePath());
+    UserColourScheme ucs = ColourSchemeLoader.loadColourScheme(choice
+            .getAbsolutePath());
     Color[] colors = ucs.getColours();
     schemeName.setText(ucs.getSchemeName());
 
@@ -669,7 +676,7 @@ public class UserDefinedColours extends GUserDefinedColours implements
       {
         colours = colours.substring(0, colours.indexOf("|"));
       }
-      ret = ColourSchemes.loadColourScheme(colours);
+      ret = ColourSchemeLoader.loadColourScheme(colours);
     }
 
     if (ret == null)
@@ -713,8 +720,7 @@ public class UserDefinedColours extends GUserDefinedColours implements
       }
       ColourSchemes.getInstance().removeColourScheme(name);
     }
-    JalviewFileChooser chooser = new JalviewFileChooser(
-            Cache.getProperty(LAST_DIRECTORY), "jc",
+    JalviewFileChooser chooser = new JalviewFileChooser("jc",
             "Jalview User Colours");
 
     JalviewFileView fileView = new JalviewFileView();
@@ -845,21 +851,8 @@ public class UserDefinedColours extends GUserDefinedColours implements
   @Override
   public void caseSensitive_actionPerformed(ActionEvent e)
   {
-    resetButtonPanel(caseSensitive.isSelected());
-    lcaseColour.setEnabled(caseSensitive.isSelected());
-  }
-
-  @Override
-  public void lcaseColour_actionPerformed(ActionEvent e)
-  {
-    if (selectedButtons == null)
-    {
-      selectedButtons = new ArrayList<JButton>();
-    }
-    else
-    {
-      selectedButtons.clear();
-    }
-    selectedButtons.add(lcaseColour);
+    boolean selected = caseSensitive.isSelected();
+    resetButtonPanel(selected);
+    lcaseColour.setEnabled(selected);
   }
 }