after merge
[jalview.git] / src / jalview / appletgui / UserDefinedColours.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4  *\r
5  * This program is free software; you can redistribute it and/or\r
6  * modify it under the terms of the GNU General Public License\r
7  * as published by the Free Software Foundation; either version 2\r
8  * of the License, or (at your option) any later version.\r
9  *\r
10  * This program is distributed in the hope that it will be useful,\r
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13  * GNU General Public License for more details.\r
14  *\r
15  * You should have received a copy of the GNU General Public License\r
16  * along with this program; if not, write to the Free Software\r
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
18  */\r
19 \r
20 package jalview.appletgui;\r
21 \r
22 import java.util.*;\r
23 \r
24 import java.awt.*;\r
25 import java.awt.event.*;\r
26 \r
27 import jalview.datamodel.*;\r
28 import jalview.schemes.*;\r
29 \r
30 public class UserDefinedColours\r
31     extends Panel\r
32 {\r
33 \r
34   AlignmentPanel ap;\r
35   SequenceGroup seqGroup;\r
36   Button selectedButton;\r
37   Vector oldColours = new Vector();\r
38   ColourSchemeI oldColourScheme;\r
39   Frame frame;\r
40 \r
41   int R = 0, G = 0, B = 0;\r
42 \r
43   public ColourSchemeI loadDefaultColours()\r
44   {\r
45     // NOT IMPLEMENTED YET IN APPLET VERSION\r
46     return null;\r
47   }\r
48 \r
49   public UserDefinedColours(AlignmentPanel ap, SequenceGroup sg)\r
50   {\r
51     try {\r
52         jbInit();\r
53     } catch (Exception e) {\r
54         e.printStackTrace();\r
55       }\r
56     frame = new Frame();\r
57     frame.add(this);\r
58     jalview.bin.JalviewLite.addFrame(frame, "User defined colours", 420, 345);\r
59 \r
60     if (sg != null)\r
61     {\r
62       frame.setTitle(frame.getTitle() + " (" + sg.getName() + ")");\r
63     }\r
64 \r
65     this.ap = ap;\r
66     seqGroup = sg;\r
67 \r
68     if (seqGroup != null)\r
69     {\r
70       oldColourScheme = seqGroup.cs;\r
71     }\r
72     else\r
73     {\r
74       oldColourScheme = ap.av.getGlobalColourScheme();\r
75     }\r
76 \r
77     for (int i = 0; i < 20; i++)\r
78     {\r
79       makeButton(ResidueProperties.aa2Triplet.get(ResidueProperties.aa[i]) +\r
80                  "", ResidueProperties.aa[i]);\r
81     }\r
82 \r
83     makeButton("B", "B");\r
84     makeButton("Z", "Z");\r
85     makeButton("X", "X");\r
86     makeButton("Gap", "'.','-',' '");\r
87 \r
88     validate();\r
89 \r
90   }\r
91 \r
92   protected void rText_actionPerformed(ActionEvent e)\r
93   {\r
94     try\r
95     {\r
96       int i = Integer.parseInt(rText.getText());\r
97       rScroller.setValue(i);\r
98       rScroller_adjustmentValueChanged(null);\r
99     }\r
100     catch (NumberFormatException ex)\r
101     {}\r
102   }\r
103 \r
104   protected void gText_actionPerformed(ActionEvent e)\r
105   {\r
106     try\r
107     {\r
108       int i = Integer.parseInt(gText.getText());\r
109       gScroller.setValue(i);\r
110       gScroller_adjustmentValueChanged(null);\r
111     }\r
112     catch (NumberFormatException ex)\r
113     {}\r
114 \r
115   }\r
116 \r
117   protected void bText_actionPerformed(ActionEvent e)\r
118   {\r
119     try\r
120     {\r
121       int i = Integer.parseInt(bText.getText());\r
122       bScroller.setValue(i);\r
123       bScroller_adjustmentValueChanged(null);\r
124     }\r
125     catch (NumberFormatException ex)\r
126     {}\r
127 \r
128   }\r
129 \r
130   protected void rScroller_adjustmentValueChanged(AdjustmentEvent e)\r
131   {\r
132     R = rScroller.getValue();\r
133     rText.setText(R + "");\r
134     colourChanged();\r
135   }\r
136 \r
137   protected void gScroller_adjustmentValueChanged(AdjustmentEvent e)\r
138   {\r
139     G = gScroller.getValue();\r
140     gText.setText(G + "");\r
141     colourChanged();\r
142   }\r
143 \r
144   protected void bScroller_adjustmentValueChanged(AdjustmentEvent e)\r
145   {\r
146     B = bScroller.getValue();\r
147     bText.setText(B + "");\r
148     colourChanged();\r
149   }\r
150 \r
151   public void colourChanged()\r
152   {\r
153     Color col = new Color(R, G, B);\r
154     target.setBackground(col);\r
155     target.repaint();\r
156 \r
157     if (selectedButton != null)\r
158     {\r
159       selectedButton.setBackground(col);\r
160       selectedButton.repaint();\r
161     }\r
162   }\r
163 \r
164   public void colourButtonPressed(MouseEvent e)\r
165   {\r
166     selectedButton = (Button) e.getSource();\r
167     Color col = selectedButton.getBackground();\r
168     R = col.getRed();\r
169     G = col.getGreen();\r
170     B = col.getBlue();\r
171     rScroller.setValue(R);\r
172     gScroller.setValue(G);\r
173     bScroller.setValue(B);\r
174     rText.setText(R + "");\r
175     gText.setText(G + "");\r
176     bText.setText(B + "");\r
177 \r
178     colourChanged();\r
179   }\r
180 \r
181   void makeButton(String label, String aa)\r
182   {\r
183     final Button button = new Button();\r
184     Color col = Color.white;\r
185 \r
186     try\r
187     {\r
188       col = oldColourScheme.findColour(aa, -1);\r
189     }\r
190     catch (Exception ex)\r
191     {}\r
192 \r
193     button.setBackground(col);\r
194     oldColours.addElement(col);\r
195     button.setLabel(label);\r
196     button.setForeground(col.darker().darker().darker());\r
197     button.setFont(new java.awt.Font("Verdana", 1, 10));\r
198     button.addMouseListener(new java.awt.event.MouseAdapter()\r
199     {\r
200       public void mousePressed(MouseEvent e)\r
201       {\r
202         colourButtonPressed(e);\r
203       }\r
204     });\r
205 \r
206     buttonPanel.add(button, null);\r
207   }\r
208 \r
209   protected void okButton_actionPerformed(ActionEvent e)\r
210   {\r
211     applyButton_actionPerformed(null);\r
212     frame.setVisible(false);\r
213   }\r
214 \r
215   protected void applyButton_actionPerformed(ActionEvent e)\r
216   {\r
217 \r
218     Color[] newColours = new Color[24];\r
219     for (int i = 0; i < 24; i++)\r
220     {\r
221       Button button = (Button) buttonPanel.getComponent(i);\r
222       newColours[i] = button.getBackground();\r
223     }\r
224 \r
225     UserColourScheme ucs = new UserColourScheme(newColours);\r
226     ucs.setThreshold(0, ap.av.getIgnoreGapsConsensus());\r
227 \r
228     if (seqGroup != null)\r
229     {\r
230       seqGroup.cs = ucs;\r
231     }\r
232     else\r
233     {\r
234       ap.av.setGlobalColourScheme(ucs);\r
235     }\r
236 \r
237     ap.seqPanel.seqCanvas.img = null;\r
238     ap.repaint();\r
239   }\r
240 \r
241 \r
242   protected void cancelButton_actionPerformed(ActionEvent e)\r
243   {\r
244 \r
245     Color[] newColours = new Color[24];\r
246     for (int i = 0; i < 24; i++)\r
247     {\r
248       newColours[i] = (Color) oldColours.elementAt(i);\r
249       buttonPanel.getComponent(i).setBackground(newColours[i]);\r
250     }\r
251 \r
252     UserColourScheme ucs = new UserColourScheme(newColours);\r
253 \r
254     if (seqGroup != null)\r
255     {\r
256       seqGroup.cs = ucs;\r
257     }\r
258     else\r
259     {\r
260       ap.av.setGlobalColourScheme(ucs);\r
261     }\r
262 \r
263     ap.repaint();\r
264 \r
265     frame.setVisible(false);\r
266   }\r
267 \r
268 \r
269   protected Panel buttonPanel = new Panel();\r
270   protected GridLayout gridLayout = new GridLayout();\r
271   Panel jPanel2 = new Panel();\r
272   protected Button okButton = new Button();\r
273   protected Button applyButton = new Button();\r
274   protected Button cancelButton = new Button();\r
275   protected Scrollbar rScroller = new Scrollbar();\r
276   Label label1 = new Label();\r
277   protected TextField rText = new TextField();\r
278   Label label4 = new Label();\r
279   protected Scrollbar gScroller = new Scrollbar();\r
280   protected TextField gText = new TextField();\r
281   Label label5 = new Label();\r
282   protected Scrollbar bScroller = new Scrollbar();\r
283   protected TextField bText = new TextField();\r
284   protected Panel target = new Panel();\r
285 \r
286   private void jbInit() throws Exception {\r
287       this.setLayout(null);\r
288       buttonPanel.setLayout(gridLayout);\r
289       gridLayout.setColumns(6);\r
290       gridLayout.setRows(4);\r
291       okButton.setFont(new java.awt.Font("Verdana", 0, 11));\r
292       okButton.setLabel("OK");\r
293       okButton.addActionListener(new java.awt.event.ActionListener() {\r
294               public void actionPerformed(ActionEvent e) {\r
295                   okButton_actionPerformed(e);\r
296               }\r
297           });\r
298       applyButton.setFont(new java.awt.Font("Verdana", 0, 11));\r
299       applyButton.setLabel("Apply");\r
300       applyButton.addActionListener(new java.awt.event.ActionListener() {\r
301               public void actionPerformed(ActionEvent e) {\r
302                   applyButton_actionPerformed(e);\r
303               }\r
304           });\r
305       cancelButton.setFont(new java.awt.Font("Verdana", 0, 11));\r
306       cancelButton.setLabel("Cancel");\r
307       cancelButton.addActionListener(new java.awt.event.ActionListener() {\r
308               public void actionPerformed(ActionEvent e) {\r
309                   cancelButton_actionPerformed(e);\r
310               }\r
311           });\r
312       this.setBackground(new Color(212, 208, 223));\r
313       jPanel2.setBounds(new Rectangle(0, 265, 400, 35));\r
314       buttonPanel.setBounds(new Rectangle(0, 123, 400, 142));\r
315       rScroller.setMaximum(256);\r
316       rScroller.setMinimum(0);\r
317       rScroller.setOrientation(0);\r
318       rScroller.setUnitIncrement(1);\r
319   rScroller.setVisibleAmount(1);\r
320   rScroller.setBounds(new Rectangle(36, 27, 119, 19));\r
321   rScroller.addAdjustmentListener(new java.awt.event.AdjustmentListener() {\r
322               public void adjustmentValueChanged(AdjustmentEvent e) {\r
323                   rScroller_adjustmentValueChanged(e);\r
324               }\r
325           });\r
326   label1.setAlignment(Label.RIGHT);\r
327   label1.setText("R");\r
328   label1.setBounds(new Rectangle(19, 30, 16, 15));\r
329   rText.setFont(new java.awt.Font("Dialog", Font.PLAIN, 10));\r
330   rText.setText("0        ");\r
331   rText.setBounds(new Rectangle(156, 27, 53, 19));\r
332   rText.addActionListener(new java.awt.event.ActionListener() {\r
333               public void actionPerformed(ActionEvent e) {\r
334                   rText_actionPerformed(e);\r
335               }\r
336           });\r
337   label4.setAlignment(Label.RIGHT);\r
338   label4.setText("G");\r
339   label4.setBounds(new Rectangle(15, 56, 20, 15));\r
340   gScroller.setMaximum(256);\r
341       gScroller.setMinimum(0);\r
342       gScroller.setOrientation(0);\r
343       gScroller.setUnitIncrement(1);\r
344   gScroller.setVisibleAmount(1);\r
345   gScroller.setBounds(new Rectangle(35, 52, 120, 20));\r
346   gScroller.addAdjustmentListener(new java.awt.event.AdjustmentListener() {\r
347               public void adjustmentValueChanged(AdjustmentEvent e) {\r
348                   gScroller_adjustmentValueChanged(e);\r
349               }\r
350           });\r
351   gText.setFont(new java.awt.Font("Dialog", Font.PLAIN, 10));\r
352   gText.setText("0        ");\r
353   gText.setBounds(new Rectangle(156, 52, 53, 20));\r
354   gText.addActionListener(new java.awt.event.ActionListener() {\r
355               public void actionPerformed(ActionEvent e) {\r
356                   gText_actionPerformed(e);\r
357               }\r
358           });\r
359   label5.setAlignment(Label.RIGHT);\r
360   label5.setText("B");\r
361   label5.setBounds(new Rectangle(14, 82, 20, 15));\r
362   bScroller.setMaximum(256);\r
363       bScroller.setMinimum(0);\r
364       bScroller.setOrientation(0);\r
365       bScroller.setUnitIncrement(1);\r
366   bScroller.setVisibleAmount(1);\r
367   bScroller.setBounds(new Rectangle(35, 78, 120, 20));\r
368   bScroller.addAdjustmentListener(new java.awt.event.AdjustmentListener() {\r
369               public void adjustmentValueChanged(AdjustmentEvent e) {\r
370                   bScroller_adjustmentValueChanged(e);\r
371               }\r
372           });\r
373   bText.setFont(new java.awt.Font("Dialog", Font.PLAIN, 10));\r
374   bText.setText("0        ");\r
375   bText.setBounds(new Rectangle(157, 78, 52, 20));\r
376   bText.addActionListener(new java.awt.event.ActionListener() {\r
377               public void actionPerformed(ActionEvent e) {\r
378                   bText_actionPerformed(e);\r
379               }\r
380           });\r
381   target.setBackground(Color.black);\r
382       target.setBounds(new Rectangle(229, 26, 134, 79));\r
383       this.add(jPanel2, null);\r
384       jPanel2.add(okButton, null);\r
385       jPanel2.add(applyButton, null);\r
386       jPanel2.add(cancelButton, null);\r
387       this.add(buttonPanel, null);\r
388   this.add(target, null);\r
389   this.add(gScroller);\r
390   this.add(rScroller);\r
391   this.add(bScroller);\r
392   this.add(label5);\r
393   this.add(label4);\r
394   this.add(label1);\r
395   this.add(gText);\r
396   this.add(rText);\r
397   this.add(bText);\r
398 }\r
399 \r
400 }\r