a53e9dd613151de2acd56978ceb0012f9ee6758b
[jalview.git] / src / jalview / appletgui / 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.appletgui;\r
21 \r
22 import java.util.*;\r
23 \r
24 import java.awt.*;\r
25 import java.awt.event.*;\r
26 \r
27 import jalview.datamodel.*;\r
28 import jalview.schemes.*;\r
29 \r
30 public class SliderPanel extends Panel\r
31 {\r
32   AlignmentPanel ap;\r
33   boolean forConservation = true;\r
34   ColourSchemeI cs;\r
35 \r
36   static Frame conservationSlider;\r
37   static Frame PIDSlider;\r
38 \r
39   public static int setConservationSlider(AlignmentPanel ap, ColourSchemeI cs,\r
40                                           String source)\r
41   {\r
42     SliderPanel sp = null;\r
43 \r
44     if (conservationSlider == null)\r
45     {\r
46       sp = new SliderPanel(ap, cs.getConservationInc(), true, cs);\r
47       conservationSlider = new Frame();\r
48       conservationSlider.add(sp);\r
49     }\r
50     else\r
51     {\r
52       sp = (SliderPanel) conservationSlider.getComponent(0);\r
53       sp.cs = cs;\r
54     }\r
55 \r
56     conservationSlider.setTitle("Conservation Colour Increment  (" + source +\r
57                                 ")");\r
58     if (ap.av.alignment.getGroups() != null)\r
59     {\r
60       sp.setAllGroupsCheckEnabled(true);\r
61     }\r
62     else\r
63     {\r
64       sp.setAllGroupsCheckEnabled(false);\r
65     }\r
66 \r
67     return sp.getValue();\r
68   }\r
69 \r
70   public static void showConservationSlider()\r
71   {\r
72     try\r
73     {\r
74       PIDSlider.setVisible(false);\r
75       PIDSlider = null;\r
76     }\r
77     catch (Exception ex)\r
78     {}\r
79 \r
80     if (!conservationSlider.isVisible())\r
81     {\r
82       jalview.bin.JalviewLite.addFrame(conservationSlider,\r
83                                        conservationSlider.getTitle(), 420, 100);\r
84       conservationSlider.addWindowListener(new WindowAdapter()\r
85       {\r
86         public void windowClosing(WindowEvent e)\r
87         {\r
88           conservationSlider = null;\r
89         }\r
90       });\r
91 \r
92     }\r
93 \r
94   }\r
95 \r
96   public static int setPIDSliderSource(AlignmentPanel ap, ColourSchemeI cs,\r
97                                        String source)\r
98   {\r
99     SliderPanel pid = null;\r
100     if (PIDSlider == null)\r
101     {\r
102       pid = new SliderPanel(ap, 50, false, cs);\r
103       PIDSlider = new Frame();\r
104       PIDSlider.add(pid);\r
105     }\r
106     else\r
107     {\r
108       pid = (SliderPanel) PIDSlider.getComponent(0);\r
109       pid.cs = cs;\r
110     }\r
111     PIDSlider.setTitle("Percentage Identity Threshold (" + source + ")");\r
112 \r
113     if (ap.av.alignment.getGroups() != null)\r
114     {\r
115       pid.setAllGroupsCheckEnabled(true);\r
116     }\r
117     else\r
118     {\r
119       pid.setAllGroupsCheckEnabled(false);\r
120     }\r
121 \r
122     return pid.getValue();\r
123 \r
124   }\r
125 \r
126   public static void showPIDSlider()\r
127   {\r
128     try\r
129     {\r
130       conservationSlider.setVisible(false);\r
131       conservationSlider = null;\r
132     }\r
133     catch (Exception ex)\r
134     {}\r
135 \r
136     if (!PIDSlider.isVisible())\r
137     {\r
138       jalview.bin.JalviewLite.addFrame(PIDSlider, PIDSlider.getTitle(), 420,\r
139                                        100);\r
140       PIDSlider.addWindowListener(new WindowAdapter()\r
141       {\r
142         public void windowClosing(WindowEvent e)\r
143         {\r
144           PIDSlider = null;\r
145         }\r
146       });\r
147     }\r
148 \r
149   }\r
150 \r
151   public SliderPanel(AlignmentPanel ap, int value, boolean forConserve,\r
152                      ColourSchemeI cs)\r
153   {\r
154     try {\r
155         jbInit();\r
156     } catch (Exception e) {\r
157         e.printStackTrace();\r
158       }\r
159     this.ap = ap;\r
160     this.cs = cs;\r
161     forConservation = forConserve;\r
162     undoButton.setVisible(false);\r
163     applyButton.setVisible(false);\r
164     if (forConservation)\r
165     {\r
166       label.setText("Modify conservation visibility");\r
167       slider.setMinimum(0);\r
168       slider.setMaximum(50 + slider.getVisibleAmount());\r
169       slider.setUnitIncrement(1);\r
170     }\r
171     else\r
172     {\r
173       label.setText("Colour residues above % occurence");\r
174       slider.setMinimum(0);\r
175       slider.setMaximum(100 + slider.getVisibleAmount());\r
176       slider.setBlockIncrement(1);\r
177     }\r
178 \r
179     slider.addAdjustmentListener(new AdjustmentListener()\r
180     {\r
181       public void adjustmentValueChanged(AdjustmentEvent evt)\r
182       {\r
183         valueField.setText(slider.getValue() + "");\r
184         valueChanged(slider.getValue());\r
185       }\r
186     });\r
187 \r
188     slider.setValue(value);\r
189     valueField.setText(value + "");\r
190   }\r
191 \r
192   public void valueChanged(int i)\r
193   {\r
194     if (cs == null)\r
195     {\r
196       return;\r
197     }\r
198 \r
199     ColourSchemeI toChange = null;\r
200     Vector allGroups = null;\r
201     int groupIndex = 0;\r
202 \r
203     if (allGroupsCheck.getState())\r
204     {\r
205       allGroups = ap.av.alignment.getGroups();\r
206       groupIndex = allGroups.size() - 1;\r
207     }\r
208     else\r
209     {\r
210       toChange = cs;\r
211     }\r
212 \r
213     while (groupIndex > -1)\r
214     {\r
215       if (allGroups != null)\r
216       {\r
217         toChange = ( (SequenceGroup) allGroups.elementAt(groupIndex)).cs;\r
218       }\r
219 \r
220       if (forConservation)\r
221       {\r
222         toChange.setConservationInc(i);\r
223       }\r
224       else\r
225       {\r
226         toChange.setThreshold(i, ap.av.getIgnoreGapsConsensus());\r
227       }\r
228 \r
229       groupIndex--;\r
230     }\r
231 \r
232     ap.seqPanel.seqCanvas.repaint();\r
233 \r
234   }\r
235 \r
236   public void setAllGroupsCheckEnabled(boolean b)\r
237   {\r
238     allGroupsCheck.setEnabled(b);\r
239   }\r
240 \r
241   public void valueField_actionPerformed(ActionEvent e)\r
242   {\r
243     try\r
244     {\r
245       int i = Integer.parseInt(valueField.getText());\r
246       slider.setValue(i);\r
247     }\r
248     catch (Exception ex)\r
249     {\r
250       valueField.setText(slider.getValue() + "");\r
251     }\r
252   }\r
253 \r
254   public void setValue(int value)\r
255   {\r
256     slider.setValue(value);\r
257   }\r
258 \r
259   public int getValue()\r
260   {\r
261     return Integer.parseInt(valueField.getText());\r
262   }\r
263 \r
264   // this is used for conservation colours, PID colours and redundancy threshold\r
265   protected Scrollbar slider = new Scrollbar();\r
266   protected TextField valueField = new TextField();\r
267   protected Label label = new Label();\r
268   Panel jPanel1 = new Panel();\r
269   Panel jPanel2 = new Panel();\r
270   protected Button applyButton = new Button();\r
271   protected Button undoButton = new Button();\r
272   FlowLayout flowLayout1 = new FlowLayout();\r
273   protected Checkbox allGroupsCheck = new Checkbox();\r
274   BorderLayout borderLayout1 = new BorderLayout();\r
275   BorderLayout borderLayout2 = new BorderLayout();\r
276   FlowLayout flowLayout2 = new FlowLayout();\r
277 \r
278   private void jbInit() throws Exception {\r
279       this.setLayout(borderLayout2);\r
280 \r
281       // slider.setMajorTickSpacing(10);\r
282       //  slider.setMinorTickSpacing(1);\r
283       //  slider.setPaintTicks(true);\r
284       slider.setBackground(Color.white);\r
285       slider.setFont(new java.awt.Font("Verdana", 0, 11));\r
286       slider.setOrientation(0);\r
287       valueField.setFont(new java.awt.Font("Verdana", 0, 11));\r
288       valueField.setText("      ");\r
289       valueField.addActionListener(new java.awt.event.ActionListener() {\r
290               public void actionPerformed(ActionEvent e) {\r
291                   valueField_actionPerformed(e);\r
292               }\r
293           });\r
294       label.setFont(new java.awt.Font("Verdana", 0, 11));\r
295       label.setText("set this label text");\r
296       jPanel1.setLayout(borderLayout1);\r
297       jPanel2.setLayout(flowLayout1);\r
298       applyButton.setFont(new java.awt.Font("Verdana", 0, 11));\r
299       applyButton.setLabel("Apply");\r
300       applyButton.addActionListener(new java.awt.event.ActionListener() {\r
301               public void actionPerformed(ActionEvent e) {\r
302                   applyButton_actionPerformed(e);\r
303               }\r
304           });\r
305       undoButton.setEnabled(false);\r
306       undoButton.setFont(new java.awt.Font("Verdana", 0, 11));\r
307       undoButton.setLabel("Undo");\r
308       undoButton.addActionListener(new java.awt.event.ActionListener() {\r
309               public void actionPerformed(ActionEvent e) {\r
310                   undoButton_actionPerformed(e);\r
311               }\r
312           });\r
313       allGroupsCheck.setEnabled(false);\r
314       allGroupsCheck.setFont(new java.awt.Font("Verdana", 0, 11));\r
315       allGroupsCheck.setLabel("Apply threshold to all groups");\r
316       allGroupsCheck.setName("Apply to all Groups");\r
317       this.setBackground(Color.white);\r
318       this.setForeground(Color.black);\r
319       jPanel2.add(label, null);\r
320       jPanel2.add(applyButton, null);\r
321       jPanel2.add(undoButton, null);\r
322       jPanel2.add(allGroupsCheck);\r
323       jPanel1.add(valueField, java.awt.BorderLayout.EAST);\r
324       jPanel1.add(slider, java.awt.BorderLayout.CENTER);\r
325       this.add(jPanel1, java.awt.BorderLayout.SOUTH);\r
326       this.add(jPanel2, java.awt.BorderLayout.CENTER);\r
327   }\r
328 \r
329   protected void applyButton_actionPerformed(ActionEvent e)\r
330   {\r
331   }\r
332 \r
333   protected void undoButton_actionPerformed(ActionEvent e)\r
334   {\r
335   }\r
336 }\r