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