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