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