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