-/*\r
- * Jalview - A Sequence Alignment Editor and Viewer\r
- * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program; if not, write to the Free Software\r
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA\r
- */\r
-\r
-package jalview.appletgui;\r
-\r
-import java.util.*;\r
-\r
-import java.awt.*;\r
-import java.awt.event.*;\r
-\r
-import jalview.datamodel.*;\r
-import jalview.schemes.*;\r
-\r
-public class UserDefinedColours\r
- extends Panel implements ActionListener, AdjustmentListener\r
-{\r
-\r
- AlignmentPanel ap;\r
- SequenceGroup seqGroup;\r
- Button selectedButton;\r
- Vector oldColours = new Vector();\r
- ColourSchemeI oldColourScheme;\r
- Frame frame;\r
- MCview.AppletPDBCanvas pdbcanvas;\r
- AppletJmol jmol;\r
-\r
- Dialog dialog;\r
- Object caller;\r
- String originalLabel;\r
- Color originalColour;\r
-\r
- int R = 0, G = 0, B = 0;\r
-\r
- public ColourSchemeI loadDefaultColours()\r
- {\r
- // NOT IMPLEMENTED YET IN APPLET VERSION\r
- return null;\r
- }\r
-\r
- public UserDefinedColours(AlignmentPanel ap, SequenceGroup sg)\r
- {\r
- this.ap = ap;\r
- seqGroup = sg;\r
-\r
- if (seqGroup != null)\r
- {\r
- oldColourScheme = seqGroup.cs;\r
- }\r
- else\r
- {\r
- oldColourScheme = ap.av.getGlobalColourScheme();\r
- }\r
-\r
- init();\r
- }\r
-\r
- public UserDefinedColours(MCview.AppletPDBCanvas pdb)\r
- {\r
- this.pdbcanvas = pdb;\r
- init();\r
- }\r
-\r
- public UserDefinedColours(AppletJmol jmol)\r
- {\r
- this.jmol = jmol;\r
- init();\r
- }\r
-\r
- public UserDefinedColours(FeatureRenderer fr, Frame alignframe)\r
- {\r
- caller = fr;\r
- originalColour = fr.colourPanel.getBackground();\r
- originalLabel = "Feature Colour";\r
- setForDialog("Select Feature Colour", alignframe);\r
- setTargetColour(fr.colourPanel.getBackground());\r
- dialog.setVisible(true);\r
- }\r
-\r
- public UserDefinedColours(Component caller,\r
- Color col1,\r
- Frame alignframe)\r
- {\r
- this.caller = caller;\r
- originalColour = col1;\r
- originalLabel = "Select Colour";\r
- setForDialog("Select Colour", alignframe);\r
- setTargetColour(col1);\r
- dialog.setVisible(true);\r
- }\r
-\r
-\r
- public UserDefinedColours(Object caller,\r
- String label,\r
- Color colour)\r
- {\r
- this.caller = caller;\r
- originalColour = colour;\r
- originalLabel = label;\r
- init();\r
- remove(buttonPanel);\r
-\r
- setTargetColour(colour);\r
-\r
- okcancelPanel.setBounds(new Rectangle(0, 113, 400, 35));\r
- frame.setTitle("User Defined Colours - " + label);\r
- frame.setSize(420, 200);\r
- }\r
-\r
- void setForDialog(String title, Frame alignframe)\r
- {\r
- init();\r
- frame.setVisible(false);\r
- remove(buttonPanel);\r
- dialog = new Dialog(alignframe, title, true);\r
-\r
- dialog.add(this);\r
- this.setSize(400,123);\r
- okcancelPanel.setBounds(new Rectangle(0, 123, 400, 35));\r
- int height = 160 + alignframe.getInsets().top + getInsets().bottom;\r
- int width = 400;\r
-\r
- dialog.setBounds(alignframe.getBounds().x\r
- + (alignframe.getSize().width - width) / 2,\r
- alignframe.getBounds().y\r
- + (alignframe.getSize().height - height) / 2,\r
- width, height);\r
-\r
- }\r
-\r
- public void actionPerformed(ActionEvent evt)\r
- {\r
- if (evt.getSource() == okButton)\r
- {\r
- okButton_actionPerformed();\r
- }\r
- else if (evt.getSource() == applyButton)\r
- {\r
- applyButton_actionPerformed();\r
- }\r
- else if (evt.getSource() == cancelButton)\r
- {\r
- cancelButton_actionPerformed();\r
- }\r
- else if (evt.getSource() == rText)\r
- {\r
- rText_actionPerformed();\r
- }\r
- else if (evt.getSource() == gText)\r
- {\r
- gText_actionPerformed();\r
- }\r
- else if (evt.getSource() == bText)\r
- {\r
- bText_actionPerformed();\r
- }\r
- }\r
-\r
- public void adjustmentValueChanged(AdjustmentEvent evt)\r
- {\r
- if (evt.getSource() == rScroller)\r
- {\r
- rScroller_adjustmentValueChanged();\r
- }\r
- else if (evt.getSource() == gScroller)\r
- {\r
- gScroller_adjustmentValueChanged();\r
- }\r
- else if (evt.getSource() == bScroller)\r
- {\r
- bScroller_adjustmentValueChanged();\r
- }\r
- }\r
-\r
- void init()\r
- {\r
- try\r
- {\r
- jbInit();\r
- }\r
- catch (Exception e)\r
- {\r
- e.printStackTrace();\r
- }\r
- frame = new Frame();\r
- frame.add(this);\r
- jalview.bin.JalviewLite.addFrame(frame, "User defined colours", 420, 345);\r
-\r
- if (seqGroup != null)\r
- {\r
- frame.setTitle(frame.getTitle() + " (" + seqGroup.getName() + ")");\r
- }\r
-\r
- for (int i = 0; i < 20; i++)\r
- {\r
- makeButton(ResidueProperties.aa2Triplet.get(ResidueProperties.aa[i]) +\r
- "", ResidueProperties.aa[i]);\r
- }\r
-\r
- makeButton("B", "B");\r
- makeButton("Z", "Z");\r
- makeButton("X", "X");\r
- makeButton("Gap", "'.','-',' '");\r
-\r
- validate();\r
- }\r
-\r
- protected void rText_actionPerformed()\r
- {\r
- try\r
- {\r
- int i = Integer.parseInt(rText.getText());\r
- rScroller.setValue(i);\r
- rScroller_adjustmentValueChanged();\r
- }\r
- catch (NumberFormatException ex)\r
- {}\r
- }\r
-\r
- protected void gText_actionPerformed()\r
- {\r
- try\r
- {\r
- int i = Integer.parseInt(gText.getText());\r
- gScroller.setValue(i);\r
- gScroller_adjustmentValueChanged();\r
- }\r
- catch (NumberFormatException ex)\r
- {}\r
-\r
- }\r
-\r
- protected void bText_actionPerformed()\r
- {\r
- try\r
- {\r
- int i = Integer.parseInt(bText.getText());\r
- bScroller.setValue(i);\r
- bScroller_adjustmentValueChanged();\r
- }\r
- catch (NumberFormatException ex)\r
- {}\r
-\r
- }\r
-\r
- protected void rScroller_adjustmentValueChanged()\r
- {\r
- R = rScroller.getValue();\r
- rText.setText(R + "");\r
- colourChanged();\r
- }\r
-\r
- protected void gScroller_adjustmentValueChanged()\r
- {\r
- G = gScroller.getValue();\r
- gText.setText(G + "");\r
- colourChanged();\r
- }\r
-\r
- protected void bScroller_adjustmentValueChanged()\r
- {\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
- target.repaint();\r
-\r
- if (selectedButton != null)\r
- {\r
- selectedButton.setBackground(col);\r
- selectedButton.repaint();\r
- }\r
- }\r
-\r
- void setTargetColour(Color col)\r
- {\r
- R = col.getRed();\r
- G = col.getGreen();\r
- B = col.getBlue();\r
-\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
- colourChanged();\r
- }\r
-\r
- public void colourButtonPressed(MouseEvent e)\r
- {\r
- selectedButton = (Button) e.getSource();\r
- setTargetColour(selectedButton.getBackground());\r
- }\r
-\r
- void makeButton(String label, String aa)\r
- {\r
- final Button button = new Button();\r
- Color col = Color.white;\r
-\r
- try\r
- {\r
- col = oldColourScheme.findColour(aa.charAt(0), -1);\r
- }\r
- catch (Exception ex)\r
- {}\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 mousePressed(MouseEvent e)\r
- {\r
- colourButtonPressed(e);\r
- }\r
- });\r
-\r
- buttonPanel.add(button, null);\r
- }\r
-\r
- protected void okButton_actionPerformed()\r
- {\r
- applyButton_actionPerformed();\r
- if (dialog != null)\r
- dialog.setVisible(false);\r
-\r
- frame.setVisible(false);\r
- }\r
-\r
- public Color getColor()\r
- {\r
- return new Color(R, G, B);\r
- }\r
-\r
- protected void applyButton_actionPerformed()\r
- {\r
- if (caller != null)\r
- {\r
- if (caller instanceof FeatureSettings)\r
- {\r
- ( (FeatureSettings) caller).setUserColour\r
- (originalLabel, getColor());\r
- }\r
- else if (caller instanceof AnnotationColourChooser)\r
- {\r
- if (originalLabel.equals("Min Colour"))\r
- {\r
- ( (AnnotationColourChooser) caller).minColour_actionPerformed\r
- (getColor());\r
- }\r
- else\r
- {\r
- ( (AnnotationColourChooser) caller).maxColour_actionPerformed\r
- (getColor());\r
- }\r
- }\r
- else if(caller instanceof FeatureRenderer)\r
- {\r
- ((FeatureRenderer)caller).colourPanel.setBackground(getColor());\r
- }\r
-\r
- return;\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(newColours);\r
- if (ap != null)\r
- {\r
- ucs.setThreshold(0, ap.av.getIgnoreGapsConsensus());\r
- }\r
-\r
- if (ap != null)\r
- {\r
- if (seqGroup != null)\r
- {\r
- seqGroup.cs = ucs;\r
- }\r
- else\r
- {\r
- ap.av.setGlobalColourScheme(ucs);\r
- }\r
- ap.seqPanel.seqCanvas.img = null;\r
- ap.paintAlignment(true);\r
- }\r
- else if(jmol!=null)\r
- {\r
- jmol.setJalviewColourScheme(ucs);\r
- }\r
- else if (pdbcanvas != null)\r
- {\r
- pdbcanvas.setColours(ucs);\r
- }\r
- }\r
-\r
- protected void cancelButton_actionPerformed()\r
- {\r
- if (caller != null)\r
- {\r
- if (caller instanceof FeatureSettings)\r
- {\r
- ( (FeatureSettings) caller).setUserColour\r
- (originalLabel, originalColour);\r
- }\r
- else if (caller instanceof AnnotationColourChooser)\r
- {\r
- if (originalLabel.equals("Min Colour"))\r
- {\r
- ( (AnnotationColourChooser) caller).minColour_actionPerformed\r
- (originalColour);\r
- }\r
- else\r
- {\r
- ( (AnnotationColourChooser) caller).maxColour_actionPerformed\r
- (originalColour);\r
- }\r
- }\r
- else if (caller instanceof FeatureRenderer)\r
- {\r
- ( (FeatureRenderer) caller).colourPanel.setBackground(originalColour);\r
-\r
- }\r
-\r
- if(dialog!=null)\r
- dialog.setVisible(false);\r
-\r
- frame.setVisible(false);\r
- return;\r
- }\r
-\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
- UserColourScheme ucs = new UserColourScheme(newColours);\r
-\r
- if (ap != null)\r
- {\r
- if (seqGroup != null)\r
- {\r
- seqGroup.cs = ucs;\r
- }\r
- else\r
- {\r
- ap.av.setGlobalColourScheme(ucs);\r
- }\r
- ap.paintAlignment(true);\r
- }\r
- else if(jmol !=null)\r
- {\r
- jmol.setJalviewColourScheme(ucs);\r
- }\r
- else if (pdbcanvas != null)\r
- {\r
- pdbcanvas.pdb.setColours(ucs);\r
- }\r
-\r
- frame.setVisible(false);\r
- }\r
-\r
- protected Panel buttonPanel = new Panel();\r
- protected GridLayout gridLayout = new GridLayout();\r
- Panel okcancelPanel = new Panel();\r
- protected Button okButton = new Button();\r
- protected Button applyButton = new Button();\r
- protected Button cancelButton = new Button();\r
- protected Scrollbar rScroller = new Scrollbar();\r
- Label label1 = new Label();\r
- protected TextField rText = new TextField();\r
- Label label4 = new Label();\r
- protected Scrollbar gScroller = new Scrollbar();\r
- protected TextField gText = new TextField();\r
- Label label5 = new Label();\r
- protected Scrollbar bScroller = new Scrollbar();\r
- protected TextField bText = new TextField();\r
- protected Panel target = new Panel();\r
-\r
- private void jbInit()\r
- throws Exception\r
- {\r
- this.setLayout(null);\r
- buttonPanel.setLayout(gridLayout);\r
- gridLayout.setColumns(6);\r
- gridLayout.setRows(4);\r
- okButton.setFont(new java.awt.Font("Verdana", 0, 11));\r
- okButton.setLabel("OK");\r
- okButton.addActionListener(this);\r
- applyButton.setFont(new java.awt.Font("Verdana", 0, 11));\r
- applyButton.setLabel("Apply");\r
- applyButton.addActionListener(this);\r
- cancelButton.setFont(new java.awt.Font("Verdana", 0, 11));\r
- cancelButton.setLabel("Cancel");\r
- cancelButton.addActionListener(this);\r
- this.setBackground(new Color(212, 208, 223));\r
- okcancelPanel.setBounds(new Rectangle(0, 265, 400, 35));\r
- buttonPanel.setBounds(new Rectangle(0, 123, 400, 142));\r
- rScroller.setMaximum(256);\r
- rScroller.setMinimum(0);\r
- rScroller.setOrientation(0);\r
- rScroller.setUnitIncrement(1);\r
- rScroller.setVisibleAmount(1);\r
- rScroller.setBounds(new Rectangle(36, 27, 119, 19));\r
- rScroller.addAdjustmentListener(this);\r
- label1.setAlignment(Label.RIGHT);\r
- label1.setText("R");\r
- label1.setBounds(new Rectangle(19, 30, 16, 15));\r
- rText.setFont(new java.awt.Font("Dialog", Font.PLAIN, 10));\r
- rText.setText("0 ");\r
- rText.setBounds(new Rectangle(156, 27, 53, 19));\r
- rText.addActionListener(this);\r
- label4.setAlignment(Label.RIGHT);\r
- label4.setText("G");\r
- label4.setBounds(new Rectangle(15, 56, 20, 15));\r
- gScroller.setMaximum(256);\r
- gScroller.setMinimum(0);\r
- gScroller.setOrientation(0);\r
- gScroller.setUnitIncrement(1);\r
- gScroller.setVisibleAmount(1);\r
- gScroller.setBounds(new Rectangle(35, 52, 120, 20));\r
- gScroller.addAdjustmentListener(this);\r
- gText.setFont(new java.awt.Font("Dialog", Font.PLAIN, 10));\r
- gText.setText("0 ");\r
- gText.setBounds(new Rectangle(156, 52, 53, 20));\r
- gText.addActionListener(this);\r
- label5.setAlignment(Label.RIGHT);\r
- label5.setText("B");\r
- label5.setBounds(new Rectangle(14, 82, 20, 15));\r
- bScroller.setMaximum(256);\r
- bScroller.setMinimum(0);\r
- bScroller.setOrientation(0);\r
- bScroller.setUnitIncrement(1);\r
- bScroller.setVisibleAmount(1);\r
- bScroller.setBounds(new Rectangle(35, 78, 120, 20));\r
- bScroller.addAdjustmentListener(this);\r
- bText.setFont(new java.awt.Font("Dialog", Font.PLAIN, 10));\r
- bText.setText("0 ");\r
- bText.setBounds(new Rectangle(157, 78, 52, 20));\r
- bText.addActionListener(this);\r
- target.setBackground(Color.black);\r
- target.setBounds(new Rectangle(229, 26, 134, 79));\r
- this.add(okcancelPanel, null);\r
- okcancelPanel.add(okButton, null);\r
- okcancelPanel.add(applyButton, null);\r
- okcancelPanel.add(cancelButton, null);\r
- this.add(buttonPanel, null);\r
- this.add(target, null);\r
- this.add(gScroller);\r
- this.add(rScroller);\r
- this.add(bScroller);\r
- this.add(label5);\r
- this.add(label4);\r
- this.add(label1);\r
- this.add(gText);\r
- this.add(rText);\r
- this.add(bText);\r
- }\r
-\r
-}\r
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ 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.analysis.AAFrequency;
+import jalview.api.FeatureColourI;
+import jalview.datamodel.SequenceGroup;
+import jalview.renderer.ResidueShader;
+import jalview.schemes.Blosum62ColourScheme;
+import jalview.schemes.ColourSchemeI;
+import jalview.schemes.FeatureColour;
+import jalview.schemes.PIDColourScheme;
+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<Color> oldColours = new Vector<Color>();
+
+ ColourSchemeI oldColourScheme;
+
+ Frame frame;
+
+ MCview.AppletPDBCanvas pdbcanvas;
+
+ AppletJmol jmol;
+
+ Dialog dialog;
+
+ Object caller;
+
+ String originalLabel;
+
+ FeatureColourI 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.getColourScheme();
+ }
+ 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 = new FeatureColour(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 col
+ * - original colour
+ * @param alignframe
+ * - the parent Frame for the dialog
+ * @param title
+ * - window title
+ */
+ public UserDefinedColours(Component caller, Color col, Frame alignframe,
+ String title)
+ {
+ this.caller = caller;
+ originalColour = new FeatureColour(col);
+ originalLabel = title;
+ setForDialog(title, alignframe);
+ setTargetColour(col);
+ dialog.setVisible(true);
+ }
+
+ /**
+ * feature colour chooser
+ *
+ * @param caller
+ * @param label
+ * @param colour
+ */
+ public UserDefinedColours(Object caller, String label, Color colour)
+ {
+ this(caller, label, new FeatureColour(colour), colour);
+ }
+
+ /**
+ * feature colour chooser when changing style to single color
+ *
+ * @param me
+ * @param type
+ * @param graduatedColor
+ */
+ public UserDefinedColours(FeatureSettings me, String type,
+ FeatureColourI graduatedColor)
+ {
+ this(me, type, graduatedColor, graduatedColor.getMaxColour());
+ }
+
+ private UserDefinedColours(Object caller, String label,
+ FeatureColourI 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);
+
+ }
+
+ @Override
+ 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();
+ }
+ }
+
+ @Override
+ 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 && oldColourScheme.isSimple())
+ {
+ col = oldColourScheme.findColour(aa.charAt(0), 0, null, null, 0f);
+ }
+ 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()
+ {
+ @Override
+ 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,
+ new FeatureColour(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(new FeatureColour(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 = new ResidueShader(ucs);
+ seqGroup.getGroupColourScheme().setThreshold(0,
+ ap.av.isIgnoreGapsConsensus());
+ }
+ else
+ {
+ ap.av.setGlobalColourScheme(ucs);
+ ap.av.getResidueShading().setThreshold(0,
+ ap.av.isIgnoreGapsConsensus());
+ }
+ 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(originalColour.getColour());
+ }
+ else
+ {
+ ((AnnotationColourChooser) caller)
+ .maxColour_actionPerformed(originalColour.getColour());
+ }
+ }
+ else if (caller instanceof FeatureRenderer)
+ {
+ ((FeatureRenderer) caller).colourPanel.updateColor(originalColour);
+
+ }
+
+ else if (caller instanceof FeatureColourChooser)
+ {
+ if (originalLabel.indexOf("inimum") > -1)
+ {
+ ((FeatureColourChooser) caller)
+ .minColour_actionPerformed(originalColour.getColour());
+ }
+ else
+ {
+ ((FeatureColourChooser) caller)
+ .maxColour_actionPerformed(originalColour.getColour());
+ }
+ }
+ if (dialog != null)
+ {
+ dialog.setVisible(false);
+ }
+
+ frame.setVisible(false);
+ return;
+ }
+
+ if (ap != null)
+ {
+ if (seqGroup != null)
+ {
+ seqGroup.cs = new ResidueShader(oldColourScheme);
+ if (oldColourScheme instanceof PIDColourScheme
+ || oldColourScheme instanceof Blosum62ColourScheme)
+ {
+ seqGroup.cs.setConsensus(AAFrequency.calculate(
+ seqGroup.getSequences(ap.av.getHiddenRepSequences()), 0,
+ ap.av.getAlignment().getWidth()));
+ }
+ }
+ else
+ {
+ ap.av.setGlobalColourScheme(oldColourScheme);
+ }
+ ap.paintAlignment(true);
+ }
+
+ 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();
+ }
+ }
+ }
+ }
+
+}