JAL-2089 patch broken merge to master for Release 2.10.0b1
[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.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
223             .setTitle(MessageManager.formatMessage(
224                     "label.percentage_identity_threshold",
225                     new String[] { source }));
226
227     if (ap.av.getAlignment().getGroups() != null)
228     {
229       pid.setAllGroupsCheckEnabled(true);
230     }
231     else
232     {
233       pid.setAllGroupsCheckEnabled(false);
234     }
235
236     return pid.getValue();
237   }
238
239   /**
240    * DOCUMENT ME!
241    */
242   public static void showPIDSlider()
243   {
244     try
245     {
246       conservationSlider.setClosed(true);
247       conservationSlider = null;
248     } catch (Exception ex)
249     {
250     }
251
252     if (!PIDSlider.isVisible())
253     {
254       Desktop.addInternalFrame(PIDSlider, PIDSlider.getTitle(), 420, 90,
255               false);
256       PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);
257       PIDSlider
258               .addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()
259               {
260                 public void internalFrameClosed(
261                         javax.swing.event.InternalFrameEvent e)
262                 {
263                   PIDSlider = null;
264                 }
265               });
266       PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);
267     }
268   }
269
270   /**
271    * DOCUMENT ME!
272    * 
273    * @param i
274    *          DOCUMENT ME!
275    */
276   public void valueChanged(int i)
277   {
278     if (cs == null)
279     {
280       return;
281     }
282
283     ColourSchemeI toChange = cs;
284     Iterator<SequenceGroup> allGroups = null;
285
286     if (allGroupsCheck.isSelected())
287     {
288       allGroups = ap.av.getAlignment().getGroups().listIterator();
289     }
290
291     while (toChange != null)
292     {
293       if (forConservation)
294       {
295         toChange.setConservationInc(i);
296       }
297       else
298       {
299         toChange.setThreshold(i, ap.av.isIgnoreGapsConsensus());
300       }
301       if (allGroups != null && allGroups.hasNext())
302       {
303         while ((toChange = allGroups.next().cs) == null
304                 && allGroups.hasNext())
305         {
306           ;
307         }
308       }
309       else
310       {
311         toChange = null;
312       }
313     }
314
315     ap.getSeqPanel().seqCanvas.repaint();
316   }
317
318   /**
319    * DOCUMENT ME!
320    * 
321    * @param b
322    *          DOCUMENT ME!
323    */
324   public void setAllGroupsCheckEnabled(boolean b)
325   {
326     allGroupsCheck.setEnabled(b);
327   }
328
329   /**
330    * DOCUMENT ME!
331    * 
332    * @param e
333    *          DOCUMENT ME!
334    */
335   public void valueField_actionPerformed(ActionEvent e)
336   {
337     try
338     {
339       int i = Integer.parseInt(valueField.getText());
340       slider.setValue(i);
341     } catch (NumberFormatException ex)
342     {
343       valueField.setText(slider.getValue() + "");
344     }
345   }
346
347   /**
348    * DOCUMENT ME!
349    * 
350    * @param value
351    *          DOCUMENT ME!
352    */
353   public void setValue(int value)
354   {
355     slider.setValue(value);
356   }
357
358   /**
359    * DOCUMENT ME!
360    * 
361    * @return DOCUMENT ME!
362    */
363   public int getValue()
364   {
365     return Integer.parseInt(valueField.getText());
366   }
367
368   public void slider_mouseReleased(MouseEvent e)
369   {
370     if (ap.overviewPanel != null)
371     {
372       ap.overviewPanel.updateOverviewImage();
373     }
374   }
375
376 }