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