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