JAL-1517 source formatting
[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
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("Conservation Colour Increment  (" + source
140             + ")");
141
142     if (ap.av.getAlignment().getGroups() != null)
143     {
144       sp.setAllGroupsCheckEnabled(true);
145     }
146     else
147     {
148       sp.setAllGroupsCheckEnabled(false);
149     }
150
151     return sp.getValue();
152   }
153
154   /**
155    * DOCUMENT ME!
156    */
157   public static void showConservationSlider()
158   {
159     try
160     {
161       PIDSlider.setClosed(true);
162       PIDSlider = null;
163     } catch (Exception ex)
164     {
165     }
166
167     if (!conservationSlider.isVisible())
168     {
169       Desktop.addInternalFrame(conservationSlider,
170               conservationSlider.getTitle(), 420, 90, false);
171       conservationSlider
172               .addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()
173               {
174                 public void internalFrameClosed(
175                         javax.swing.event.InternalFrameEvent e)
176                 {
177                   conservationSlider = null;
178                 }
179               });
180       conservationSlider.setLayer(JLayeredPane.PALETTE_LAYER);
181     }
182   }
183
184   /**
185    * DOCUMENT ME!
186    * 
187    * @param ap
188    *          DOCUMENT ME!
189    * @param cs
190    *          DOCUMENT ME!
191    * @param source
192    *          DOCUMENT ME!
193    * 
194    * @return DOCUMENT ME!
195    */
196   public static int setPIDSliderSource(AlignmentPanel ap, ColourSchemeI cs,
197           String source)
198   {
199     SliderPanel pid = null;
200
201     int threshold = cs.getThreshold();
202
203     if (PIDSlider == null)
204     {
205       pid = new SliderPanel(ap, threshold, false, cs);
206       PIDSlider = new JInternalFrame();
207       PIDSlider.setContentPane(pid);
208       PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);
209     }
210     else
211     {
212       pid = (SliderPanel) PIDSlider.getContentPane();
213       pid.cs = cs;
214     }
215
216     PIDSlider.setTitle("Percentage Identity Threshold (" + source + ")");
217
218     if (ap.av.getAlignment().getGroups() != null)
219     {
220       pid.setAllGroupsCheckEnabled(true);
221     }
222     else
223     {
224       pid.setAllGroupsCheckEnabled(false);
225     }
226
227     return pid.getValue();
228   }
229
230   /**
231    * DOCUMENT ME!
232    */
233   public static void showPIDSlider()
234   {
235     try
236     {
237       conservationSlider.setClosed(true);
238       conservationSlider = null;
239     } catch (Exception ex)
240     {
241     }
242
243     if (!PIDSlider.isVisible())
244     {
245       Desktop.addInternalFrame(PIDSlider, PIDSlider.getTitle(), 420, 90,
246               false);
247       PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);
248       PIDSlider
249               .addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()
250               {
251                 public void internalFrameClosed(
252                         javax.swing.event.InternalFrameEvent e)
253                 {
254                   PIDSlider = null;
255                 }
256               });
257       PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);
258     }
259   }
260
261   /**
262    * DOCUMENT ME!
263    * 
264    * @param i
265    *          DOCUMENT ME!
266    */
267   public void valueChanged(int i)
268   {
269     if (cs == null)
270     {
271       return;
272     }
273
274     ColourSchemeI toChange = cs;
275     Iterator<SequenceGroup> allGroups = null;
276
277     if (allGroupsCheck.isSelected())
278     {
279       allGroups = ap.av.getAlignment().getGroups().listIterator();
280     }
281
282     while (toChange != null)
283     {
284       if (forConservation)
285       {
286         toChange.setConservationInc(i);
287       }
288       else
289       {
290         toChange.setThreshold(i, ap.av.getIgnoreGapsConsensus());
291       }
292       if (allGroups != null && allGroups.hasNext())
293       {
294         while ((toChange = allGroups.next().cs) == null
295                 && allGroups.hasNext())
296           ;
297       }
298       else
299       {
300         toChange = null;
301       }
302     }
303
304     ap.seqPanel.seqCanvas.repaint();
305   }
306
307   /**
308    * DOCUMENT ME!
309    * 
310    * @param b
311    *          DOCUMENT ME!
312    */
313   public void setAllGroupsCheckEnabled(boolean b)
314   {
315     allGroupsCheck.setEnabled(b);
316   }
317
318   /**
319    * DOCUMENT ME!
320    * 
321    * @param e
322    *          DOCUMENT ME!
323    */
324   public void valueField_actionPerformed(ActionEvent e)
325   {
326     try
327     {
328       int i = Integer.parseInt(valueField.getText());
329       slider.setValue(i);
330     } catch (NumberFormatException ex)
331     {
332       valueField.setText(slider.getValue() + "");
333     }
334   }
335
336   /**
337    * DOCUMENT ME!
338    * 
339    * @param value
340    *          DOCUMENT ME!
341    */
342   public void setValue(int value)
343   {
344     slider.setValue(value);
345   }
346
347   /**
348    * DOCUMENT ME!
349    * 
350    * @return DOCUMENT ME!
351    */
352   public int getValue()
353   {
354     return Integer.parseInt(valueField.getText());
355   }
356
357   public void slider_mouseReleased(MouseEvent e)
358   {
359     if (ap.overviewPanel != null)
360     {
361       ap.overviewPanel.updateOverviewImage();
362     }
363   }
364
365 }