added help and documentation for annotation editing.
[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         ConservationColourScheme ccs = (ConservationColourScheme) cs;\r
106 \r
107         if (conservationSlider == null)\r
108         {\r
109             sp = new SliderPanel(ap, ccs.inc, true, cs);\r
110             conservationSlider = new JInternalFrame();\r
111             conservationSlider.setContentPane(sp);\r
112             conservationSlider.setLayer(JLayeredPane.PALETTE_LAYER);\r
113         }\r
114         else\r
115         {\r
116             sp = (SliderPanel) conservationSlider.getContentPane();\r
117             sp.cs = cs;\r
118         }\r
119 \r
120         conservationSlider.setTitle("Conservation Colour Increment  (" +\r
121             source + ")");\r
122 \r
123         if (ap.av.alignment.getGroups() != null)\r
124         {\r
125             sp.setAllGroupsCheckEnabled(true);\r
126         }\r
127         else\r
128         {\r
129             sp.setAllGroupsCheckEnabled(false);\r
130         }\r
131 \r
132         return sp.getValue();\r
133     }\r
134 \r
135     /**\r
136      * DOCUMENT ME!\r
137      */\r
138     public static void showConservationSlider()\r
139     {\r
140         try\r
141         {\r
142             PIDSlider.setClosed(true);\r
143             PIDSlider = null;\r
144         }\r
145         catch (Exception ex)\r
146         {\r
147         }\r
148 \r
149         if (!conservationSlider.isVisible())\r
150         {\r
151             Desktop.addInternalFrame(conservationSlider,\r
152                 conservationSlider.getTitle(), 420, 90, false);\r
153             conservationSlider.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()\r
154                 {\r
155                     public void internalFrameClosed(\r
156                         javax.swing.event.InternalFrameEvent e)\r
157                     {\r
158                         conservationSlider = null;\r
159                     }\r
160                 });\r
161             conservationSlider.setLayer(JLayeredPane.PALETTE_LAYER);\r
162         }\r
163     }\r
164 \r
165     /**\r
166      * DOCUMENT ME!\r
167      *\r
168      * @param ap DOCUMENT ME!\r
169      * @param cs DOCUMENT ME!\r
170      * @param source DOCUMENT ME!\r
171      *\r
172      * @return DOCUMENT ME!\r
173      */\r
174     public static int setPIDSliderSource(AlignmentPanel ap, ColourSchemeI cs,\r
175         String source)\r
176     {\r
177         SliderPanel pid = null;\r
178 \r
179         int threshold = 50;\r
180 \r
181         if (cs instanceof ResidueColourScheme)\r
182         {\r
183             threshold = (((ResidueColourScheme) cs).getThreshold());\r
184         }\r
185         else if (cs instanceof ScoreColourScheme)\r
186         {\r
187             threshold = (((ScoreColourScheme) cs).getThreshold());\r
188         }\r
189 \r
190         if (PIDSlider == null)\r
191         {\r
192             pid = new SliderPanel(ap, threshold, false, cs);\r
193             PIDSlider = new JInternalFrame();\r
194             PIDSlider.setContentPane(pid);\r
195             PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);\r
196         }\r
197         else\r
198         {\r
199             pid = (SliderPanel) PIDSlider.getContentPane();\r
200             pid.cs = cs;\r
201         }\r
202 \r
203         PIDSlider.setTitle("Percentage Identity Threshold (" + source + ")");\r
204 \r
205         if (ap.av.alignment.getGroups() != null)\r
206         {\r
207             pid.setAllGroupsCheckEnabled(true);\r
208         }\r
209         else\r
210         {\r
211             pid.setAllGroupsCheckEnabled(false);\r
212         }\r
213 \r
214         return pid.getValue();\r
215     }\r
216 \r
217     /**\r
218      * DOCUMENT ME!\r
219      */\r
220     public static void showPIDSlider()\r
221     {\r
222         try\r
223         {\r
224             conservationSlider.setClosed(true);\r
225             conservationSlider = null;\r
226         }\r
227         catch (Exception ex)\r
228         {\r
229         }\r
230 \r
231         if (!PIDSlider.isVisible())\r
232         {\r
233             Desktop.addInternalFrame(PIDSlider, PIDSlider.getTitle(), 420, 90,\r
234                 false);\r
235             PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);\r
236             PIDSlider.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()\r
237                 {\r
238                     public void internalFrameClosed(\r
239                         javax.swing.event.InternalFrameEvent e)\r
240                     {\r
241                         PIDSlider = null;\r
242                     }\r
243                 });\r
244             PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);\r
245         }\r
246     }\r
247 \r
248     /**\r
249      * DOCUMENT ME!\r
250      *\r
251      * @param i DOCUMENT ME!\r
252      */\r
253     public void valueChanged(int i)\r
254     {\r
255         if (cs == null)\r
256         {\r
257             return;\r
258         }\r
259 \r
260         ColourSchemeI toChange = null;\r
261         Vector allGroups = null;\r
262         int groupIndex = 0;\r
263 \r
264         if (allGroupsCheck.isSelected())\r
265         {\r
266             allGroups = ap.av.alignment.getGroups();\r
267             groupIndex = allGroups.size() - 1;\r
268         }\r
269         else\r
270         {\r
271             toChange = cs;\r
272         }\r
273 \r
274         while (groupIndex > -1)\r
275         {\r
276             if (allGroups != null)\r
277             {\r
278                 toChange = ((SequenceGroup) allGroups.get(groupIndex)).cs;\r
279 \r
280                 if (toChange == null)\r
281                 {\r
282                     groupIndex--;\r
283 \r
284                     continue;\r
285                 }\r
286             }\r
287 \r
288             if (forConservation)\r
289             {\r
290                 if (toChange instanceof ConservationColourScheme)\r
291                 {\r
292                     ((ConservationColourScheme) toChange).inc = i;\r
293                 }\r
294             }\r
295             else\r
296             {\r
297                 ((ResidueColourScheme) toChange).setThreshold(i);\r
298             }\r
299 \r
300             groupIndex--;\r
301         }\r
302 \r
303         ap.seqPanel.seqCanvas.repaint();\r
304     }\r
305 \r
306     /**\r
307      * DOCUMENT ME!\r
308      *\r
309      * @param b DOCUMENT ME!\r
310      */\r
311     public void setAllGroupsCheckEnabled(boolean b)\r
312     {\r
313         allGroupsCheck.setEnabled(b);\r
314     }\r
315 \r
316     /**\r
317      * DOCUMENT ME!\r
318      *\r
319      * @param e DOCUMENT ME!\r
320      */\r
321     public void valueField_actionPerformed(ActionEvent e)\r
322     {\r
323         try\r
324         {\r
325             int i = Integer.parseInt(valueField.getText());\r
326             slider.setValue(i);\r
327         }\r
328         catch (Exception ex)\r
329         {\r
330             valueField.setText(slider.getValue() + "");\r
331         }\r
332     }\r
333 \r
334     /**\r
335      * DOCUMENT ME!\r
336      *\r
337      * @param value DOCUMENT ME!\r
338      */\r
339     public void setValue(int value)\r
340     {\r
341         slider.setValue(value);\r
342     }\r
343 \r
344     /**\r
345      * DOCUMENT ME!\r
346      *\r
347      * @return DOCUMENT ME!\r
348      */\r
349     public int getValue()\r
350     {\r
351         return Integer.parseInt(valueField.getText());\r
352     }\r
353 }\r