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