1a62fffee304c1f46c14ec316d1cbbacf6caffc4
[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 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 public class SliderPanel\r
32     extends GSliderPanel\r
33 {\r
34   static JInternalFrame conservationSlider;\r
35   static JInternalFrame PIDSlider;\r
36   AlignmentPanel ap;\r
37   boolean forConservation = true;\r
38   ColourSchemeI cs;\r
39 \r
40   public SliderPanel(AlignmentPanel ap, int value, boolean forConserve,\r
41                      ColourSchemeI cs)\r
42   {\r
43     this.ap = ap;\r
44     this.cs = cs;\r
45     forConservation = forConserve;\r
46     undoButton.setVisible(false);\r
47     applyButton.setVisible(false);\r
48 \r
49     if (forConservation)\r
50     {\r
51       label.setText("Enter value to increase conservation visibility");\r
52       slider.setMinimum(0);\r
53       slider.setMaximum(50);\r
54     }\r
55     else\r
56     {\r
57       label.setText("Enter % identity above which to colour residues");\r
58       slider.setMinimum(0);\r
59       slider.setMaximum(100);\r
60     }\r
61 \r
62     slider.addChangeListener(new ChangeListener()\r
63     {\r
64       public void stateChanged(ChangeEvent evt)\r
65       {\r
66         valueField.setText(slider.getValue() + "");\r
67         valueChanged(slider.getValue());\r
68       }\r
69     });\r
70 \r
71     slider.setValue(value);\r
72     valueField.setText(value + "");\r
73   }\r
74 \r
75   public static int setConservationSlider(AlignmentPanel ap,\r
76                                           ColourSchemeI cs, String source)\r
77   {\r
78     SliderPanel sp = null;\r
79     ConservationColourScheme ccs = (ConservationColourScheme) cs;\r
80 \r
81     if (conservationSlider == null)\r
82     {\r
83       sp = new SliderPanel(ap, ccs.inc, true, cs);\r
84       conservationSlider = new JInternalFrame();\r
85       conservationSlider.setContentPane(sp);\r
86       conservationSlider.setLayer(JLayeredPane.PALETTE_LAYER);\r
87     }\r
88     else\r
89     {\r
90       sp = (SliderPanel) conservationSlider.getContentPane();\r
91       sp.cs = cs;\r
92     }\r
93 \r
94     conservationSlider.setTitle("Conservation Colour Increment  (" +\r
95                                 source + ")");\r
96 \r
97     if (ap.av.alignment.getGroups() != null)\r
98     {\r
99       sp.setAllGroupsCheckEnabled(true);\r
100     }\r
101     else\r
102     {\r
103       sp.setAllGroupsCheckEnabled(false);\r
104     }\r
105 \r
106     return sp.getValue();\r
107   }\r
108 \r
109   public static void showConservationSlider()\r
110   {\r
111     try\r
112     {\r
113       PIDSlider.setClosed(true);\r
114       PIDSlider = null;\r
115     }\r
116     catch (Exception ex)\r
117     {\r
118     }\r
119 \r
120     if (!conservationSlider.isVisible())\r
121     {\r
122       Desktop.addInternalFrame(conservationSlider,\r
123                                conservationSlider.getTitle(), 420, 90, false);\r
124       conservationSlider.addInternalFrameListener(new javax.swing.event.\r
125                                                   InternalFrameAdapter()\r
126       {\r
127         public void internalFrameClosed(\r
128             javax.swing.event.InternalFrameEvent e)\r
129         {\r
130           conservationSlider = null;\r
131         }\r
132       });\r
133       conservationSlider.setLayer(JLayeredPane.PALETTE_LAYER);\r
134     }\r
135   }\r
136 \r
137   public static int setPIDSliderSource(AlignmentPanel ap, ColourSchemeI cs,\r
138                                        String source)\r
139   {\r
140     SliderPanel pid = null;\r
141 \r
142     int threshold = 50;\r
143 \r
144     if (cs instanceof ResidueColourScheme)\r
145     {\r
146       threshold = ( ( (ResidueColourScheme) cs).getThreshold());\r
147     }\r
148     else if (cs instanceof ScoreColourScheme)\r
149     {\r
150       threshold = ( ( (ScoreColourScheme) cs).getThreshold());\r
151     }\r
152 \r
153     if (PIDSlider == null)\r
154     {\r
155       pid = new SliderPanel(ap, threshold, false, cs);\r
156       PIDSlider = new JInternalFrame();\r
157       PIDSlider.setContentPane(pid);\r
158       PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);\r
159     }\r
160     else\r
161     {\r
162       pid = (SliderPanel) PIDSlider.getContentPane();\r
163       pid.cs = cs;\r
164     }\r
165 \r
166     PIDSlider.setTitle("Percentage Identity Threshold (" + source + ")");\r
167 \r
168     if (ap.av.alignment.getGroups() != null)\r
169     {\r
170       pid.setAllGroupsCheckEnabled(true);\r
171     }\r
172     else\r
173     {\r
174       pid.setAllGroupsCheckEnabled(false);\r
175     }\r
176 \r
177     return pid.getValue();\r
178   }\r
179 \r
180   public static void showPIDSlider()\r
181   {\r
182     try\r
183     {\r
184       conservationSlider.setClosed(true);\r
185       conservationSlider = null;\r
186     }\r
187     catch (Exception ex)\r
188     {\r
189     }\r
190 \r
191     if (!PIDSlider.isVisible())\r
192     {\r
193       Desktop.addInternalFrame(PIDSlider, PIDSlider.getTitle(), 420, 90,\r
194                                false);\r
195       PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);\r
196       PIDSlider.addInternalFrameListener(new javax.swing.event.\r
197                                          InternalFrameAdapter()\r
198       {\r
199         public void internalFrameClosed(\r
200             javax.swing.event.InternalFrameEvent e)\r
201         {\r
202           PIDSlider = null;\r
203         }\r
204       });\r
205       PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);\r
206     }\r
207   }\r
208 \r
209   public void valueChanged(int i)\r
210   {\r
211     if (cs == null)\r
212     {\r
213       return;\r
214     }\r
215 \r
216     ColourSchemeI toChange = null;\r
217     Vector allGroups = null;\r
218     int groupIndex = 0;\r
219 \r
220     if (allGroupsCheck.isSelected())\r
221     {\r
222       allGroups = ap.av.alignment.getGroups();\r
223       groupIndex = allGroups.size() - 1;\r
224     }\r
225     else\r
226     {\r
227       toChange = cs;\r
228     }\r
229 \r
230     while (groupIndex > -1)\r
231     {\r
232       if (allGroups != null)\r
233       {\r
234         toChange = ( (SequenceGroup) allGroups.get(groupIndex)).cs;\r
235         if(toChange==null)\r
236         {\r
237           groupIndex--;\r
238           continue;\r
239         }\r
240       }\r
241 \r
242       if (forConservation)\r
243       {\r
244         if (toChange instanceof ConservationColourScheme)\r
245         {\r
246           ( (ConservationColourScheme) toChange).inc = i;\r
247         }\r
248       }\r
249       else\r
250       {\r
251         ( (ResidueColourScheme) toChange).setThreshold(i);\r
252       }\r
253 \r
254       groupIndex--;\r
255     }\r
256 \r
257     ap.seqPanel.seqCanvas.repaint();\r
258   }\r
259 \r
260   public void setAllGroupsCheckEnabled(boolean b)\r
261   {\r
262     allGroupsCheck.setEnabled(b);\r
263   }\r
264 \r
265   public void valueField_actionPerformed(ActionEvent e)\r
266   {\r
267     try\r
268     {\r
269       int i = Integer.parseInt(valueField.getText());\r
270       slider.setValue(i);\r
271     }\r
272     catch (Exception ex)\r
273     {\r
274       valueField.setText(slider.getValue() + "");\r
275     }\r
276   }\r
277 \r
278   public void setValue(int value)\r
279   {\r
280     slider.setValue(value);\r
281   }\r
282 \r
283   public int getValue()\r
284   {\r
285     return Integer.parseInt(valueField.getText());\r
286   }\r
287 }\r