JAL-1645 Version-Rel Version 2.9 Year-Rel 2015 Licensing glob
[jalview.git] / src / jalview / appletgui / UserDefinedColours.java
old mode 100755 (executable)
new mode 100644 (file)
index e8e0e57..de3569a
@@ -1,33 +1,56 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4)
- * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9)
+ * Copyright (C) 2015 The Jalview Authors
  * 
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
+ * This file is part of Jalview.
  * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
  * 
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
 package jalview.appletgui;
 
-import java.util.*;
-
-import java.awt.*;
-import java.awt.event.*;
-
-import jalview.datamodel.*;
-import jalview.schemes.*;
+import jalview.datamodel.SequenceGroup;
+import jalview.schemes.ColourSchemeI;
+import jalview.schemes.GraduatedColor;
+import jalview.schemes.ResidueProperties;
+import jalview.schemes.UserColourScheme;
+import jalview.util.MessageManager;
+
+import java.awt.Button;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dialog;
+import java.awt.Font;
+import java.awt.Frame;
+import java.awt.GridLayout;
+import java.awt.Label;
+import java.awt.Panel;
+import java.awt.Rectangle;
+import java.awt.Scrollbar;
+import java.awt.TextField;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.AdjustmentEvent;
+import java.awt.event.AdjustmentListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.event.MouseEvent;
+import java.util.Vector;
 
 public class UserDefinedColours extends Panel implements ActionListener,
-        AdjustmentListener
+        AdjustmentListener, FocusListener
 {
 
   AlignmentPanel ap;
@@ -52,7 +75,7 @@ public class UserDefinedColours extends Panel implements ActionListener,
 
   String originalLabel;
 
-  Color originalColour;
+  Object originalColour;
 
   int R = 0, G = 0, B = 0;
 
@@ -103,18 +126,62 @@ public class UserDefinedColours extends Panel implements ActionListener,
 
   public UserDefinedColours(Component caller, Color col1, Frame alignframe)
   {
+    this(caller, col1, alignframe, "Select Colour");
+  }
+
+  /**
+   * Makes a dialog to choose the colour
+   * 
+   * @param caller
+   *          - handles events
+   * @param col1
+   *          - original colour
+   * @param alignframe
+   *          - the parent Frame for the dialog
+   * @param title
+   *          - window title
+   */
+  public UserDefinedColours(Component caller, Color col1, Frame alignframe,
+          String title)
+  {
     this.caller = caller;
     originalColour = col1;
-    originalLabel = "Select Colour";
-    setForDialog("Select Colour", alignframe);
+    originalLabel = title;
+    setForDialog(title, alignframe);
     setTargetColour(col1);
     dialog.setVisible(true);
   }
 
+  /**
+   * feature colour chooser
+   * 
+   * @param caller
+   * @param label
+   * @param colour
+   */
   public UserDefinedColours(Object caller, String label, Color colour)
   {
+    this(caller, label, colour, colour);
+  }
+
+  /**
+   * feature colour chooser when changing style to single color
+   * 
+   * @param me
+   * @param type
+   * @param graduatedColor
+   */
+  public UserDefinedColours(FeatureSettings me, String type,
+          GraduatedColor graduatedColor)
+  {
+    this(me, type, graduatedColor, graduatedColor.getMaxColor());
+  }
+
+  private UserDefinedColours(Object caller, String label, Object ocolour,
+          Color colour)
+  {
     this.caller = caller;
-    originalColour = colour;
+    originalColour = ocolour;
     originalLabel = label;
     init();
     remove(buttonPanel);
@@ -122,16 +189,30 @@ public class UserDefinedColours extends Panel implements ActionListener,
     setTargetColour(colour);
 
     okcancelPanel.setBounds(new Rectangle(0, 113, 400, 35));
-    frame.setTitle("User Defined Colours - " + label);
+    frame.setTitle(MessageManager.getString("label.user_defined_colours")
+            + " - " + label);
     frame.setSize(420, 200);
   }
 
-  void setForDialog(String title, Frame alignframe)
+  void setForDialog(String title, Container alignframe)
   {
     init();
     frame.setVisible(false);
     remove(buttonPanel);
-    dialog = new Dialog(alignframe, title, true);
+    if (alignframe instanceof Frame)
+    {
+      dialog = new Dialog((Frame) alignframe, title, true);
+    }
+    else
+    {
+      // if (alignframe instanceof JVDialog){
+      // // not 1.1 compatible!
+      // dialog = new Dialog(((JVDialog)alignframe), title, true);
+      // } else {
+      throw new Error(
+              MessageManager
+                      .getString("label.error_unsupported_owwner_user_colour_scheme"));
+    }
 
     dialog.add(this);
     this.setSize(400, 123);
@@ -140,35 +221,37 @@ public class UserDefinedColours extends Panel implements ActionListener,
     int width = 400;
 
     dialog.setBounds(alignframe.getBounds().x
-            + (alignframe.getSize().width - width) / 2, alignframe
-            .getBounds().y
-            + (alignframe.getSize().height - height) / 2, width, height);
+            + (alignframe.getSize().width - width) / 2,
+            alignframe.getBounds().y
+                    + (alignframe.getSize().height - height) / 2, width,
+            height);
 
   }
 
   public void actionPerformed(ActionEvent evt)
   {
-    if (evt.getSource() == okButton)
+    final Object source = evt.getSource();
+    if (source == okButton)
     {
       okButton_actionPerformed();
     }
-    else if (evt.getSource() == applyButton)
+    else if (source == applyButton)
     {
       applyButton_actionPerformed();
     }
-    else if (evt.getSource() == cancelButton)
+    else if (source == cancelButton)
     {
       cancelButton_actionPerformed();
     }
-    else if (evt.getSource() == rText)
+    else if (source == rText)
     {
       rText_actionPerformed();
     }
-    else if (evt.getSource() == gText)
+    else if (source == gText)
     {
       gText_actionPerformed();
     }
-    else if (evt.getSource() == bText)
+    else if (source == bText)
     {
       bText_actionPerformed();
     }
@@ -201,7 +284,8 @@ public class UserDefinedColours extends Panel implements ActionListener,
     }
     frame = new Frame();
     frame.add(this);
-    jalview.bin.JalviewLite.addFrame(frame, "User defined colours", 420,
+    jalview.bin.JalviewLite.addFrame(frame,
+            MessageManager.getString("label.user_defined_colours"), 420,
             345);
 
     if (seqGroup != null)
@@ -320,14 +404,15 @@ public class UserDefinedColours extends Panel implements ActionListener,
   {
     final Button button = new Button();
     Color col = Color.white;
-
-    try
-    {
-      col = oldColourScheme.findColour(aa.charAt(0), -1);
-    } catch (Exception ex)
+    if (oldColourScheme != null)
     {
+      try
+      {
+        col = oldColourScheme.findColour(aa.charAt(0), -1, null);
+      } catch (Exception ex)
+      {
+      }
     }
-
     button.setBackground(col);
     oldColours.addElement(col);
     button.setLabel(label);
@@ -348,7 +433,9 @@ public class UserDefinedColours extends Panel implements ActionListener,
   {
     applyButton_actionPerformed();
     if (dialog != null)
+    {
       dialog.setVisible(false);
+    }
 
     frame.setVisible(false);
   }
@@ -381,15 +468,19 @@ public class UserDefinedColours extends Panel implements ActionListener,
       }
       else if (caller instanceof FeatureRenderer)
       {
-        ((FeatureRenderer) caller).colourPanel.setBackground(getColor());
+        ((FeatureRenderer) caller).colourPanel.updateColor(getColor());
       }
       else if (caller instanceof FeatureColourChooser)
       {
-        if (originalLabel.indexOf("inimum")>-1)
+        if (originalLabel.indexOf("inimum") > -1)
+        {
+          ((FeatureColourChooser) caller)
+                  .minColour_actionPerformed(getColor());
+        }
+        else
         {
-          ((FeatureColourChooser) caller).minColour_actionPerformed(getColor());
-        } else {
-          ((FeatureColourChooser) caller).maxColour_actionPerformed(getColor());
+          ((FeatureColourChooser) caller)
+                  .maxColour_actionPerformed(getColor());
         }
       }
 
@@ -406,7 +497,7 @@ public class UserDefinedColours extends Panel implements ActionListener,
     UserColourScheme ucs = new UserColourScheme(newColours);
     if (ap != null)
     {
-      ucs.setThreshold(0, ap.av.getIgnoreGapsConsensus());
+      ucs.setThreshold(0, ap.av.isIgnoreGapsConsensus());
     }
 
     if (ap != null)
@@ -446,23 +537,37 @@ public class UserDefinedColours extends Panel implements ActionListener,
         if (originalLabel.equals("Min Colour"))
         {
           ((AnnotationColourChooser) caller)
-                  .minColour_actionPerformed(originalColour);
+                  .minColour_actionPerformed((Color) originalColour);
         }
         else
         {
           ((AnnotationColourChooser) caller)
-                  .maxColour_actionPerformed(originalColour);
+                  .maxColour_actionPerformed((Color) originalColour);
         }
       }
       else if (caller instanceof FeatureRenderer)
       {
-        ((FeatureRenderer) caller).colourPanel
-                .setBackground(originalColour);
+        ((FeatureRenderer) caller).colourPanel.updateColor(originalColour);
 
       }
 
+      else if (caller instanceof FeatureColourChooser)
+      {
+        if (originalLabel.indexOf("inimum") > -1)
+        {
+          ((FeatureColourChooser) caller)
+                  .minColour_actionPerformed((Color) originalColour);
+        }
+        else
+        {
+          ((FeatureColourChooser) caller)
+                  .maxColour_actionPerformed((Color) originalColour);
+        }
+      }
       if (dialog != null)
+      {
         dialog.setVisible(false);
+      }
 
       frame.setVisible(false);
       return;
@@ -540,13 +645,13 @@ public class UserDefinedColours extends Panel implements ActionListener,
     gridLayout.setColumns(6);
     gridLayout.setRows(4);
     okButton.setFont(new java.awt.Font("Verdana", 0, 11));
-    okButton.setLabel("OK");
+    okButton.setLabel(MessageManager.getString("action.ok"));
     okButton.addActionListener(this);
     applyButton.setFont(new java.awt.Font("Verdana", 0, 11));
-    applyButton.setLabel("Apply");
+    applyButton.setLabel(MessageManager.getString("action.apply"));
     applyButton.addActionListener(this);
     cancelButton.setFont(new java.awt.Font("Verdana", 0, 11));
-    cancelButton.setLabel("Cancel");
+    cancelButton.setLabel(MessageManager.getString("action.cancel"));
     cancelButton.addActionListener(this);
     this.setBackground(new Color(212, 208, 223));
     okcancelPanel.setBounds(new Rectangle(0, 265, 400, 35));
@@ -565,6 +670,7 @@ public class UserDefinedColours extends Panel implements ActionListener,
     rText.setText("0        ");
     rText.setBounds(new Rectangle(156, 27, 53, 19));
     rText.addActionListener(this);
+    rText.addFocusListener(this);
     label4.setAlignment(Label.RIGHT);
     label4.setText("G");
     label4.setBounds(new Rectangle(15, 56, 20, 15));
@@ -579,6 +685,7 @@ public class UserDefinedColours extends Panel implements ActionListener,
     gText.setText("0        ");
     gText.setBounds(new Rectangle(156, 52, 53, 20));
     gText.addActionListener(this);
+    gText.addFocusListener(this);
     label5.setAlignment(Label.RIGHT);
     label5.setText("B");
     label5.setBounds(new Rectangle(14, 82, 20, 15));
@@ -593,12 +700,16 @@ public class UserDefinedColours extends Panel implements ActionListener,
     bText.setText("0        ");
     bText.setBounds(new Rectangle(157, 78, 52, 20));
     bText.addActionListener(this);
+    bText.addFocusListener(this);
     target.setBackground(Color.black);
     target.setBounds(new Rectangle(229, 26, 134, 79));
     this.add(okcancelPanel, null);
     okcancelPanel.add(okButton, null);
     okcancelPanel.add(applyButton, null);
     okcancelPanel.add(cancelButton, null);
+    this.add(rText);
+    this.add(gText);
+    this.add(bText);
     this.add(buttonPanel, null);
     this.add(target, null);
     this.add(gScroller);
@@ -607,9 +718,40 @@ public class UserDefinedColours extends Panel implements ActionListener,
     this.add(label5);
     this.add(label4);
     this.add(label1);
-    this.add(gText);
-    this.add(rText);
-    this.add(bText);
+  }
+
+  @Override
+  public void focusGained(FocusEvent e)
+  {
+    // noop
+  }
+
+  /**
+   * This method applies any change to an RGB value if the user tabs out of the
+   * field instead of pressing Enter
+   */
+  @Override
+  public void focusLost(FocusEvent e)
+  {
+    Component c = e.getComponent();
+    if (c == rText)
+    {
+      rText_actionPerformed();
+    }
+    else
+    {
+      if (c == gText)
+      {
+        gText_actionPerformed();
+      }
+      else
+      {
+        if (c == bText)
+        {
+          bText_actionPerformed();
+        }
+      }
+    }
   }
 
 }