71bcacaf856b588c404407b843c27c86e15d6fbc
[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   MCview.AppletPDBCanvas pdbcanvas;\r
41 \r
42   int R = 0, G = 0, B = 0;\r
43 \r
44   public ColourSchemeI loadDefaultColours()\r
45   {\r
46     // NOT IMPLEMENTED YET IN APPLET VERSION\r
47     return null;\r
48   }\r
49 \r
50   public UserDefinedColours(AlignmentPanel ap, SequenceGroup sg)\r
51   {\r
52     this.ap = ap;\r
53     seqGroup = sg;\r
54 \r
55     if (seqGroup != null)\r
56     {\r
57       oldColourScheme = seqGroup.cs;\r
58     }\r
59     else\r
60     {\r
61       oldColourScheme = ap.av.getGlobalColourScheme();\r
62     }\r
63 \r
64     init();\r
65   }\r
66 \r
67   public UserDefinedColours(MCview.AppletPDBCanvas pdb)\r
68   {\r
69     this.pdbcanvas = pdb;\r
70     init();\r
71   }\r
72 \r
73   void init()\r
74   {\r
75     try\r
76     {\r
77       jbInit();\r
78     }\r
79     catch (Exception e)\r
80     {\r
81       e.printStackTrace();\r
82     }\r
83     frame = new Frame();\r
84     frame.add(this);\r
85     jalview.bin.JalviewLite.addFrame(frame, "User defined colours", 420, 345);\r
86 \r
87     if (seqGroup != null)\r
88     {\r
89       frame.setTitle(frame.getTitle() + " (" + seqGroup.getName() + ")");\r
90     }\r
91 \r
92     for (int i = 0; i < 20; i++)\r
93     {\r
94       makeButton(ResidueProperties.aa2Triplet.get(ResidueProperties.aa[i]) +\r
95                  "", ResidueProperties.aa[i]);\r
96     }\r
97 \r
98     makeButton("B", "B");\r
99     makeButton("Z", "Z");\r
100     makeButton("X", "X");\r
101     makeButton("Gap", "'.','-',' '");\r
102 \r
103     validate();\r
104   }\r
105   protected void rText_actionPerformed(ActionEvent e)\r
106   {\r
107     try\r
108     {\r
109       int i = Integer.parseInt(rText.getText());\r
110       rScroller.setValue(i);\r
111       rScroller_adjustmentValueChanged(null);\r
112     }\r
113     catch (NumberFormatException ex)\r
114     {}\r
115   }\r
116 \r
117   protected void gText_actionPerformed(ActionEvent e)\r
118   {\r
119     try\r
120     {\r
121       int i = Integer.parseInt(gText.getText());\r
122       gScroller.setValue(i);\r
123       gScroller_adjustmentValueChanged(null);\r
124     }\r
125     catch (NumberFormatException ex)\r
126     {}\r
127 \r
128   }\r
129 \r
130   protected void bText_actionPerformed(ActionEvent e)\r
131   {\r
132     try\r
133     {\r
134       int i = Integer.parseInt(bText.getText());\r
135       bScroller.setValue(i);\r
136       bScroller_adjustmentValueChanged(null);\r
137     }\r
138     catch (NumberFormatException ex)\r
139     {}\r
140 \r
141   }\r
142 \r
143   protected void rScroller_adjustmentValueChanged(AdjustmentEvent e)\r
144   {\r
145     R = rScroller.getValue();\r
146     rText.setText(R + "");\r
147     colourChanged();\r
148   }\r
149 \r
150   protected void gScroller_adjustmentValueChanged(AdjustmentEvent e)\r
151   {\r
152     G = gScroller.getValue();\r
153     gText.setText(G + "");\r
154     colourChanged();\r
155   }\r
156 \r
157   protected void bScroller_adjustmentValueChanged(AdjustmentEvent e)\r
158   {\r
159     B = bScroller.getValue();\r
160     bText.setText(B + "");\r
161     colourChanged();\r
162   }\r
163 \r
164   public void colourChanged()\r
165   {\r
166     Color col = new Color(R, G, B);\r
167     target.setBackground(col);\r
168     target.repaint();\r
169 \r
170     if (selectedButton != null)\r
171     {\r
172       selectedButton.setBackground(col);\r
173       selectedButton.repaint();\r
174     }\r
175   }\r
176 \r
177   public void colourButtonPressed(MouseEvent e)\r
178   {\r
179     selectedButton = (Button) e.getSource();\r
180     Color col = selectedButton.getBackground();\r
181     R = col.getRed();\r
182     G = col.getGreen();\r
183     B = col.getBlue();\r
184     rScroller.setValue(R);\r
185     gScroller.setValue(G);\r
186     bScroller.setValue(B);\r
187     rText.setText(R + "");\r
188     gText.setText(G + "");\r
189     bText.setText(B + "");\r
190 \r
191     colourChanged();\r
192   }\r
193 \r
194   void makeButton(String label, String aa)\r
195   {\r
196     final Button button = new Button();\r
197     Color col = Color.white;\r
198 \r
199     try\r
200     {\r
201       col = oldColourScheme.findColour(aa, -1);\r
202     }\r
203     catch (Exception ex)\r
204     {}\r
205 \r
206     button.setBackground(col);\r
207     oldColours.addElement(col);\r
208     button.setLabel(label);\r
209     button.setForeground(col.darker().darker().darker());\r
210     button.setFont(new java.awt.Font("Verdana", 1, 10));\r
211     button.addMouseListener(new java.awt.event.MouseAdapter()\r
212     {\r
213       public void mousePressed(MouseEvent e)\r
214       {\r
215         colourButtonPressed(e);\r
216       }\r
217     });\r
218 \r
219     buttonPanel.add(button, null);\r
220   }\r
221 \r
222   protected void okButton_actionPerformed(ActionEvent e)\r
223   {\r
224     applyButton_actionPerformed(null);\r
225     frame.setVisible(false);\r
226   }\r
227 \r
228   protected void applyButton_actionPerformed(ActionEvent e)\r
229   {\r
230     Color[] newColours = new Color[24];\r
231     for (int i = 0; i < 24; i++)\r
232     {\r
233       Button button = (Button) buttonPanel.getComponent(i);\r
234       newColours[i] = button.getBackground();\r
235     }\r
236 \r
237     UserColourScheme ucs = new UserColourScheme(newColours);\r
238     if(ap!=null)\r
239       ucs.setThreshold(0, ap.av.getIgnoreGapsConsensus());\r
240 \r
241     if(ap!=null)\r
242     {\r
243       if (seqGroup != null)\r
244       {\r
245         seqGroup.cs = ucs;\r
246       }\r
247       else\r
248       {\r
249         ap.av.setGlobalColourScheme(ucs);\r
250       }\r
251       ap.seqPanel.seqCanvas.img = null;\r
252       ap.repaint();\r
253     }\r
254     else if(pdbcanvas!=null)\r
255     {\r
256       pdbcanvas.pdb.setColours(ucs);\r
257       pdbcanvas.updateSeqColours();\r
258     }\r
259   }\r
260 \r
261 \r
262   protected void cancelButton_actionPerformed(ActionEvent e)\r
263   {\r
264 \r
265     Color[] newColours = new Color[24];\r
266     for (int i = 0; i < 24; i++)\r
267     {\r
268       newColours[i] = (Color) oldColours.elementAt(i);\r
269       buttonPanel.getComponent(i).setBackground(newColours[i]);\r
270     }\r
271 \r
272     UserColourScheme ucs = new UserColourScheme(newColours);\r
273 \r
274    if(ap!=null)\r
275     {\r
276       if (seqGroup != null)\r
277       {\r
278         seqGroup.cs = ucs;\r
279       }\r
280       else\r
281       {\r
282         ap.av.setGlobalColourScheme(ucs);\r
283       }\r
284       ap.repaint();\r
285     }\r
286     else if(pdbcanvas!=null)\r
287     {\r
288       pdbcanvas.pdb.setColours(ucs);\r
289     }\r
290 \r
291     frame.setVisible(false);\r
292   }\r
293 \r
294 \r
295   protected Panel buttonPanel = new Panel();\r
296   protected GridLayout gridLayout = new GridLayout();\r
297   Panel jPanel2 = new Panel();\r
298   protected Button okButton = new Button();\r
299   protected Button applyButton = new Button();\r
300   protected Button cancelButton = new Button();\r
301   protected Scrollbar rScroller = new Scrollbar();\r
302   Label label1 = new Label();\r
303   protected TextField rText = new TextField();\r
304   Label label4 = new Label();\r
305   protected Scrollbar gScroller = new Scrollbar();\r
306   protected TextField gText = new TextField();\r
307   Label label5 = new Label();\r
308   protected Scrollbar bScroller = new Scrollbar();\r
309   protected TextField bText = new TextField();\r
310   protected Panel target = new Panel();\r
311 \r
312   private void jbInit() throws Exception {\r
313       this.setLayout(null);\r
314       buttonPanel.setLayout(gridLayout);\r
315       gridLayout.setColumns(6);\r
316       gridLayout.setRows(4);\r
317       okButton.setFont(new java.awt.Font("Verdana", 0, 11));\r
318       okButton.setLabel("OK");\r
319       okButton.addActionListener(new java.awt.event.ActionListener() {\r
320               public void actionPerformed(ActionEvent e) {\r
321                   okButton_actionPerformed(e);\r
322               }\r
323           });\r
324       applyButton.setFont(new java.awt.Font("Verdana", 0, 11));\r
325       applyButton.setLabel("Apply");\r
326       applyButton.addActionListener(new java.awt.event.ActionListener() {\r
327               public void actionPerformed(ActionEvent e) {\r
328                   applyButton_actionPerformed(e);\r
329               }\r
330           });\r
331       cancelButton.setFont(new java.awt.Font("Verdana", 0, 11));\r
332       cancelButton.setLabel("Cancel");\r
333       cancelButton.addActionListener(new java.awt.event.ActionListener() {\r
334               public void actionPerformed(ActionEvent e) {\r
335                   cancelButton_actionPerformed(e);\r
336               }\r
337           });\r
338       this.setBackground(new Color(212, 208, 223));\r
339       jPanel2.setBounds(new Rectangle(0, 265, 400, 35));\r
340       buttonPanel.setBounds(new Rectangle(0, 123, 400, 142));\r
341       rScroller.setMaximum(256);\r
342       rScroller.setMinimum(0);\r
343       rScroller.setOrientation(0);\r
344       rScroller.setUnitIncrement(1);\r
345   rScroller.setVisibleAmount(1);\r
346   rScroller.setBounds(new Rectangle(36, 27, 119, 19));\r
347   rScroller.addAdjustmentListener(new java.awt.event.AdjustmentListener() {\r
348               public void adjustmentValueChanged(AdjustmentEvent e) {\r
349                   rScroller_adjustmentValueChanged(e);\r
350               }\r
351           });\r
352   label1.setAlignment(Label.RIGHT);\r
353   label1.setText("R");\r
354   label1.setBounds(new Rectangle(19, 30, 16, 15));\r
355   rText.setFont(new java.awt.Font("Dialog", Font.PLAIN, 10));\r
356   rText.setText("0        ");\r
357   rText.setBounds(new Rectangle(156, 27, 53, 19));\r
358   rText.addActionListener(new java.awt.event.ActionListener() {\r
359               public void actionPerformed(ActionEvent e) {\r
360                   rText_actionPerformed(e);\r
361               }\r
362           });\r
363   label4.setAlignment(Label.RIGHT);\r
364   label4.setText("G");\r
365   label4.setBounds(new Rectangle(15, 56, 20, 15));\r
366   gScroller.setMaximum(256);\r
367       gScroller.setMinimum(0);\r
368       gScroller.setOrientation(0);\r
369       gScroller.setUnitIncrement(1);\r
370   gScroller.setVisibleAmount(1);\r
371   gScroller.setBounds(new Rectangle(35, 52, 120, 20));\r
372   gScroller.addAdjustmentListener(new java.awt.event.AdjustmentListener() {\r
373               public void adjustmentValueChanged(AdjustmentEvent e) {\r
374                   gScroller_adjustmentValueChanged(e);\r
375               }\r
376           });\r
377   gText.setFont(new java.awt.Font("Dialog", Font.PLAIN, 10));\r
378   gText.setText("0        ");\r
379   gText.setBounds(new Rectangle(156, 52, 53, 20));\r
380   gText.addActionListener(new java.awt.event.ActionListener() {\r
381               public void actionPerformed(ActionEvent e) {\r
382                   gText_actionPerformed(e);\r
383               }\r
384           });\r
385   label5.setAlignment(Label.RIGHT);\r
386   label5.setText("B");\r
387   label5.setBounds(new Rectangle(14, 82, 20, 15));\r
388   bScroller.setMaximum(256);\r
389       bScroller.setMinimum(0);\r
390       bScroller.setOrientation(0);\r
391       bScroller.setUnitIncrement(1);\r
392   bScroller.setVisibleAmount(1);\r
393   bScroller.setBounds(new Rectangle(35, 78, 120, 20));\r
394   bScroller.addAdjustmentListener(new java.awt.event.AdjustmentListener() {\r
395               public void adjustmentValueChanged(AdjustmentEvent e) {\r
396                   bScroller_adjustmentValueChanged(e);\r
397               }\r
398           });\r
399   bText.setFont(new java.awt.Font("Dialog", Font.PLAIN, 10));\r
400   bText.setText("0        ");\r
401   bText.setBounds(new Rectangle(157, 78, 52, 20));\r
402   bText.addActionListener(new java.awt.event.ActionListener() {\r
403               public void actionPerformed(ActionEvent e) {\r
404                   bText_actionPerformed(e);\r
405               }\r
406           });\r
407   target.setBackground(Color.black);\r
408       target.setBounds(new Rectangle(229, 26, 134, 79));\r
409       this.add(jPanel2, null);\r
410       jPanel2.add(okButton, null);\r
411       jPanel2.add(applyButton, null);\r
412       jPanel2.add(cancelButton, null);\r
413       this.add(buttonPanel, null);\r
414   this.add(target, null);\r
415   this.add(gScroller);\r
416   this.add(rScroller);\r
417   this.add(bScroller);\r
418   this.add(label5);\r
419   this.add(label4);\r
420   this.add(label1);\r
421   this.add(gText);\r
422   this.add(rText);\r
423   this.add(bText);\r
424 }\r
425 \r
426 }\r