2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3 * Copyright (C) $$Year-Rel$$ The Jalview Authors
5 * This file is part of Jalview.
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.
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.
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.
23 import jalview.datamodel.SequenceGroup;
24 import jalview.jbgui.GSliderPanel;
25 import jalview.renderer.ResidueShaderI;
26 import jalview.util.MessageManager;
28 import java.awt.event.MouseAdapter;
29 import java.awt.event.MouseEvent;
30 import java.beans.PropertyVetoException;
32 import javax.swing.JInternalFrame;
33 import javax.swing.JLayeredPane;
34 import javax.swing.event.ChangeEvent;
35 import javax.swing.event.ChangeListener;
36 import javax.swing.event.InternalFrameAdapter;
37 import javax.swing.event.InternalFrameEvent;
45 public class SliderPanel extends GSliderPanel
47 static JInternalFrame conservationSlider;
49 static JInternalFrame PIDSlider;
53 boolean forConservation = true;
57 private static SliderPanel sliderPanel;
60 * Returns the currently active slider panel (or null if none).
64 public static SliderPanel getSliderPanel()
70 * Creates a new SliderPanel object.
81 public SliderPanel(final AlignmentPanel ap, int value,
82 boolean forConserve, ResidueShaderI scheme)
86 forConservation = forConserve;
87 undoButton.setVisible(false);
88 applyButton.setVisible(false);
92 label.setText(MessageManager
93 .getString("label.enter_value_increase_conservation_visibility"));
95 slider.setMaximum(100);
99 label.setText(MessageManager
100 .getString("label.enter_percentage_identity_above_which_colour_residues"));
101 slider.setMinimum(0);
102 slider.setMaximum(100);
105 slider.addChangeListener(new ChangeListener()
108 public void stateChanged(ChangeEvent evt)
110 valueField.setText(slider.getValue() + "");
111 valueChanged(slider.getValue());
115 slider.addMouseListener(new MouseAdapter()
118 public void mouseReleased(MouseEvent evt)
120 ap.paintAlignment(true);
124 slider.setValue(value);
125 valueField.setText(value + "");
138 * @return DOCUMENT ME!
140 public static int setConservationSlider(AlignmentPanel ap,
141 ResidueShaderI ccs, String source)
145 if (conservationSlider == null)
147 sliderPanel = new SliderPanel(ap, ccs.getConservationInc(), true, ccs);
148 conservationSlider = new JInternalFrame();
149 conservationSlider.setContentPane(sliderPanel);
150 conservationSlider.setLayer(JLayeredPane.PALETTE_LAYER);
154 sliderPanel = (SliderPanel) conservationSlider.getContentPane();
155 sliderPanel.valueField.setText(String.valueOf(ccs.getConservationInc()));
156 sliderPanel.cs = ccs;
160 .setTitle(MessageManager.formatMessage(
161 "label.conservation_colour_increment",
162 new String[] { source }));
164 if (ap.av.getAlignment().getGroups() != null)
166 sliderPanel.setAllGroupsCheckEnabled(true);
170 sliderPanel.setAllGroupsCheckEnabled(false);
173 return sliderPanel.getValue();
177 * Hides the PID slider panel if it is shown
179 public static void hidePIDSlider()
181 if (PIDSlider != null)
185 PIDSlider.setClosed(true);
187 } catch (PropertyVetoException ex)
194 * Hides the conservation slider panel if it is shown
196 public static void hideConservationSlider()
198 if (conservationSlider != null)
202 conservationSlider.setClosed(true);
203 conservationSlider = null;
204 } catch (PropertyVetoException ex)
213 public static void showConservationSlider()
217 if (!conservationSlider.isVisible())
219 Desktop.addInternalFrame(conservationSlider,
220 conservationSlider.getTitle(), 420, 90, false);
222 .addInternalFrameListener(new InternalFrameAdapter()
225 public void internalFrameClosed(InternalFrameEvent e)
227 conservationSlider = null;
230 conservationSlider.setLayer(JLayeredPane.PALETTE_LAYER);
244 * @return DOCUMENT ME!
246 public static int setPIDSliderSource(AlignmentPanel ap,
247 ResidueShaderI ccs, String source)
249 int threshold = ccs.getThreshold();
251 if (PIDSlider == null)
253 sliderPanel = new SliderPanel(ap, threshold, false, ccs);
254 PIDSlider = new JInternalFrame();
255 PIDSlider.setContentPane(sliderPanel);
256 PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);
260 sliderPanel = (SliderPanel) PIDSlider.getContentPane();
261 sliderPanel.cs = ccs;
262 sliderPanel.valueField.setText(String.valueOf(ccs.getThreshold()));
266 .setTitle(MessageManager.formatMessage(
267 "label.percentage_identity_threshold",
268 new String[] { source }));
270 if (ap.av.getAlignment().getGroups() != null)
272 sliderPanel.setAllGroupsCheckEnabled(true);
276 sliderPanel.setAllGroupsCheckEnabled(false);
279 return sliderPanel.getValue();
287 public static JInternalFrame showPIDSlider()
289 hideConservationSlider();
291 if (!PIDSlider.isVisible())
293 Desktop.addInternalFrame(PIDSlider, PIDSlider.getTitle(), 420, 90,
295 PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);
296 PIDSlider.addInternalFrameListener(new InternalFrameAdapter()
299 public void internalFrameClosed(InternalFrameEvent e)
304 PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);
310 * Updates the colour scheme with the current (identity threshold or
311 * conservation) percentage value. Also updates all groups if 'apply to all
312 * groups' is selected.
316 public void valueChanged(int percent)
318 if (!forConservation)
320 ap.av.setThreshold(percent);
322 updateColourScheme(percent, cs);
324 if (allGroupsCheck.isSelected())
326 for (SequenceGroup sg : ap.av.getAlignment().getGroups())
328 updateColourScheme(percent, sg.getGroupColourScheme());
332 ap.getSeqPanel().seqCanvas.repaint();
336 * Updates the colour scheme (if not null) with the current (identity
337 * threshold or conservation) percentage value
342 protected void updateColourScheme(int percent, ResidueShaderI scheme)
350 scheme.setConservationInc(percent);
354 scheme.setThreshold(percent, ap.av.isIgnoreGapsConsensus());
364 public void setAllGroupsCheckEnabled(boolean b)
366 allGroupsCheck.setEnabled(b);
376 public void valueField_actionPerformed()
380 int i = Integer.parseInt(valueField.getText());
382 } catch (NumberFormatException ex)
384 valueField.setText(slider.getValue() + "");
394 public void setValue(int value)
396 slider.setValue(value);
402 * @return DOCUMENT ME!
404 public int getValue()
406 return Integer.parseInt(valueField.getText());
410 public void slider_mouseReleased(MouseEvent e)
412 if (ap.overviewPanel != null)
414 ap.overviewPanel.updateOverviewImage();
418 public static int getConservationValue()
420 return getValue(conservationSlider);
423 static int getValue(JInternalFrame slider)
425 return slider == null ? 0 : ((SliderPanel) slider.getContentPane())
429 public static int getPIDValue()
431 return getValue(PIDSlider);
435 * Answers true if the SliderPanel is for Conservation, false if it is for PID
440 public boolean isForConservation()
442 return forConservation;
446 * Answers the title for the slider panel; this may include 'Background' if
447 * for the alignment, or the group id if for a group
451 public String getTitle()
454 if (isForConservation())
456 if (conservationSlider != null)
458 title = conservationSlider.getTitle();
461 else if (PIDSlider != null)
463 title = PIDSlider.getTitle();