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