Remove start end for now??
[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(100);\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     /**\r
94      * DOCUMENT ME!\r
95      *\r
96      * @param ap DOCUMENT ME!\r
97      * @param cs DOCUMENT ME!\r
98      * @param source DOCUMENT ME!\r
99      *\r
100      * @return DOCUMENT ME!\r
101      */\r
102     public static int setConservationSlider(AlignmentPanel ap,\r
103         ColourSchemeI cs, String source)\r
104     {\r
105         SliderPanel sp = null;\r
106 \r
107         if (conservationSlider == null)\r
108         {\r
109             sp = new SliderPanel(ap, cs.getConservationInc(), 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 = cs.getThreshold();\r
180 \r
181         if (PIDSlider == null)\r
182         {\r
183             pid = new SliderPanel(ap, threshold, false, cs);\r
184             PIDSlider = new JInternalFrame();\r
185             PIDSlider.setContentPane(pid);\r
186             PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);\r
187         }\r
188         else\r
189         {\r
190             pid = (SliderPanel) PIDSlider.getContentPane();\r
191             pid.cs = cs;\r
192         }\r
193 \r
194         PIDSlider.setTitle("Percentage Identity Threshold (" + source + ")");\r
195 \r
196         if (ap.av.alignment.getGroups() != null)\r
197         {\r
198             pid.setAllGroupsCheckEnabled(true);\r
199         }\r
200         else\r
201         {\r
202             pid.setAllGroupsCheckEnabled(false);\r
203         }\r
204 \r
205         return pid.getValue();\r
206     }\r
207 \r
208     /**\r
209      * DOCUMENT ME!\r
210      */\r
211     public static void showPIDSlider()\r
212     {\r
213         try\r
214         {\r
215             conservationSlider.setClosed(true);\r
216             conservationSlider = null;\r
217         }\r
218         catch (Exception ex)\r
219         {\r
220         }\r
221 \r
222         if (!PIDSlider.isVisible())\r
223         {\r
224             Desktop.addInternalFrame(PIDSlider, PIDSlider.getTitle(), 420, 90,\r
225                 false);\r
226             PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);\r
227             PIDSlider.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()\r
228                 {\r
229                     public void internalFrameClosed(\r
230                         javax.swing.event.InternalFrameEvent e)\r
231                     {\r
232                         PIDSlider = null;\r
233                     }\r
234                 });\r
235             PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);\r
236         }\r
237     }\r
238 \r
239     /**\r
240      * DOCUMENT ME!\r
241      *\r
242      * @param i DOCUMENT ME!\r
243      */\r
244     public void valueChanged(int i)\r
245     {\r
246         if (cs == null)\r
247         {\r
248             return;\r
249         }\r
250 \r
251         ColourSchemeI toChange = null;\r
252         Vector allGroups = null;\r
253         int groupIndex = 0;\r
254 \r
255         if (allGroupsCheck.isSelected())\r
256         {\r
257             allGroups = ap.av.alignment.getGroups();\r
258             groupIndex = allGroups.size() - 1;\r
259         }\r
260         else\r
261         {\r
262             toChange = cs;\r
263         }\r
264 \r
265 \r
266         while (groupIndex > -1)\r
267         {\r
268             if (allGroups != null)\r
269             {\r
270                 toChange = ((SequenceGroup) allGroups.get(groupIndex)).cs;\r
271 \r
272                 if (toChange == null)\r
273                 {\r
274                     groupIndex--;\r
275 \r
276                     continue;\r
277                 }\r
278             }\r
279 \r
280             if (forConservation)\r
281             {\r
282                 if (toChange.conservationApplied())\r
283                 {\r
284                     toChange.setConservationInc(i);\r
285                 }\r
286             }\r
287             else\r
288             {\r
289                 toChange.setThreshold(i, ap.av.getIgnoreGapsConsensus());\r
290             }\r
291 \r
292             groupIndex--;\r
293         }\r
294 \r
295         ap.seqPanel.seqCanvas.repaint();\r
296     }\r
297 \r
298     /**\r
299      * DOCUMENT ME!\r
300      *\r
301      * @param b DOCUMENT ME!\r
302      */\r
303     public void setAllGroupsCheckEnabled(boolean b)\r
304     {\r
305         allGroupsCheck.setEnabled(b);\r
306     }\r
307 \r
308     /**\r
309      * DOCUMENT ME!\r
310      *\r
311      * @param e DOCUMENT ME!\r
312      */\r
313     public void valueField_actionPerformed(ActionEvent e)\r
314     {\r
315         try\r
316         {\r
317             int i = Integer.parseInt(valueField.getText());\r
318             slider.setValue(i);\r
319         }\r
320         catch (NumberFormatException ex)\r
321         {\r
322             valueField.setText(slider.getValue() + "");\r
323         }\r
324     }\r
325 \r
326     /**\r
327      * DOCUMENT ME!\r
328      *\r
329      * @param value DOCUMENT ME!\r
330      */\r
331     public void setValue(int value)\r
332     {\r
333         slider.setValue(value);\r
334     }\r
335 \r
336     /**\r
337      * DOCUMENT ME!\r
338      *\r
339      * @return DOCUMENT ME!\r
340      */\r
341     public int getValue()\r
342     {\r
343         return Integer.parseInt(valueField.getText());\r
344     }\r
345 }\r