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