Use paintAlignment
[jalview.git] / src / jalview / gui / SliderPanel.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2007 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 package jalview.gui;\r
20 \r
21 import java.util.*;\r
22 \r
23 import java.awt.event.*;\r
24 import javax.swing.*;\r
25 import javax.swing.event.*;\r
26 \r
27 import jalview.datamodel.*;\r
28 import jalview.jbgui.*;\r
29 import jalview.schemes.*;\r
30 \r
31 /**\r
32  * DOCUMENT ME!\r
33  *\r
34  * @author $author$\r
35  * @version $Revision$\r
36  */\r
37 public class SliderPanel\r
38     extends GSliderPanel\r
39 {\r
40   static JInternalFrame conservationSlider;\r
41   static JInternalFrame PIDSlider;\r
42   AlignmentPanel ap;\r
43   boolean forConservation = true;\r
44   ColourSchemeI cs;\r
45 \r
46   /**\r
47    * Creates a new SliderPanel object.\r
48    *\r
49    * @param ap DOCUMENT ME!\r
50    * @param value DOCUMENT ME!\r
51    * @param forConserve DOCUMENT ME!\r
52    * @param cs DOCUMENT ME!\r
53    */\r
54   public SliderPanel(final AlignmentPanel ap, int value, boolean forConserve,\r
55                      ColourSchemeI cs)\r
56   {\r
57     this.ap = ap;\r
58     this.cs = cs;\r
59     forConservation = forConserve;\r
60     undoButton.setVisible(false);\r
61     applyButton.setVisible(false);\r
62 \r
63     if (forConservation)\r
64     {\r
65       label.setText("Enter value to increase conservation visibility");\r
66       slider.setMinimum(0);\r
67       slider.setMaximum(100);\r
68     }\r
69     else\r
70     {\r
71       label.setText("Enter % identity above which to colour residues");\r
72       slider.setMinimum(0);\r
73       slider.setMaximum(100);\r
74     }\r
75 \r
76     slider.addChangeListener(new ChangeListener()\r
77     {\r
78       public void stateChanged(ChangeEvent evt)\r
79       {\r
80         valueField.setText(slider.getValue() + "");\r
81         valueChanged(slider.getValue());\r
82       }\r
83     });\r
84 \r
85     slider.addMouseListener(new MouseAdapter()\r
86     {\r
87       public void mouseReleased(MouseEvent evt)\r
88       {\r
89          ap.paintAlignment(true);\r
90       }\r
91     });\r
92 \r
93     slider.setValue(value);\r
94     valueField.setText(value + "");\r
95   }\r
96 \r
97   /**\r
98    * DOCUMENT ME!\r
99    *\r
100    * @param ap DOCUMENT ME!\r
101    * @param cs DOCUMENT ME!\r
102    * @param source DOCUMENT ME!\r
103    *\r
104    * @return DOCUMENT ME!\r
105    */\r
106   public static int setConservationSlider(AlignmentPanel ap,\r
107                                           ColourSchemeI cs, String source)\r
108   {\r
109     SliderPanel sp = null;\r
110 \r
111     if (conservationSlider == null)\r
112     {\r
113       sp = new SliderPanel(ap, cs.getConservationInc(), true, cs);\r
114       conservationSlider = new JInternalFrame();\r
115       conservationSlider.setContentPane(sp);\r
116       conservationSlider.setLayer(JLayeredPane.PALETTE_LAYER);\r
117     }\r
118     else\r
119     {\r
120       sp = (SliderPanel) conservationSlider.getContentPane();\r
121       sp.cs = cs;\r
122     }\r
123 \r
124     conservationSlider.setTitle("Conservation Colour Increment  (" +\r
125                                 source + ")");\r
126 \r
127     if (ap.av.alignment.getGroups() != null)\r
128     {\r
129       sp.setAllGroupsCheckEnabled(true);\r
130     }\r
131     else\r
132     {\r
133       sp.setAllGroupsCheckEnabled(false);\r
134     }\r
135 \r
136     return sp.getValue();\r
137   }\r
138 \r
139   /**\r
140    * DOCUMENT ME!\r
141    */\r
142   public static void showConservationSlider()\r
143   {\r
144     try\r
145     {\r
146       PIDSlider.setClosed(true);\r
147       PIDSlider = null;\r
148     }\r
149     catch (Exception ex)\r
150     {\r
151     }\r
152 \r
153     if (!conservationSlider.isVisible())\r
154     {\r
155       Desktop.addInternalFrame(conservationSlider,\r
156                                conservationSlider.getTitle(), 420, 90, false);\r
157       conservationSlider.addInternalFrameListener(new javax.swing.event.\r
158                                                   InternalFrameAdapter()\r
159       {\r
160         public void internalFrameClosed(\r
161             javax.swing.event.InternalFrameEvent e)\r
162         {\r
163           conservationSlider = null;\r
164         }\r
165       });\r
166       conservationSlider.setLayer(JLayeredPane.PALETTE_LAYER);\r
167     }\r
168   }\r
169 \r
170   /**\r
171    * DOCUMENT ME!\r
172    *\r
173    * @param ap DOCUMENT ME!\r
174    * @param cs DOCUMENT ME!\r
175    * @param source DOCUMENT ME!\r
176    *\r
177    * @return DOCUMENT ME!\r
178    */\r
179   public static int setPIDSliderSource(AlignmentPanel ap, ColourSchemeI cs,\r
180                                        String source)\r
181   {\r
182     SliderPanel pid = null;\r
183 \r
184     int threshold = cs.getThreshold();\r
185 \r
186     if (PIDSlider == null)\r
187     {\r
188       pid = new SliderPanel(ap, threshold, false, cs);\r
189       PIDSlider = new JInternalFrame();\r
190       PIDSlider.setContentPane(pid);\r
191       PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);\r
192     }\r
193     else\r
194     {\r
195       pid = (SliderPanel) PIDSlider.getContentPane();\r
196       pid.cs = cs;\r
197     }\r
198 \r
199     PIDSlider.setTitle("Percentage Identity Threshold (" + source + ")");\r
200 \r
201     if (ap.av.alignment.getGroups() != null)\r
202     {\r
203       pid.setAllGroupsCheckEnabled(true);\r
204     }\r
205     else\r
206     {\r
207       pid.setAllGroupsCheckEnabled(false);\r
208     }\r
209 \r
210     return pid.getValue();\r
211   }\r
212 \r
213   /**\r
214    * DOCUMENT ME!\r
215    */\r
216   public static void showPIDSlider()\r
217   {\r
218     try\r
219     {\r
220       conservationSlider.setClosed(true);\r
221       conservationSlider = null;\r
222     }\r
223     catch (Exception ex)\r
224     {\r
225     }\r
226 \r
227     if (!PIDSlider.isVisible())\r
228     {\r
229       Desktop.addInternalFrame(PIDSlider, PIDSlider.getTitle(), 420, 90,\r
230                                false);\r
231       PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);\r
232       PIDSlider.addInternalFrameListener(new javax.swing.event.\r
233                                          InternalFrameAdapter()\r
234       {\r
235         public void internalFrameClosed(\r
236             javax.swing.event.InternalFrameEvent e)\r
237         {\r
238           PIDSlider = null;\r
239         }\r
240       });\r
241       PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);\r
242     }\r
243   }\r
244 \r
245   /**\r
246    * DOCUMENT ME!\r
247    *\r
248    * @param i DOCUMENT ME!\r
249    */\r
250   public void valueChanged(int i)\r
251   {\r
252     if (cs == null)\r
253     {\r
254       return;\r
255     }\r
256 \r
257     ColourSchemeI toChange = null;\r
258     Vector allGroups = null;\r
259     int groupIndex = 0;\r
260 \r
261     if (allGroupsCheck.isSelected())\r
262     {\r
263       allGroups = ap.av.alignment.getGroups();\r
264       groupIndex = allGroups.size() - 1;\r
265     }\r
266     else\r
267     {\r
268       toChange = cs;\r
269     }\r
270 \r
271     while (groupIndex > -1)\r
272     {\r
273       if (allGroups != null)\r
274       {\r
275         toChange = ( (SequenceGroup) allGroups.get(groupIndex)).cs;\r
276 \r
277         if (toChange == null)\r
278         {\r
279           groupIndex--;\r
280 \r
281           continue;\r
282         }\r
283       }\r
284 \r
285       if (forConservation)\r
286       {\r
287         if (toChange.conservationApplied())\r
288         {\r
289           toChange.setConservationInc(i);\r
290         }\r
291       }\r
292       else\r
293       {\r
294         toChange.setThreshold(i, ap.av.getIgnoreGapsConsensus());\r
295       }\r
296 \r
297       groupIndex--;\r
298     }\r
299 \r
300     ap.seqPanel.seqCanvas.repaint();\r
301   }\r
302 \r
303   /**\r
304    * DOCUMENT ME!\r
305    *\r
306    * @param b DOCUMENT ME!\r
307    */\r
308   public void setAllGroupsCheckEnabled(boolean b)\r
309   {\r
310     allGroupsCheck.setEnabled(b);\r
311   }\r
312 \r
313   /**\r
314    * DOCUMENT ME!\r
315    *\r
316    * @param e DOCUMENT ME!\r
317    */\r
318   public void valueField_actionPerformed(ActionEvent e)\r
319   {\r
320     try\r
321     {\r
322       int i = Integer.parseInt(valueField.getText());\r
323       slider.setValue(i);\r
324     }\r
325     catch (NumberFormatException ex)\r
326     {\r
327       valueField.setText(slider.getValue() + "");\r
328     }\r
329   }\r
330 \r
331   /**\r
332    * DOCUMENT ME!\r
333    *\r
334    * @param value DOCUMENT ME!\r
335    */\r
336   public void setValue(int value)\r
337   {\r
338     slider.setValue(value);\r
339   }\r
340 \r
341   /**\r
342    * DOCUMENT ME!\r
343    *\r
344    * @return DOCUMENT ME!\r
345    */\r
346   public int getValue()\r
347   {\r
348     return Integer.parseInt(valueField.getText());\r
349   }\r
350 \r
351   public void slider_mouseReleased(MouseEvent e)\r
352   {\r
353     if (ap.overviewPanel != null)\r
354     {\r
355       ap.overviewPanel.updateOverviewImage();\r
356     }\r
357   }\r
358 \r
359 }\r