JAL-1702 corrected check for 'no colours selected'
[jalview.git] / src / jalview / gui / UserDefinedColours.java
index 7bf2e6c..a907187 100755 (executable)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
- * Copyright (C) 2014 The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  */
 package jalview.gui;
 
-import jalview.api.structures.JalviewStructureDisplayI;
-import jalview.datamodel.SequenceGroup;
-import jalview.io.JalviewFileChooser;
-import jalview.jbgui.GUserDefinedColours;
-import jalview.schemes.ColourSchemeI;
-import jalview.schemes.ResidueProperties;
-import jalview.schemes.UserColourScheme;
-import jalview.util.ColorUtils;
-import jalview.util.MessageManager;
-
 import java.awt.Color;
 import java.awt.Font;
 import java.awt.event.ActionEvent;
@@ -50,6 +40,16 @@ import javax.swing.JOptionPane;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 
+import jalview.api.structures.JalviewStructureDisplayI;
+import jalview.datamodel.SequenceGroup;
+import jalview.io.JalviewFileChooser;
+import jalview.jbgui.GUserDefinedColours;
+import jalview.schemes.ColourSchemeI;
+import jalview.schemes.ResidueProperties;
+import jalview.schemes.UserColourScheme;
+import jalview.util.ColorUtils;
+import jalview.util.MessageManager;
+
 /**
  * This panel allows the user to assign colours to Amino Acid residue codes, and
  * save the colour scheme.
@@ -454,17 +454,43 @@ public class UserDefinedColours extends GUserDefinedColours implements
   @Override
   protected void okButton_actionPerformed(ActionEvent e)
   {
-    applyButton_actionPerformed(null);
-
-    try
+    if (isNoSelectionMade())
     {
-      frame.setClosed(true);
-    } catch (Exception ex)
+      JOptionPane.showMessageDialog(Desktop.desktop, MessageManager
+              .getString("label.no_colour_selection_in_scheme"),
+              MessageManager.getString("label.no_colour_selection_warn"),
+              JOptionPane.WARNING_MESSAGE);
+    }
+    else
     {
+      applyButton_actionPerformed(null);
+
+      try
+      {
+        frame.setClosed(true);
+      } catch (Exception ex)
+      {
+      }
     }
   }
 
   /**
+   * Returns true if the user has not made any colour selection (including if
+   * 'case-sensitive' selected and no lower-case colour chosen).
+   * 
+   * @return
+   */
+  protected boolean isNoSelectionMade()
+  {
+    final boolean noUpperCaseSelected = upperCaseButtons == null
+            || upperCaseButtons.isEmpty();
+    final boolean noLowerCaseSelected = caseSensitive.isSelected()
+            && (lowerCaseButtons == null || lowerCaseButtons.isEmpty());
+    final boolean noSelectionMade = noUpperCaseSelected || noLowerCaseSelected;
+    return noSelectionMade;
+  }
+
+  /**
    * DOCUMENT ME!
    * 
    * @param e
@@ -473,7 +499,14 @@ public class UserDefinedColours extends GUserDefinedColours implements
   @Override
   protected void applyButton_actionPerformed(ActionEvent e)
   {
-    UserColourScheme ucs = getSchemeFromButtons();
+    if (isNoSelectionMade())
+    {
+        JOptionPane.showMessageDialog(Desktop.desktop,
+                MessageManager.getString("label.no_colour_selection_in_scheme"),MessageManager.getString("label.no_colour_selection_warn"),
+                JOptionPane.WARNING_MESSAGE);
+               
+       }
+       UserColourScheme ucs = getSchemeFromButtons();
     ucs.setName(schemeName.getText());
 
     if (seqGroup != null)
@@ -496,10 +529,18 @@ public class UserDefinedColours extends GUserDefinedColours implements
 
     Color[] newColours = new Color[24];
 
-    for (int i = 0; i < 24; i++)
-    {
-      JButton button = upperCaseButtons.get(i);
-      newColours[i] = button.getBackground();
+    int length = upperCaseButtons.size();
+    if (length<24){
+       int i = 0;
+       for (JButton btn:upperCaseButtons){
+               newColours[i] = btn.getBackground();
+               i++;
+       }
+    }else{
+       for (int i = 0; i < 24; i++){
+               JButton button = upperCaseButtons.get(i);
+               newColours[i] = button.getBackground();
+       }
     }
 
     UserColourScheme ucs = new UserColourScheme(newColours);
@@ -507,17 +548,25 @@ public class UserDefinedColours extends GUserDefinedColours implements
     if (caseSensitive.isSelected())
     {
       newColours = new Color[23];
-      for (int i = 0; i < 23; i++)
-      {
-        JButton button = lowerCaseButtons.get(i);
-        newColours[i] = button.getBackground();
+      length = lowerCaseButtons.size();
+      if (length<23){
+         int i = 0;
+         for (JButton btn:lowerCaseButtons){
+                 newColours[i] = btn.getBackground();
+                 i++;
+         }
+      }else{
+         for (int i = 0; i < 23; i++){
+                 JButton button = lowerCaseButtons.get(i);
+                 newColours[i] = button.getBackground();
+         }
       }
       ucs.setLowerCaseColours(newColours);
     }
 
     if (ap != null)
     {
-      ucs.setThreshold(0, ap.av.getIgnoreGapsConsensus());
+      ucs.setThreshold(0, ap.av.isIgnoreGapsConsensus());
     }
 
     return ucs;
@@ -661,7 +710,7 @@ public class UserDefinedColours extends GUserDefinedColours implements
         name = jucs.getColour(i).getName();
         if (ResidueProperties.aa3Hash.containsKey(name))
         {
-          index = ((Integer) ResidueProperties.aa3Hash.get(name))
+          index = ResidueProperties.aa3Hash.get(name)
                   .intValue();
         }
         else