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