Formatting
[jalview.git] / src / jalview / gui / SliderPanel.java
index dee77d5..98579eb 100755 (executable)
+/*\r
+ * Jalview - A Sequence Alignment Editor and Viewer\r
+ * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ *\r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
+ */\r
 package jalview.gui;\r
 \r
-import jalview.jbgui.*;\r
-import jalview.datamodel.*;\r
-import jalview.schemes.*;\r
+import java.util.*;\r
+\r
 import java.awt.event.*;\r
+import javax.swing.*;\r
 import javax.swing.event.*;\r
 \r
-public class SliderPanel extends GSliderPanel\r
+import jalview.datamodel.*;\r
+import jalview.jbgui.*;\r
+import jalview.schemes.*;\r
+\r
+/**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @author $author$\r
+ * @version $Revision$\r
+ */\r
+public class SliderPanel\r
+    extends GSliderPanel\r
 {\r
+  static JInternalFrame conservationSlider;\r
+  static JInternalFrame PIDSlider;\r
   AlignmentPanel ap;\r
   boolean forConservation = true;\r
   ColourSchemeI cs;\r
 \r
-  public SliderPanel(AlignmentPanel ap, int value, boolean forConserve, ColourSchemeI cs)\r
+  /**\r
+   * Creates a new SliderPanel object.\r
+   *\r
+   * @param ap DOCUMENT ME!\r
+   * @param value DOCUMENT ME!\r
+   * @param forConserve DOCUMENT ME!\r
+   * @param cs DOCUMENT ME!\r
+   */\r
+  public SliderPanel(AlignmentPanel ap, int value, boolean forConserve,\r
+                     ColourSchemeI cs)\r
   {\r
     this.ap = ap;\r
     this.cs = cs;\r
     forConservation = forConserve;\r
     undoButton.setVisible(false);\r
     applyButton.setVisible(false);\r
-    if(forConservation)\r
+\r
+    if (forConservation)\r
     {\r
-      label.setText("Enter the value by which to decrease conservation colour intensity");\r
+      label.setText("Enter value to increase conservation visibility");\r
       slider.setMinimum(0);\r
-      slider.setMaximum(50);\r
+      slider.setMaximum(100);\r
     }\r
     else\r
     {\r
-      label.setText("Enter the percent identity above which to colour residues");\r
+      label.setText("Enter % identity above which to colour residues");\r
       slider.setMinimum(0);\r
       slider.setMaximum(100);\r
     }\r
 \r
-\r
-\r
-    slider.addChangeListener( new ChangeListener()\r
+    slider.addChangeListener(new ChangeListener()\r
     {\r
       public void stateChanged(ChangeEvent evt)\r
       {\r
-        valueField.setText( slider.getValue()+"" );\r
-        valueChanged( slider.getValue() );\r
+        valueField.setText(slider.getValue() + "");\r
+        valueChanged(slider.getValue());\r
       }\r
     });\r
 \r
     slider.setValue(value);\r
-    valueField.setText(value+"");\r
+    valueField.setText(value + "");\r
   }\r
 \r
+  /**\r
+   * DOCUMENT ME!\r
+   *\r
+   * @param ap DOCUMENT ME!\r
+   * @param cs DOCUMENT ME!\r
+   * @param source DOCUMENT ME!\r
+   *\r
+   * @return DOCUMENT ME!\r
+   */\r
+  public static int setConservationSlider(AlignmentPanel ap,\r
+                                          ColourSchemeI cs, String source)\r
+  {\r
+    SliderPanel sp = null;\r
+\r
+    if (conservationSlider == null)\r
+    {\r
+      sp = new SliderPanel(ap, cs.getConservationInc(), true, cs);\r
+      conservationSlider = new JInternalFrame();\r
+      conservationSlider.setContentPane(sp);\r
+      conservationSlider.setLayer(JLayeredPane.PALETTE_LAYER);\r
+    }\r
+    else\r
+    {\r
+      sp = (SliderPanel) conservationSlider.getContentPane();\r
+      sp.cs = cs;\r
+    }\r
+\r
+    conservationSlider.setTitle("Conservation Colour Increment  (" +\r
+                                source + ")");\r
+\r
+    if (ap.av.alignment.getGroups() != null)\r
+    {\r
+      sp.setAllGroupsCheckEnabled(true);\r
+    }\r
+    else\r
+    {\r
+      sp.setAllGroupsCheckEnabled(false);\r
+    }\r
+\r
+    return sp.getValue();\r
+  }\r
+\r
+  /**\r
+   * DOCUMENT ME!\r
+   */\r
+  public static void showConservationSlider()\r
+  {\r
+    try\r
+    {\r
+      PIDSlider.setClosed(true);\r
+      PIDSlider = null;\r
+    }\r
+    catch (Exception ex)\r
+    {\r
+    }\r
+\r
+    if (!conservationSlider.isVisible())\r
+    {\r
+      Desktop.addInternalFrame(conservationSlider,\r
+                               conservationSlider.getTitle(), 420, 90, false);\r
+      conservationSlider.addInternalFrameListener(new javax.swing.event.\r
+                                                  InternalFrameAdapter()\r
+      {\r
+        public void internalFrameClosed(\r
+            javax.swing.event.InternalFrameEvent e)\r
+        {\r
+          conservationSlider = null;\r
+        }\r
+      });\r
+      conservationSlider.setLayer(JLayeredPane.PALETTE_LAYER);\r
+    }\r
+  }\r
+\r
+  /**\r
+   * DOCUMENT ME!\r
+   *\r
+   * @param ap DOCUMENT ME!\r
+   * @param cs DOCUMENT ME!\r
+   * @param source DOCUMENT ME!\r
+   *\r
+   * @return DOCUMENT ME!\r
+   */\r
+  public static int setPIDSliderSource(AlignmentPanel ap, ColourSchemeI cs,\r
+                                       String source)\r
+  {\r
+    SliderPanel pid = null;\r
+\r
+    int threshold = cs.getThreshold();\r
+\r
+    if (PIDSlider == null)\r
+    {\r
+      pid = new SliderPanel(ap, threshold, false, cs);\r
+      PIDSlider = new JInternalFrame();\r
+      PIDSlider.setContentPane(pid);\r
+      PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);\r
+    }\r
+    else\r
+    {\r
+      pid = (SliderPanel) PIDSlider.getContentPane();\r
+      pid.cs = cs;\r
+    }\r
+\r
+    PIDSlider.setTitle("Percentage Identity Threshold (" + source + ")");\r
+\r
+    if (ap.av.alignment.getGroups() != null)\r
+    {\r
+      pid.setAllGroupsCheckEnabled(true);\r
+    }\r
+    else\r
+    {\r
+      pid.setAllGroupsCheckEnabled(false);\r
+    }\r
+\r
+    return pid.getValue();\r
+  }\r
+\r
+  /**\r
+   * DOCUMENT ME!\r
+   */\r
+  public static void showPIDSlider()\r
+  {\r
+    try\r
+    {\r
+      conservationSlider.setClosed(true);\r
+      conservationSlider = null;\r
+    }\r
+    catch (Exception ex)\r
+    {\r
+    }\r
+\r
+    if (!PIDSlider.isVisible())\r
+    {\r
+      Desktop.addInternalFrame(PIDSlider, PIDSlider.getTitle(), 420, 90,\r
+                               false);\r
+      PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);\r
+      PIDSlider.addInternalFrameListener(new javax.swing.event.\r
+                                         InternalFrameAdapter()\r
+      {\r
+        public void internalFrameClosed(\r
+            javax.swing.event.InternalFrameEvent e)\r
+        {\r
+          PIDSlider = null;\r
+        }\r
+      });\r
+      PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);\r
+    }\r
+  }\r
+\r
+  /**\r
+   * DOCUMENT ME!\r
+   *\r
+   * @param i DOCUMENT ME!\r
+   */\r
   public void valueChanged(int i)\r
   {\r
+    if (cs == null)\r
+    {\r
+      return;\r
+    }\r
+\r
+    ColourSchemeI toChange = null;\r
+    Vector allGroups = null;\r
+    int groupIndex = 0;\r
 \r
-    if(forConservation)\r
+    if (allGroupsCheck.isSelected())\r
     {\r
-      if (cs instanceof ConservationColourScheme)\r
-        ( (ConservationColourScheme) cs).inc = i;\r
+      allGroups = ap.av.alignment.getGroups();\r
+      groupIndex = allGroups.size() - 1;\r
     }\r
     else\r
-     {\r
-       if( cs instanceof ResidueColourScheme)\r
-       {\r
-         ResidueColourScheme rcs = (ResidueColourScheme) cs;\r
-         rcs.setThreshold(i);\r
-       }\r
-       else if( cs instanceof ScoreColourScheme)\r
-       {\r
-         ScoreColourScheme scs = (ScoreColourScheme) cs;\r
-         scs.setThreshold(i);\r
-       }\r
-\r
-     }\r
-\r
-    ap.seqPanel.seqCanvas.paintFlag=true;\r
-    ap.seqPanel.repaint();\r
+    {\r
+      toChange = cs;\r
+    }\r
+\r
+    while (groupIndex > -1)\r
+    {\r
+      if (allGroups != null)\r
+      {\r
+        toChange = ( (SequenceGroup) allGroups.get(groupIndex)).cs;\r
+\r
+        if (toChange == null)\r
+        {\r
+          groupIndex--;\r
+\r
+          continue;\r
+        }\r
+      }\r
 \r
+      if (forConservation)\r
+      {\r
+        if (toChange.conservationApplied())\r
+        {\r
+          toChange.setConservationInc(i);\r
+        }\r
+      }\r
+      else\r
+      {\r
+        toChange.setThreshold(i, ap.av.getIgnoreGapsConsensus());\r
+      }\r
+\r
+      groupIndex--;\r
+    }\r
+\r
+    ap.seqPanel.seqCanvas.repaint();\r
   }\r
 \r
+  /**\r
+   * DOCUMENT ME!\r
+   *\r
+   * @param b DOCUMENT ME!\r
+   */\r
+  public void setAllGroupsCheckEnabled(boolean b)\r
+  {\r
+    allGroupsCheck.setEnabled(b);\r
+  }\r
+\r
+  /**\r
+   * DOCUMENT ME!\r
+   *\r
+   * @param e DOCUMENT ME!\r
+   */\r
   public void valueField_actionPerformed(ActionEvent e)\r
   {\r
-    try{\r
+    try\r
+    {\r
       int i = Integer.parseInt(valueField.getText());\r
       slider.setValue(i);\r
     }\r
-    catch(Exception ex)\r
+    catch (NumberFormatException ex)\r
     {\r
-      valueField.setText( slider.getValue()+"" );\r
+      valueField.setText(slider.getValue() + "");\r
     }\r
   }\r
 \r
+  /**\r
+   * DOCUMENT ME!\r
+   *\r
+   * @param value DOCUMENT ME!\r
+   */\r
+  public void setValue(int value)\r
+  {\r
+    slider.setValue(value);\r
+  }\r
+\r
+  /**\r
+   * DOCUMENT ME!\r
+   *\r
+   * @return DOCUMENT ME!\r
+   */\r
   public int getValue()\r
   {\r
     return Integer.parseInt(valueField.getText());\r
   }\r
+\r
+  public void slider_mouseReleased(MouseEvent e)\r
+  {\r
+    if (ap.overviewPanel != null)\r
+    {\r
+      ap.overviewPanel.updateOverviewImage();\r
+    }\r
+  }\r
+\r
 }\r