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