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