2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
\r
3 * Copyright (C) $$Year-Rel$$ The Jalview Authors
\r
5 * This file is part of Jalview.
\r
7 * Jalview is free software: you can redistribute it and/or
\r
8 * modify it under the terms of the GNU General Public License
\r
9 * as published by the Free Software Foundation, either version 3
\r
10 * of the License, or (at your option) any later version.
\r
12 * Jalview is distributed in the hope that it will be useful, but
\r
13 * WITHOUT ANY WARRANTY; without even the implied warranty
\r
14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
\r
15 * PURPOSE. See the GNU General Public License for more details.
\r
17 * You should have received a copy of the GNU General Public License
\r
18 * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
\r
19 * The Jalview Authors are detailed in the 'AUTHORS' file.
\r
21 package jalview.appletgui;
\r
23 import jalview.bin.JalviewLite;
\r
24 import jalview.datamodel.SequenceGroup;
\r
25 import jalview.schemes.ColourSchemeI;
\r
26 import jalview.util.MessageManager;
\r
28 import java.awt.BorderLayout;
\r
29 import java.awt.Color;
\r
30 import java.awt.FlowLayout;
\r
31 import java.awt.event.ActionEvent;
\r
32 import java.awt.event.ActionListener;
\r
33 import java.awt.event.AdjustmentEvent;
\r
34 import java.awt.event.AdjustmentListener;
\r
35 import java.awt.event.MouseEvent;
\r
36 import java.awt.event.MouseListener;
\r
37 import java.awt.event.WindowAdapter;
\r
38 import java.awt.event.WindowEvent;
\r
39 import java.util.Iterator;
\r
41 import javax.swing.JButton;
\r
42 import javax.swing.JCheckBox;
\r
43 import javax.swing.JFrame;
\r
44 import javax.swing.JLabel;
\r
45 import javax.swing.JPanel;
\r
46 import javax.swing.JScrollBar;
\r
47 import javax.swing.JTextField;
\r
49 public class SliderPanel extends JPanel implements ActionListener,
\r
50 AdjustmentListener, MouseListener
\r
54 boolean forConservation = true;
\r
58 static JFrame conservationSlider;
\r
60 static JFrame PIDSlider;
\r
62 public static int setConservationSlider(AlignmentPanel ap,
\r
63 ColourSchemeI cs, String source)
\r
65 SliderPanel sp = null;
\r
67 if (conservationSlider == null)
\r
69 sp = new SliderPanel(ap, cs.getConservationInc(), true, cs);
\r
70 conservationSlider = new JFrame();
\r
71 conservationSlider.add(sp);
\r
75 sp = (SliderPanel) conservationSlider.getComponent(0);
\r
79 conservationSlider.setTitle(MessageManager.formatMessage("label.conservation_colour_increment", new String[]{source}));
\r
80 if (ap.av.getAlignment().getGroups() != null)
\r
82 sp.setAllGroupsCheckEnabled(true);
\r
86 sp.setAllGroupsCheckEnabled(false);
\r
89 return sp.getValue();
\r
92 public static void showConservationSlider()
\r
96 PIDSlider.setVisible(false);
\r
98 } catch (Exception ex)
\r
102 if (!conservationSlider.isVisible())
\r
104 JalviewLite.addFrame(conservationSlider,
\r
105 conservationSlider.getTitle(), 420, 100);
\r
106 conservationSlider.addWindowListener(new WindowAdapter()
\r
108 public void windowClosing(WindowEvent e)
\r
110 conservationSlider = null;
\r
118 public static int setPIDSliderSource(AlignmentPanel ap, ColourSchemeI cs,
\r
121 SliderPanel pid = null;
\r
122 if (PIDSlider == null)
\r
124 pid = new SliderPanel(ap, 50, false, cs);
\r
125 PIDSlider = new JFrame();
\r
126 PIDSlider.add(pid);
\r
130 pid = (SliderPanel) PIDSlider.getComponent(0);
\r
133 PIDSlider.setTitle(MessageManager.formatMessage("label.percentage_identity_thereshold", new String[]{source}));
\r
135 if (ap.av.getAlignment().getGroups() != null)
\r
137 pid.setAllGroupsCheckEnabled(true);
\r
141 pid.setAllGroupsCheckEnabled(false);
\r
144 return pid.getValue();
\r
148 public static void showPIDSlider()
\r
152 conservationSlider.setVisible(false);
\r
153 conservationSlider = null;
\r
154 } catch (Exception ex)
\r
158 if (!PIDSlider.isVisible())
\r
160 JalviewLite.addFrame(PIDSlider, PIDSlider.getTitle(),
\r
162 PIDSlider.addWindowListener(new WindowAdapter()
\r
164 public void windowClosing(WindowEvent e)
\r
173 public SliderPanel(AlignmentPanel ap, int value, boolean forConserve,
\r
179 } catch (Exception e)
\r
181 e.printStackTrace();
\r
185 forConservation = forConserve;
\r
186 undoButton.setVisible(false);
\r
187 applyButton.setVisible(false);
\r
188 if (forConservation)
\r
190 label.setText(MessageManager
\r
191 .getString("label.modify_conservation_visibility"));
\r
192 slider.setMinimum(0);
\r
193 slider.setMaximum(50 + slider.getVisibleAmount());
\r
194 slider.setUnitIncrement(1);
\r
198 label.setText(MessageManager
\r
199 .getString("label.colour_residues_above_occurence"));
\r
200 slider.setMinimum(0);
\r
201 slider.setMaximum(100 + slider.getVisibleAmount());
\r
202 slider.setBlockIncrement(1);
\r
205 slider.addAdjustmentListener(this);
\r
206 slider.addMouseListener(this);
\r
208 slider.setValue(value);
\r
209 valueField.setText(value + "");
\r
212 public void valueChanged(int i)
\r
219 ColourSchemeI toChange = cs;
\r
220 Iterator<SequenceGroup> allGroups = null;
\r
222 if (allGroupsCheck.isSelected())
\r
224 allGroups = ap.av.getAlignment().getGroups().listIterator();
\r
227 while (toChange != null)
\r
229 if (forConservation)
\r
231 toChange.setConservationInc(i);
\r
235 toChange.setThreshold(i, ap.av.isIgnoreGapsConsensus());
\r
237 if (allGroups != null && allGroups.hasNext())
\r
239 while ((toChange = allGroups.next().cs) == null
\r
240 && allGroups.hasNext())
\r
251 ap.seqPanel.seqCanvas.repaint();
\r
255 public void setAllGroupsCheckEnabled(boolean b)
\r
257 allGroupsCheck.setEnabled(b);
\r
260 public void actionPerformed(ActionEvent evt)
\r
262 if (evt.getSource() == applyButton)
\r
264 applyButton_actionPerformed();
\r
266 else if (evt.getSource() == undoButton)
\r
268 undoButton_actionPerformed();
\r
270 else if (evt.getSource() == valueField)
\r
272 valueField_actionPerformed();
\r
276 public void adjustmentValueChanged(AdjustmentEvent evt)
\r
278 valueField.setText(slider.getValue() + "");
\r
279 valueChanged(slider.getValue());
\r
282 public void valueField_actionPerformed()
\r
286 int i = Integer.parseInt(valueField.getText());
\r
287 slider.setValue(i);
\r
288 } catch (Exception ex)
\r
290 valueField.setText(slider.getValue() + "");
\r
294 public void setValue(int value)
\r
296 slider.setValue(value);
\r
299 public int getValue()
\r
301 return Integer.parseInt(valueField.getText());
\r
304 // this is used for conservation colours, PID colours and redundancy threshold
\r
305 protected JScrollBar slider = new JScrollBar();
\r
307 protected JTextField valueField = new JTextField();
\r
309 protected JLabel label = new JLabel();
\r
311 JPanel jPanel1 = new JPanel();
\r
313 JPanel jPanel2 = new JPanel();
\r
315 protected JButton applyButton = new JButton();
\r
317 protected JButton undoButton = new JButton();
\r
319 FlowLayout flowLayout1 = new FlowLayout();
\r
321 protected JCheckBox allGroupsCheck = new JCheckBox();
\r
323 BorderLayout borderLayout1 = new BorderLayout();
\r
325 BorderLayout borderLayout2 = new BorderLayout();
\r
327 FlowLayout flowLayout2 = new FlowLayout();
\r
329 private void jbInit() throws Exception
\r
331 this.setLayout(borderLayout2);
\r
333 // slider.setMajorTickSpacing(10);
\r
334 // slider.setMinorTickSpacing(1);
\r
335 // slider.setPaintTicks(true);
\r
336 slider.setBackground(Color.white);
\r
337 slider.setFont(new java.awt.Font("Verdana", 0, 11));
\r
338 slider.setOrientation(0);
\r
339 valueField.setFont(new java.awt.Font("Verdana", 0, 11));
\r
340 valueField.setText(" ");
\r
341 valueField.addActionListener(this);
\r
342 valueField.setColumns(3);
\r
343 label.setFont(new java.awt.Font("Verdana", 0, 11));
\r
344 label.setText(MessageManager.getString("label.set_this_label_text"));
\r
345 jPanel1.setLayout(borderLayout1);
\r
346 jPanel2.setLayout(flowLayout1);
\r
347 applyButton.setFont(new java.awt.Font("Verdana", 0, 11));
\r
348 applyButton.setLabel(MessageManager.getString("action.apply"));
\r
349 applyButton.addActionListener(this);
\r
350 undoButton.setEnabled(false);
\r
351 undoButton.setFont(new java.awt.Font("Verdana", 0, 11));
\r
352 undoButton.setLabel(MessageManager.getString("action.undo"));
\r
353 undoButton.addActionListener(this);
\r
354 allGroupsCheck.setEnabled(false);
\r
355 allGroupsCheck.setFont(new java.awt.Font("Verdana", 0, 11));
\r
356 allGroupsCheck.setLabel(MessageManager
\r
357 .getString("action.apply_threshold_all_groups"));
\r
358 allGroupsCheck.setName(MessageManager
\r
359 .getString("action.apply_all_groups"));
\r
360 this.setBackground(Color.white);
\r
361 this.setForeground(Color.black);
\r
362 jPanel2.add(label, null);
\r
363 jPanel2.add(applyButton, null);
\r
364 jPanel2.add(undoButton, null);
\r
365 jPanel2.add(allGroupsCheck);
\r
366 jPanel1.add(valueField, java.awt.BorderLayout.EAST);
\r
367 jPanel1.add(slider, java.awt.BorderLayout.CENTER);
\r
368 this.add(jPanel1, java.awt.BorderLayout.SOUTH);
\r
369 this.add(jPanel2, java.awt.BorderLayout.CENTER);
\r
372 protected void applyButton_actionPerformed()
\r
376 protected void undoButton_actionPerformed()
\r
380 public void mousePressed(MouseEvent evt)
\r
384 public void mouseReleased(MouseEvent evt)
\r
386 ap.paintAlignment(true);
\r
389 public void mouseClicked(MouseEvent evt)
\r
393 public void mouseEntered(MouseEvent evt)
\r
397 public void mouseExited(MouseEvent evt)
\r