Check on vscrollMax values
[jalview.git] / src / jalview / appletgui / SliderPanel.java
index 6c89fb7..fc7c760 100755 (executable)
@@ -1,32 +1,36 @@
 /*\r
-* Jalview - A Sequence Alignment Editor and Viewer\r
-* Copyright (C) 2005 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
+ * Jalview - A Sequence Alignment Editor and Viewer\r
+ * Copyright (C) 2006 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
 \r
 package jalview.appletgui;\r
 \r
-import jalview.jbappletgui.*;\r
-import jalview.schemes.*;\r
-import jalview.datamodel.*;\r
+import java.util.*;\r
+\r
 import java.awt.*;\r
 import java.awt.event.*;\r
-import java.util.*;\r
 \r
-public class SliderPanel extends GSliderPanel\r
+import jalview.datamodel.*;\r
+import jalview.schemes.*;\r
+\r
+public class SliderPanel extends Panel\r
+    implements ActionListener,\r
+    AdjustmentListener,\r
+    MouseListener\r
 {\r
   AlignmentPanel ap;\r
   boolean forConservation = true;\r
@@ -35,43 +39,51 @@ public class SliderPanel extends GSliderPanel
   static Frame conservationSlider;\r
   static Frame PIDSlider;\r
 \r
-  public static int setConservationSlider(AlignmentPanel ap, ColourSchemeI cs, String source)\r
+  public static int setConservationSlider(AlignmentPanel ap, ColourSchemeI cs,\r
+                                          String source)\r
   {\r
     SliderPanel sp = null;\r
-    ConservationColourScheme ccs = (ConservationColourScheme)cs;\r
 \r
-    if(conservationSlider == null)\r
+    if (conservationSlider == null)\r
     {\r
-      sp = new SliderPanel(ap, ccs.inc, true, cs);\r
+      sp = new SliderPanel(ap, cs.getConservationInc(), true, cs);\r
       conservationSlider = new Frame();\r
       conservationSlider.add(sp);\r
     }\r
     else\r
     {\r
-        sp = (SliderPanel)conservationSlider.getComponent(0);\r
-        sp.cs = cs;\r
+      sp = (SliderPanel) conservationSlider.getComponent(0);\r
+      sp.cs = cs;\r
     }\r
 \r
-    conservationSlider.setTitle("Conservation Colour Increment  ("+source+")");\r
-    if(ap.av.alignment.getGroups()!=null)\r
-      sp.setAllGroupsCheckEnabled( true );\r
+    conservationSlider.setTitle("Conservation Colour Increment  (" + source +\r
+                                ")");\r
+    if (ap.av.alignment.getGroups() != null)\r
+    {\r
+      sp.setAllGroupsCheckEnabled(true);\r
+    }\r
     else\r
-      sp.setAllGroupsCheckEnabled( false);\r
+    {\r
+      sp.setAllGroupsCheckEnabled(false);\r
+    }\r
 \r
     return sp.getValue();\r
   }\r
 \r
   public static void showConservationSlider()\r
   {\r
-    try{\r
+    try\r
+    {\r
       PIDSlider.setVisible(false);\r
       PIDSlider = null;\r
-    }catch(Exception ex){}\r
-\r
+    }\r
+    catch (Exception ex)\r
+    {}\r
 \r
-    if(!conservationSlider.isVisible())\r
+    if (!conservationSlider.isVisible())\r
     {\r
-      jalview.bin.JalviewLite.addFrame(conservationSlider, conservationSlider.getTitle(), 420, 100);\r
+      jalview.bin.JalviewLite.addFrame(conservationSlider,\r
+                                       conservationSlider.getTitle(), 420, 100);\r
       conservationSlider.addWindowListener(new WindowAdapter()\r
       {\r
         public void windowClosing(WindowEvent e)\r
@@ -84,41 +96,50 @@ public class SliderPanel extends GSliderPanel
 \r
   }\r
 \r
-  public static int setPIDSliderSource(AlignmentPanel ap, ColourSchemeI cs, String source)\r
-   {\r
-     SliderPanel pid = null;\r
-     if(PIDSlider == null)\r
-     {\r
-       pid = new SliderPanel(ap, 50, false, cs);\r
-       PIDSlider = new Frame();\r
-       PIDSlider.add(pid);\r
-     }\r
-     else\r
-     {\r
-         pid = (SliderPanel)PIDSlider.getComponent(0);\r
-         pid.cs = cs;\r
-     }\r
-     PIDSlider.setTitle("Percentage Identity Threshold ("+source+")");\r
-\r
-     if (ap.av.alignment.getGroups() != null)\r
-       pid.setAllGroupsCheckEnabled(true);\r
-     else\r
-       pid.setAllGroupsCheckEnabled(false);\r
-\r
-     return pid.getValue();\r
-\r
-   }\r
-\r
-   public static void showPIDSlider()\r
-   {\r
-     try{\r
-       conservationSlider.setVisible(false);\r
-       conservationSlider = null;\r
-     }catch(Exception ex){}\r
-\r
-     if(!PIDSlider.isVisible())\r
-    {\r
-      jalview.bin.JalviewLite.addFrame(PIDSlider, PIDSlider.getTitle(), 420, 100);\r
+  public static int setPIDSliderSource(AlignmentPanel ap, ColourSchemeI cs,\r
+                                       String source)\r
+  {\r
+    SliderPanel pid = null;\r
+    if (PIDSlider == null)\r
+    {\r
+      pid = new SliderPanel(ap, 50, false, cs);\r
+      PIDSlider = new Frame();\r
+      PIDSlider.add(pid);\r
+    }\r
+    else\r
+    {\r
+      pid = (SliderPanel) PIDSlider.getComponent(0);\r
+      pid.cs = cs;\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
+  public static void showPIDSlider()\r
+  {\r
+    try\r
+    {\r
+      conservationSlider.setVisible(false);\r
+      conservationSlider = null;\r
+    }\r
+    catch (Exception ex)\r
+    {}\r
+\r
+    if (!PIDSlider.isVisible())\r
+    {\r
+      jalview.bin.JalviewLite.addFrame(PIDSlider, PIDSlider.getTitle(), 420,\r
+                                       100);\r
       PIDSlider.addWindowListener(new WindowAdapter()\r
       {\r
         public void windowClosing(WindowEvent e)\r
@@ -128,76 +149,78 @@ public class SliderPanel extends GSliderPanel
       });\r
     }\r
 \r
-   }\r
-\r
+  }\r
 \r
-  public SliderPanel(AlignmentPanel ap, int value, boolean forConserve, ColourSchemeI cs)\r
+  public SliderPanel(AlignmentPanel ap, int value, boolean forConserve,\r
+                     ColourSchemeI cs)\r
   {\r
+    try {\r
+        jbInit();\r
+    } catch (Exception e) {\r
+        e.printStackTrace();\r
+      }\r
     this.ap = ap;\r
     this.cs = cs;\r
     forConservation = forConserve;\r
     undoButton.setVisible(false);\r
     applyButton.setVisible(false);\r
-    if(forConservation)\r
+    if (forConservation)\r
     {\r
       label.setText("Modify conservation visibility");\r
       slider.setMinimum(0);\r
-      slider.setMaximum(50+slider.getVisibleAmount());\r
+      slider.setMaximum(50 + slider.getVisibleAmount());\r
       slider.setUnitIncrement(1);\r
     }\r
     else\r
     {\r
       label.setText("Colour residues above % occurence");\r
       slider.setMinimum(0);\r
-      slider.setMaximum(100+slider.getVisibleAmount());\r
+      slider.setMaximum(100 + slider.getVisibleAmount());\r
       slider.setBlockIncrement(1);\r
     }\r
 \r
-\r
-    slider.addAdjustmentListener( new AdjustmentListener()\r
-    {\r
-      public void adjustmentValueChanged(AdjustmentEvent evt)\r
-      {\r
-        valueField.setText( slider.getValue()+"" );\r
-        valueChanged( slider.getValue() );\r
-      }\r
-    });\r
+    slider.addAdjustmentListener(this);\r
+    slider.addMouseListener(this);\r
 \r
     slider.setValue(value);\r
-    valueField.setText(value+"");\r
+    valueField.setText(value + "");\r
   }\r
 \r
   public void valueChanged(int i)\r
   {\r
-    if(cs == null)\r
+    if (cs == null)\r
+    {\r
       return;\r
+    }\r
 \r
     ColourSchemeI toChange = null;\r
     Vector allGroups = null;\r
     int groupIndex = 0;\r
 \r
-    if(allGroupsCheck.getState())\r
+    if (allGroupsCheck.getState())\r
     {\r
       allGroups = ap.av.alignment.getGroups();\r
-      groupIndex = allGroups.size()-1;\r
+      groupIndex = allGroups.size() - 1;\r
     }\r
     else\r
+    {\r
       toChange = cs;\r
+    }\r
 \r
-\r
-    while( groupIndex > -1 )\r
+    while (groupIndex > -1)\r
     {\r
-      if(allGroups!=null)\r
-        toChange = ((SequenceGroup)allGroups.elementAt(groupIndex)).cs;\r
+      if (allGroups != null)\r
+      {\r
+        toChange = ( (SequenceGroup) allGroups.elementAt(groupIndex)).cs;\r
+      }\r
 \r
       if (forConservation)\r
       {\r
-        if (toChange instanceof ConservationColourScheme)\r
-          ( (ConservationColourScheme) toChange).inc = i;\r
+        toChange.setConservationInc(i);\r
       }\r
       else\r
       {\r
-          ( (ResidueColourScheme) toChange).setThreshold(i);\r
+        toChange.setThreshold(i, ap.av.getIgnoreGapsConsensus());\r
       }\r
 \r
       groupIndex--;\r
@@ -212,16 +235,33 @@ public class SliderPanel extends GSliderPanel
     allGroupsCheck.setEnabled(b);\r
   }\r
 \r
+  public void actionPerformed(ActionEvent evt)\r
+  {\r
+    if(evt.getSource()==applyButton)\r
+      applyButton_actionPerformed();\r
+    else if(evt.getSource()==undoButton)\r
+      undoButton_actionPerformed();\r
+    else if(evt.getSource()==valueField)\r
+      valueField_actionPerformed();\r
+  }\r
+\r
+  public void adjustmentValueChanged(AdjustmentEvent evt)\r
+  {\r
+    valueField.setText(slider.getValue() + "");\r
+    valueChanged(slider.getValue());\r
+  }\r
+\r
 \r
-  public void valueField_actionPerformed(ActionEvent e)\r
+  public void valueField_actionPerformed()\r
   {\r
-    try{\r
+    try\r
+    {\r
       int i = Integer.parseInt(valueField.getText());\r
       slider.setValue(i);\r
     }\r
-    catch(Exception ex)\r
+    catch (Exception ex)\r
     {\r
-      valueField.setText( slider.getValue()+"" );\r
+      valueField.setText(slider.getValue() + "");\r
     }\r
   }\r
 \r
@@ -229,10 +269,83 @@ public class SliderPanel extends GSliderPanel
   {\r
     slider.setValue(value);\r
   }\r
+\r
   public int getValue()\r
   {\r
     return Integer.parseInt(valueField.getText());\r
   }\r
 \r
+  // this is used for conservation colours, PID colours and redundancy threshold\r
+  protected Scrollbar slider = new Scrollbar();\r
+  protected TextField valueField = new TextField();\r
+  protected Label label = new Label();\r
+  Panel jPanel1 = new Panel();\r
+  Panel jPanel2 = new Panel();\r
+  protected Button applyButton = new Button();\r
+  protected Button undoButton = new Button();\r
+  FlowLayout flowLayout1 = new FlowLayout();\r
+  protected Checkbox allGroupsCheck = new Checkbox();\r
+  BorderLayout borderLayout1 = new BorderLayout();\r
+  BorderLayout borderLayout2 = new BorderLayout();\r
+  FlowLayout flowLayout2 = new FlowLayout();\r
+\r
+  private void jbInit() throws Exception {\r
+      this.setLayout(borderLayout2);\r
+\r
+      // slider.setMajorTickSpacing(10);\r
+      //  slider.setMinorTickSpacing(1);\r
+      //  slider.setPaintTicks(true);\r
+      slider.setBackground(Color.white);\r
+      slider.setFont(new java.awt.Font("Verdana", 0, 11));\r
+      slider.setOrientation(0);\r
+      valueField.setFont(new java.awt.Font("Verdana", 0, 11));\r
+      valueField.setText("      ");\r
+      valueField.addActionListener(this);\r
+      label.setFont(new java.awt.Font("Verdana", 0, 11));\r
+      label.setText("set this label text");\r
+      jPanel1.setLayout(borderLayout1);\r
+      jPanel2.setLayout(flowLayout1);\r
+      applyButton.setFont(new java.awt.Font("Verdana", 0, 11));\r
+      applyButton.setLabel("Apply");\r
+      applyButton.addActionListener(this);\r
+      undoButton.setEnabled(false);\r
+      undoButton.setFont(new java.awt.Font("Verdana", 0, 11));\r
+      undoButton.setLabel("Undo");\r
+      undoButton.addActionListener(this);\r
+      allGroupsCheck.setEnabled(false);\r
+      allGroupsCheck.setFont(new java.awt.Font("Verdana", 0, 11));\r
+      allGroupsCheck.setLabel("Apply threshold to all groups");\r
+      allGroupsCheck.setName("Apply to all Groups");\r
+      this.setBackground(Color.white);\r
+      this.setForeground(Color.black);\r
+      jPanel2.add(label, null);\r
+      jPanel2.add(applyButton, null);\r
+      jPanel2.add(undoButton, null);\r
+      jPanel2.add(allGroupsCheck);\r
+      jPanel1.add(valueField, java.awt.BorderLayout.EAST);\r
+      jPanel1.add(slider, java.awt.BorderLayout.CENTER);\r
+      this.add(jPanel1, java.awt.BorderLayout.SOUTH);\r
+      this.add(jPanel2, java.awt.BorderLayout.CENTER);\r
+  }\r
+\r
+  protected void applyButton_actionPerformed()\r
+  { }\r
 \r
+  protected void undoButton_actionPerformed()\r
+  { }\r
+\r
+  public void mousePressed(MouseEvent evt)\r
+  { }\r
+\r
+  public void mouseReleased(MouseEvent evt)\r
+  {\r
+    if (ap.overviewPanel != null)\r
+      ap.overviewPanel.updateOverviewImage();\r
+  }\r
+  public void mouseClicked(MouseEvent evt)\r
+  {}\r
+  public void mouseEntered(MouseEvent evt)\r
+  {}\r
+  public void mouseExited(MouseEvent evt)\r
+  {}\r
 }\r