57125c655e212cbd06583d4b5500f5f087913113
[jalview.git] / src / jalview / gui / SliderPanel.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer
3  * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
18  */
19 package jalview.gui;
20
21 import jalview.datamodel.*;
22
23 import jalview.jbgui.*;
24
25 import jalview.schemes.*;
26
27 import java.awt.event.*;
28
29 import java.util.*;
30
31 import javax.swing.*;
32 import javax.swing.event.*;
33
34
35 /**
36  * DOCUMENT ME!
37  *
38  * @author $author$
39  * @version $Revision$
40  */
41 public class SliderPanel extends GSliderPanel
42 {
43     static JInternalFrame conservationSlider;
44     static JInternalFrame PIDSlider;
45     AlignmentPanel ap;
46     boolean forConservation = true;
47     ColourSchemeI cs;
48
49     /**
50      * Creates a new SliderPanel object.
51      *
52      * @param ap DOCUMENT ME!
53      * @param value DOCUMENT ME!
54      * @param forConserve DOCUMENT ME!
55      * @param cs DOCUMENT ME!
56      */
57     public SliderPanel(AlignmentPanel ap, int value, boolean forConserve,
58         ColourSchemeI cs)
59     {
60         this.ap = ap;
61         this.cs = cs;
62         forConservation = forConserve;
63         undoButton.setVisible(false);
64         applyButton.setVisible(false);
65
66         if (forConservation)
67         {
68             label.setText("Enter value to increase conservation visibility");
69             slider.setMinimum(0);
70             slider.setMaximum(100);
71         }
72         else
73         {
74             label.setText("Enter % identity above which to colour residues");
75             slider.setMinimum(0);
76             slider.setMaximum(100);
77         }
78
79         slider.addChangeListener(new ChangeListener()
80             {
81                 public void stateChanged(ChangeEvent evt)
82                 {
83                     valueField.setText(slider.getValue() + "");
84                     valueChanged(slider.getValue());
85                 }
86             });
87
88         slider.setValue(value);
89         valueField.setText(value + "");
90     }
91
92
93     /**
94      * DOCUMENT ME!
95      *
96      * @param ap DOCUMENT ME!
97      * @param cs DOCUMENT ME!
98      * @param source DOCUMENT ME!
99      *
100      * @return DOCUMENT ME!
101      */
102     public static int setConservationSlider(AlignmentPanel ap,
103         ColourSchemeI cs, String source)
104     {
105         SliderPanel sp = null;
106
107         if (conservationSlider == null)
108         {
109             sp = new SliderPanel(ap, cs.getConservationInc(), true, cs);
110             conservationSlider = new JInternalFrame();
111             conservationSlider.setContentPane(sp);
112             conservationSlider.setLayer(JLayeredPane.PALETTE_LAYER);
113         }
114         else
115         {
116             sp = (SliderPanel) conservationSlider.getContentPane();
117             sp.cs = cs;
118         }
119
120         conservationSlider.setTitle("Conservation Colour Increment  (" +
121             source + ")");
122
123         if (ap.av.alignment.getGroups() != null)
124         {
125             sp.setAllGroupsCheckEnabled(true);
126         }
127         else
128         {
129             sp.setAllGroupsCheckEnabled(false);
130         }
131
132         return sp.getValue();
133     }
134
135     /**
136      * DOCUMENT ME!
137      */
138     public static void showConservationSlider()
139     {
140         try
141         {
142             PIDSlider.setClosed(true);
143             PIDSlider = null;
144         }
145         catch (Exception ex)
146         {
147         }
148
149         if (!conservationSlider.isVisible())
150         {
151             Desktop.addInternalFrame(conservationSlider,
152                 conservationSlider.getTitle(), 420, 90, false);
153             conservationSlider.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()
154                 {
155                     public void internalFrameClosed(
156                         javax.swing.event.InternalFrameEvent e)
157                     {
158                         conservationSlider = null;
159                     }
160                 });
161             conservationSlider.setLayer(JLayeredPane.PALETTE_LAYER);
162         }
163     }
164
165     /**
166      * DOCUMENT ME!
167      *
168      * @param ap DOCUMENT ME!
169      * @param cs DOCUMENT ME!
170      * @param source DOCUMENT ME!
171      *
172      * @return DOCUMENT ME!
173      */
174     public static int setPIDSliderSource(AlignmentPanel ap, ColourSchemeI cs,
175         String source)
176     {
177         SliderPanel pid = null;
178
179         int threshold = cs.getThreshold();
180
181         if (PIDSlider == null)
182         {
183             pid = new SliderPanel(ap, threshold, false, cs);
184             PIDSlider = new JInternalFrame();
185             PIDSlider.setContentPane(pid);
186             PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);
187         }
188         else
189         {
190             pid = (SliderPanel) PIDSlider.getContentPane();
191             pid.cs = cs;
192         }
193
194         PIDSlider.setTitle("Percentage Identity Threshold (" + source + ")");
195
196         if (ap.av.alignment.getGroups() != null)
197         {
198             pid.setAllGroupsCheckEnabled(true);
199         }
200         else
201         {
202             pid.setAllGroupsCheckEnabled(false);
203         }
204
205         return pid.getValue();
206     }
207
208     /**
209      * DOCUMENT ME!
210      */
211     public static void showPIDSlider()
212     {
213         try
214         {
215             conservationSlider.setClosed(true);
216             conservationSlider = null;
217         }
218         catch (Exception ex)
219         {
220         }
221
222         if (!PIDSlider.isVisible())
223         {
224             Desktop.addInternalFrame(PIDSlider, PIDSlider.getTitle(), 420, 90,
225                 false);
226             PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);
227             PIDSlider.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()
228                 {
229                     public void internalFrameClosed(
230                         javax.swing.event.InternalFrameEvent e)
231                     {
232                         PIDSlider = null;
233                     }
234                 });
235             PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);
236         }
237     }
238
239     /**
240      * DOCUMENT ME!
241      *
242      * @param i DOCUMENT ME!
243      */
244     public void valueChanged(int i)
245     {
246         if (cs == null)
247         {
248             return;
249         }
250
251         ColourSchemeI toChange = null;
252         Vector allGroups = null;
253         int groupIndex = 0;
254
255         if (allGroupsCheck.isSelected())
256         {
257             allGroups = ap.av.alignment.getGroups();
258             groupIndex = allGroups.size() - 1;
259         }
260         else
261         {
262             toChange = cs;
263         }
264
265
266         while (groupIndex > -1)
267         {
268             if (allGroups != null)
269             {
270                 toChange = ((SequenceGroup) allGroups.get(groupIndex)).cs;
271
272                 if (toChange == null)
273                 {
274                     groupIndex--;
275
276                     continue;
277                 }
278             }
279
280             if (forConservation)
281             {
282                 if (toChange.conservationApplied())
283                 {
284                     toChange.setConservationInc(i);
285                 }
286             }
287             else
288             {
289                 toChange.setThreshold(i, ap.av.getIgnoreGapsConsensus());
290             }
291
292             groupIndex--;
293         }
294
295         ap.seqPanel.seqCanvas.repaint();
296     }
297
298     /**
299      * DOCUMENT ME!
300      *
301      * @param b DOCUMENT ME!
302      */
303     public void setAllGroupsCheckEnabled(boolean b)
304     {
305         allGroupsCheck.setEnabled(b);
306     }
307
308     /**
309      * DOCUMENT ME!
310      *
311      * @param e DOCUMENT ME!
312      */
313     public void valueField_actionPerformed(ActionEvent e)
314     {
315         try
316         {
317             int i = Integer.parseInt(valueField.getText());
318             slider.setValue(i);
319         }
320         catch (NumberFormatException ex)
321         {
322             valueField.setText(slider.getValue() + "");
323         }
324     }
325
326     /**
327      * DOCUMENT ME!
328      *
329      * @param value DOCUMENT ME!
330      */
331     public void setValue(int value)
332     {
333         slider.setValue(value);
334     }
335
336     /**
337      * DOCUMENT ME!
338      *
339      * @return DOCUMENT ME!
340      */
341     public int getValue()
342     {
343         return Integer.parseInt(valueField.getText());
344     }
345
346     public void slider_mouseReleased(MouseEvent e)
347     {
348       if (ap.overviewPanel != null)
349         ap.overviewPanel.updateOverviewImage();
350     }
351
352 }