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 9f1eb6d..de3569a
-package jalview.appletgui;\r
-\r
-import jalview.jbappletgui.GUserDefinedColours;\r
-import jalview.datamodel.*;\r
-import jalview.schemes.*;\r
-import jalview.io.*;\r
-import java.io.*;\r
-import java.awt.*;\r
-import java.awt.event.*;\r
-import java.util.*;\r
-\r
-\r
-public class UserDefinedColours extends GUserDefinedColours\r
-{\r
-\r
-  AlignmentPanel ap;\r
-  SequenceGroup seqGroup;\r
-  Button selectedButton;\r
-  Vector oldColours = new Vector();\r
-  ColourSchemeI oldColourScheme;\r
-  Frame frame;\r
-\r
-  int R = 0, G = 0, B = 0;\r
-\r
-  public UserDefinedColours(AlignmentPanel ap, SequenceGroup sg)\r
-  {\r
-    super();\r
-    frame = new Frame();\r
-    frame.add(this);\r
-    jalview.bin.JalviewLite.addFrame(frame, "User defined colours", 420,345 );\r
-\r
-    if(sg!=null)\r
-        frame.setTitle( frame.getTitle()+ " ("+sg.getName()+")");\r
-\r
-\r
-    this.ap = ap;\r
-    seqGroup = sg;\r
-\r
-\r
-      if (seqGroup != null)\r
-        oldColourScheme = seqGroup.cs;\r
-      else\r
-        oldColourScheme = ap.av.getGlobalColourScheme();\r
-\r
-      for (int i = 0; i < 20; i++)\r
-        makeButton(ResidueProperties.aa2Triplet.get(ResidueProperties.aa[i]) +\r
-                   "", ResidueProperties.aa[i]);\r
-\r
-      makeButton("B", "B");\r
-      makeButton("Z", "Z");\r
-      makeButton("X", "X");\r
-      makeButton("Gap", "'.','-',' '");\r
-\r
-  }\r
-\r
-  protected void rText_actionPerformed(ActionEvent e) {\r
-    try{\r
-      int i = Integer.parseInt(rText.getText());\r
-      rScroller.setValue(i);\r
-    }catch(NumberFormatException ex){}\r
-  }\r
-\r
-  protected void gText_actionPerformed(ActionEvent e) {\r
-    try{\r
-      int i = Integer.parseInt(gText.getText());\r
-      gScroller.setValue(i);\r
-    }catch(NumberFormatException ex){}\r
-\r
-  }\r
-\r
-  protected void bText_actionPerformed(ActionEvent e) {\r
-    try{\r
-      int i = Integer.parseInt(bText.getText());\r
-      bScroller.setValue(i);\r
-    }catch(NumberFormatException ex){}\r
-\r
-  }\r
-\r
-\r
-  protected void rScroller_adjustmentValueChanged(AdjustmentEvent e) {\r
-    R = rScroller.getValue();\r
-    rText.setText(R+"");\r
-    colourChanged();\r
-  }\r
-\r
-  protected void gScroller_adjustmentValueChanged(AdjustmentEvent e) {\r
-    G = gScroller.getValue();\r
-    gText.setText(G+"");\r
-    colourChanged();\r
-  }\r
-\r
-  protected void bScroller_adjustmentValueChanged(AdjustmentEvent e) {\r
-    B = bScroller.getValue();\r
-    bText.setText(B+"");\r
-    colourChanged();\r
-  }\r
-\r
- public void colourChanged()\r
- {\r
-   Color col = new Color(R,G,B);\r
-   target.setBackground( col );\r
-\r
-   if(selectedButton!=null)\r
-     selectedButton.setBackground( col );\r
- }\r
-\r
-  public void colourButtonPressed(MouseEvent e)\r
-  {\r
-     selectedButton = (Button)e.getSource();\r
-     Color col = selectedButton.getBackground();\r
-     R = col.getRed();\r
-     G = col.getGreen();\r
-     B = col.getBlue();\r
-     rScroller.setValue(R);\r
-     gScroller.setValue(G);\r
-     bScroller.setValue(B);\r
-     rText.setText(R+"");\r
-     gText.setText(G+"");\r
-     bText.setText(B+"");\r
-\r
-     colourChanged();\r
-  }\r
-\r
-  void makeButton(String label, String aa)\r
-  {\r
-    final Button button = new Button();\r
-    Color col = Color.white;\r
-\r
-\r
-    try{\r
-      col = oldColourScheme.findColour(aa, -1);\r
-    }catch(Exception ex){}\r
-\r
-    button.setBackground(  col );\r
-    oldColours.addElement( col );\r
-    button.setLabel( label );\r
-    button.setForeground( col.darker().darker().darker() );\r
-    button.setFont(new java.awt.Font("Verdana", 1, 10));\r
-    button.addMouseListener(new java.awt.event.MouseAdapter()\r
-    {\r
-      public void mouseClicked(MouseEvent e)\r
-      {\r
-        colourButtonPressed(e);\r
-      }\r
-    });\r
-\r
-    buttonPanel.add(button, null);\r
-  }\r
-\r
-\r
-  protected void okButton_actionPerformed(ActionEvent e)\r
-  {\r
-    applyButton_actionPerformed(null);\r
-   frame.setVisible(false);\r
-  }\r
-\r
-  protected void applyButton_actionPerformed(ActionEvent e)\r
-  {\r
-\r
-    Color [] newColours = new Color[24];\r
-    for(int i=0; i<24; i++)\r
-    {\r
-          Button button = (Button)buttonPanel.getComponent(i);\r
-          newColours[i] = button.getBackground();\r
-    }\r
-\r
-    UserColourScheme ucs = new UserColourScheme();\r
-    ucs.setThreshold(0);\r
-    ucs.setColourScheme( newColours );\r
-\r
-    if(seqGroup!=null)\r
-      seqGroup.cs = ucs;\r
-    else\r
-      ap.av.setGlobalColourScheme(ucs);\r
-\r
-    ap.repaint();\r
-  }\r
-\r
-\r
-  public static UserColourScheme loadDefaultColours(String file)\r
-  {\r
-    UserColourScheme ucs = null;\r
-    try\r
-    {\r
-      BufferedReader in = new BufferedReader(new FileReader(file));\r
-      Color [] newColours = new Color[24];\r
-      for (int i = 0; i < 24; i++)\r
-      {\r
-        newColours[i] = new Color(Integer.parseInt(in.readLine()));\r
-      }\r
-\r
-      ucs = new UserColourScheme();\r
-      ucs.setThreshold(0);\r
-      ucs.setColourScheme(newColours);\r
-\r
-    }\r
-    catch (Exception ex)\r
-    {}\r
-\r
-    return ucs;\r
-  }\r
-\r
-\r
-  protected void cancelButton_actionPerformed(ActionEvent e)\r
-  {\r
-    UserColourScheme ucs = new UserColourScheme();\r
-    Color [] newColours = new Color[24];\r
-    for(int i=0; i<24; i++)\r
-    {\r
-          newColours[i] = (Color)oldColours.elementAt(i);\r
-          buttonPanel.getComponent(i).setBackground(newColours[i]);\r
-    }\r
-\r
-    ucs.setColourScheme( newColours );\r
-    if (seqGroup != null)\r
-      seqGroup.cs = ucs;\r
-    else\r
-      ap.av.setGlobalColourScheme(ucs);\r
-\r
-    ap.repaint();\r
-\r
-    frame.setVisible(false);\r
-  }\r
-\r
-\r
-}\r
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9)
+ * Copyright (C) 2015 The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * 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 Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+package jalview.appletgui;
+
+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, FocusListener
+{
+
+  AlignmentPanel ap;
+
+  SequenceGroup seqGroup;
+
+  Button selectedButton;
+
+  Vector oldColours = new Vector();
+
+  ColourSchemeI oldColourScheme;
+
+  Frame frame;
+
+  MCview.AppletPDBCanvas pdbcanvas;
+
+  AppletJmol jmol;
+
+  Dialog dialog;
+
+  Object caller;
+
+  String originalLabel;
+
+  Object originalColour;
+
+  int R = 0, G = 0, B = 0;
+
+  public ColourSchemeI loadDefaultColours()
+  {
+    // NOT IMPLEMENTED YET IN APPLET VERSION
+    return null;
+  }
+
+  public UserDefinedColours(AlignmentPanel ap, SequenceGroup sg)
+  {
+    this.ap = ap;
+    seqGroup = sg;
+
+    if (seqGroup != null)
+    {
+      oldColourScheme = seqGroup.cs;
+    }
+    else
+    {
+      oldColourScheme = ap.av.getGlobalColourScheme();
+    }
+
+    init();
+  }
+
+  public UserDefinedColours(MCview.AppletPDBCanvas pdb)
+  {
+    this.pdbcanvas = pdb;
+    init();
+  }
+
+  public UserDefinedColours(AppletJmol jmol)
+  {
+    this.jmol = jmol;
+    init();
+  }
+
+  public UserDefinedColours(FeatureRenderer fr, Frame alignframe)
+  {
+    caller = fr;
+    originalColour = fr.colourPanel.getBackground();
+    originalLabel = "Feature Colour";
+    setForDialog("Select Feature Colour", alignframe);
+    setTargetColour(fr.colourPanel.getBackground());
+    dialog.setVisible(true);
+  }
+
+  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 = 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 = ocolour;
+    originalLabel = label;
+    init();
+    remove(buttonPanel);
+
+    setTargetColour(colour);
+
+    okcancelPanel.setBounds(new Rectangle(0, 113, 400, 35));
+    frame.setTitle(MessageManager.getString("label.user_defined_colours")
+            + " - " + label);
+    frame.setSize(420, 200);
+  }
+
+  void setForDialog(String title, Container alignframe)
+  {
+    init();
+    frame.setVisible(false);
+    remove(buttonPanel);
+    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);
+    okcancelPanel.setBounds(new Rectangle(0, 123, 400, 35));
+    int height = 160 + alignframe.getInsets().top + getInsets().bottom;
+    int width = 400;
+
+    dialog.setBounds(alignframe.getBounds().x
+            + (alignframe.getSize().width - width) / 2,
+            alignframe.getBounds().y
+                    + (alignframe.getSize().height - height) / 2, width,
+            height);
+
+  }
+
+  public void actionPerformed(ActionEvent evt)
+  {
+    final Object source = evt.getSource();
+    if (source == okButton)
+    {
+      okButton_actionPerformed();
+    }
+    else if (source == applyButton)
+    {
+      applyButton_actionPerformed();
+    }
+    else if (source == cancelButton)
+    {
+      cancelButton_actionPerformed();
+    }
+    else if (source == rText)
+    {
+      rText_actionPerformed();
+    }
+    else if (source == gText)
+    {
+      gText_actionPerformed();
+    }
+    else if (source == bText)
+    {
+      bText_actionPerformed();
+    }
+  }
+
+  public void adjustmentValueChanged(AdjustmentEvent evt)
+  {
+    if (evt.getSource() == rScroller)
+    {
+      rScroller_adjustmentValueChanged();
+    }
+    else if (evt.getSource() == gScroller)
+    {
+      gScroller_adjustmentValueChanged();
+    }
+    else if (evt.getSource() == bScroller)
+    {
+      bScroller_adjustmentValueChanged();
+    }
+  }
+
+  void init()
+  {
+    try
+    {
+      jbInit();
+    } catch (Exception e)
+    {
+      e.printStackTrace();
+    }
+    frame = new Frame();
+    frame.add(this);
+    jalview.bin.JalviewLite.addFrame(frame,
+            MessageManager.getString("label.user_defined_colours"), 420,
+            345);
+
+    if (seqGroup != null)
+    {
+      frame.setTitle(frame.getTitle() + " (" + seqGroup.getName() + ")");
+    }
+
+    for (int i = 0; i < 20; i++)
+    {
+      makeButton(ResidueProperties.aa2Triplet.get(ResidueProperties.aa[i])
+              + "", ResidueProperties.aa[i]);
+    }
+
+    makeButton("B", "B");
+    makeButton("Z", "Z");
+    makeButton("X", "X");
+    makeButton("Gap", "'.','-',' '");
+
+    validate();
+  }
+
+  protected void rText_actionPerformed()
+  {
+    try
+    {
+      int i = Integer.parseInt(rText.getText());
+      rScroller.setValue(i);
+      rScroller_adjustmentValueChanged();
+    } catch (NumberFormatException ex)
+    {
+    }
+  }
+
+  protected void gText_actionPerformed()
+  {
+    try
+    {
+      int i = Integer.parseInt(gText.getText());
+      gScroller.setValue(i);
+      gScroller_adjustmentValueChanged();
+    } catch (NumberFormatException ex)
+    {
+    }
+
+  }
+
+  protected void bText_actionPerformed()
+  {
+    try
+    {
+      int i = Integer.parseInt(bText.getText());
+      bScroller.setValue(i);
+      bScroller_adjustmentValueChanged();
+    } catch (NumberFormatException ex)
+    {
+    }
+
+  }
+
+  protected void rScroller_adjustmentValueChanged()
+  {
+    R = rScroller.getValue();
+    rText.setText(R + "");
+    colourChanged();
+  }
+
+  protected void gScroller_adjustmentValueChanged()
+  {
+    G = gScroller.getValue();
+    gText.setText(G + "");
+    colourChanged();
+  }
+
+  protected void bScroller_adjustmentValueChanged()
+  {
+    B = bScroller.getValue();
+    bText.setText(B + "");
+    colourChanged();
+  }
+
+  public void colourChanged()
+  {
+    Color col = new Color(R, G, B);
+    target.setBackground(col);
+    target.repaint();
+
+    if (selectedButton != null)
+    {
+      selectedButton.setBackground(col);
+      selectedButton.repaint();
+    }
+  }
+
+  void setTargetColour(Color col)
+  {
+    R = col.getRed();
+    G = col.getGreen();
+    B = col.getBlue();
+
+    rScroller.setValue(R);
+    gScroller.setValue(G);
+    bScroller.setValue(B);
+    rText.setText(R + "");
+    gText.setText(G + "");
+    bText.setText(B + "");
+    colourChanged();
+  }
+
+  public void colourButtonPressed(MouseEvent e)
+  {
+    selectedButton = (Button) e.getSource();
+    setTargetColour(selectedButton.getBackground());
+  }
+
+  void makeButton(String label, String aa)
+  {
+    final Button button = new Button();
+    Color col = Color.white;
+    if (oldColourScheme != null)
+    {
+      try
+      {
+        col = oldColourScheme.findColour(aa.charAt(0), -1, null);
+      } catch (Exception ex)
+      {
+      }
+    }
+    button.setBackground(col);
+    oldColours.addElement(col);
+    button.setLabel(label);
+    button.setForeground(col.darker().darker().darker());
+    button.setFont(new java.awt.Font("Verdana", 1, 10));
+    button.addMouseListener(new java.awt.event.MouseAdapter()
+    {
+      public void mousePressed(MouseEvent e)
+      {
+        colourButtonPressed(e);
+      }
+    });
+
+    buttonPanel.add(button, null);
+  }
+
+  protected void okButton_actionPerformed()
+  {
+    applyButton_actionPerformed();
+    if (dialog != null)
+    {
+      dialog.setVisible(false);
+    }
+
+    frame.setVisible(false);
+  }
+
+  public Color getColor()
+  {
+    return new Color(R, G, B);
+  }
+
+  protected void applyButton_actionPerformed()
+  {
+    if (caller != null)
+    {
+      if (caller instanceof FeatureSettings)
+      {
+        ((FeatureSettings) caller).setUserColour(originalLabel, getColor());
+      }
+      else if (caller instanceof AnnotationColourChooser)
+      {
+        if (originalLabel.equals("Min Colour"))
+        {
+          ((AnnotationColourChooser) caller)
+                  .minColour_actionPerformed(getColor());
+        }
+        else
+        {
+          ((AnnotationColourChooser) caller)
+                  .maxColour_actionPerformed(getColor());
+        }
+      }
+      else if (caller instanceof FeatureRenderer)
+      {
+        ((FeatureRenderer) caller).colourPanel.updateColor(getColor());
+      }
+      else if (caller instanceof FeatureColourChooser)
+      {
+        if (originalLabel.indexOf("inimum") > -1)
+        {
+          ((FeatureColourChooser) caller)
+                  .minColour_actionPerformed(getColor());
+        }
+        else
+        {
+          ((FeatureColourChooser) caller)
+                  .maxColour_actionPerformed(getColor());
+        }
+      }
+
+      return;
+    }
+
+    Color[] newColours = new Color[24];
+    for (int i = 0; i < 24; i++)
+    {
+      Button button = (Button) buttonPanel.getComponent(i);
+      newColours[i] = button.getBackground();
+    }
+
+    UserColourScheme ucs = new UserColourScheme(newColours);
+    if (ap != null)
+    {
+      ucs.setThreshold(0, ap.av.isIgnoreGapsConsensus());
+    }
+
+    if (ap != null)
+    {
+      if (seqGroup != null)
+      {
+        seqGroup.cs = ucs;
+      }
+      else
+      {
+        ap.av.setGlobalColourScheme(ucs);
+      }
+      ap.seqPanel.seqCanvas.img = null;
+      ap.paintAlignment(true);
+    }
+    else if (jmol != null)
+    {
+      jmol.setJalviewColourScheme(ucs);
+    }
+    else if (pdbcanvas != null)
+    {
+      pdbcanvas.setColours(ucs);
+    }
+  }
+
+  protected void cancelButton_actionPerformed()
+  {
+    if (caller != null)
+    {
+      if (caller instanceof FeatureSettings)
+      {
+        ((FeatureSettings) caller).setUserColour(originalLabel,
+                originalColour);
+      }
+      else if (caller instanceof AnnotationColourChooser)
+      {
+        if (originalLabel.equals("Min Colour"))
+        {
+          ((AnnotationColourChooser) caller)
+                  .minColour_actionPerformed((Color) originalColour);
+        }
+        else
+        {
+          ((AnnotationColourChooser) caller)
+                  .maxColour_actionPerformed((Color) originalColour);
+        }
+      }
+      else if (caller instanceof FeatureRenderer)
+      {
+        ((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;
+    }
+
+    Color[] newColours = new Color[24];
+    for (int i = 0; i < 24; i++)
+    {
+      newColours[i] = (Color) oldColours.elementAt(i);
+      buttonPanel.getComponent(i).setBackground(newColours[i]);
+    }
+
+    UserColourScheme ucs = new UserColourScheme(newColours);
+
+    if (ap != null)
+    {
+      if (seqGroup != null)
+      {
+        seqGroup.cs = ucs;
+      }
+      else
+      {
+        ap.av.setGlobalColourScheme(ucs);
+      }
+      ap.paintAlignment(true);
+    }
+    else if (jmol != null)
+    {
+      jmol.setJalviewColourScheme(ucs);
+    }
+    else if (pdbcanvas != null)
+    {
+      pdbcanvas.pdb.setColours(ucs);
+    }
+
+    frame.setVisible(false);
+  }
+
+  protected Panel buttonPanel = new Panel();
+
+  protected GridLayout gridLayout = new GridLayout();
+
+  Panel okcancelPanel = new Panel();
+
+  protected Button okButton = new Button();
+
+  protected Button applyButton = new Button();
+
+  protected Button cancelButton = new Button();
+
+  protected Scrollbar rScroller = new Scrollbar();
+
+  Label label1 = new Label();
+
+  protected TextField rText = new TextField();
+
+  Label label4 = new Label();
+
+  protected Scrollbar gScroller = new Scrollbar();
+
+  protected TextField gText = new TextField();
+
+  Label label5 = new Label();
+
+  protected Scrollbar bScroller = new Scrollbar();
+
+  protected TextField bText = new TextField();
+
+  protected Panel target = new Panel();
+
+  private void jbInit() throws Exception
+  {
+    this.setLayout(null);
+    buttonPanel.setLayout(gridLayout);
+    gridLayout.setColumns(6);
+    gridLayout.setRows(4);
+    okButton.setFont(new java.awt.Font("Verdana", 0, 11));
+    okButton.setLabel(MessageManager.getString("action.ok"));
+    okButton.addActionListener(this);
+    applyButton.setFont(new java.awt.Font("Verdana", 0, 11));
+    applyButton.setLabel(MessageManager.getString("action.apply"));
+    applyButton.addActionListener(this);
+    cancelButton.setFont(new java.awt.Font("Verdana", 0, 11));
+    cancelButton.setLabel(MessageManager.getString("action.cancel"));
+    cancelButton.addActionListener(this);
+    this.setBackground(new Color(212, 208, 223));
+    okcancelPanel.setBounds(new Rectangle(0, 265, 400, 35));
+    buttonPanel.setBounds(new Rectangle(0, 123, 400, 142));
+    rScroller.setMaximum(256);
+    rScroller.setMinimum(0);
+    rScroller.setOrientation(0);
+    rScroller.setUnitIncrement(1);
+    rScroller.setVisibleAmount(1);
+    rScroller.setBounds(new Rectangle(36, 27, 119, 19));
+    rScroller.addAdjustmentListener(this);
+    label1.setAlignment(Label.RIGHT);
+    label1.setText("R");
+    label1.setBounds(new Rectangle(19, 30, 16, 15));
+    rText.setFont(new java.awt.Font("Dialog", Font.PLAIN, 10));
+    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));
+    gScroller.setMaximum(256);
+    gScroller.setMinimum(0);
+    gScroller.setOrientation(0);
+    gScroller.setUnitIncrement(1);
+    gScroller.setVisibleAmount(1);
+    gScroller.setBounds(new Rectangle(35, 52, 120, 20));
+    gScroller.addAdjustmentListener(this);
+    gText.setFont(new java.awt.Font("Dialog", Font.PLAIN, 10));
+    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));
+    bScroller.setMaximum(256);
+    bScroller.setMinimum(0);
+    bScroller.setOrientation(0);
+    bScroller.setUnitIncrement(1);
+    bScroller.setVisibleAmount(1);
+    bScroller.setBounds(new Rectangle(35, 78, 120, 20));
+    bScroller.addAdjustmentListener(this);
+    bText.setFont(new java.awt.Font("Dialog", Font.PLAIN, 10));
+    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);
+    this.add(rScroller);
+    this.add(bScroller);
+    this.add(label5);
+    this.add(label4);
+    this.add(label1);
+  }
+
+  @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();
+        }
+      }
+    }
+  }
+
+}