JAL-1807 still testing
[jalviewjs.git] / unused / appletgui / FeatureColourChooser.java
index 1a06490..70ba52d 100644 (file)
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- * 
- * This file is part of Jalview.
- * 
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *  
- * Jalview is distributed in the hope that it will be useful, but 
- * WITHOUT ANY WARRANTY; without even the implied warranty 
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
- * PURPOSE.  See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.appletgui;
-
-import jalview.datamodel.GraphLine;
-import jalview.schemes.AnnotationColourGradient;
-import jalview.schemes.GraduatedColor;
-import jalview.util.MessageManager;
-
-import javax.swing.JCheckBox;
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.FlowLayout;
-import java.awt.Font;
-import javax.swing.JFrame;
-import java.awt.GridLayout;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JScrollBar;
-import javax.swing.JTextField;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.AdjustmentEvent;
-import java.awt.event.AdjustmentListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.util.Hashtable;
-
-public class FeatureColourChooser extends JPanel implements ActionListener,
-        AdjustmentListener, ItemListener, MouseListener
-{
-  JVDialog frame;
-
-  JFrame owner;
-
-  FeatureRenderer fr;
-
-  FeatureSettings fs = null;
-
-  // AlignmentPanel ap;
-
-  GraduatedColor cs;
-
-  Object oldcs;
-
-  Hashtable oldgroupColours;
-
-  boolean adjusting = false;
-
-  private float min, max;
-
-  String type = null;
-
-  private AlignFrame af = null;
-
-  public FeatureColourChooser(AlignFrame af, String type)
-  {
-    this.af = af;
-    init(af.getSeqcanvas().getFeatureRenderer(), type);
-  }
-
-  public FeatureColourChooser(FeatureSettings fsettings, String type)
-  {
-    this.fs = fsettings;
-    init(fsettings.fr, type);
-    // this.ap = fsettings.ap;
-  }
-
-  private void init(FeatureRenderer frenderer, String type)
-  {
-    this.type = type;
-    fr = frenderer;
-    float mm[] = ((float[][]) fr.getMinMax().get(type))[0];
-    min = mm[0];
-    max = mm[1];
-    oldcs = fr.getFeatureColours().get(type);
-    if (oldcs instanceof GraduatedColor)
-    {
-      cs = new GraduatedColor((GraduatedColor) oldcs, min, max);
-    }
-    else
-    {
-      // promote original color to a graduated color
-      Color bl = Color.black;
-      if (oldcs instanceof Color)
-      {
-        bl = (Color) oldcs;
-      }
-      // original colour becomes the maximum colour
-      cs = new GraduatedColor(Color.white, bl, mm[0], mm[1]);
-    }
-    minColour.setBackground(cs.getMinColor());
-    maxColour.setBackground(cs.getMaxColor());
-    minColour.setForeground(cs.getMinColor());
-    maxColour.setForeground(cs.getMaxColor());
-    colourFromLabel.setSelected(cs.isColourByLabel());
-    adjusting = true;
-
-    try
-    {
-      jbInit();
-    } catch (Exception ex)
-    {
-    }
-    threshold
-            .select(cs.getThreshType() == AnnotationColourGradient.NO_THRESHOLD ? 0
-                    : cs.getThreshType() == AnnotationColourGradient.ABOVE_THRESHOLD ? 1
-                            : 2);
-
-    adjusting = false;
-    changeColour();
-    colourFromLabel.addItemListener(this);
-    slider.addAdjustmentListener(this);
-    slider.addMouseListener(this);
-    owner = (af != null) ? af : fs.frame;
-    frame = new JVDialog(owner, MessageManager.formatMessage(
-            "label.graduated_color_for_params", new String[]
-            { type }), true, 480, 248);
-    frame.setMainPanel(this);
-    validate();
-    frame.setVisible(true);
-    if (frame.accept)
-    {
-      changeColour();
-    }
-    else
-    {
-      // cancel
-      reset();
-      PaintRefresher.Refresh(this, fr.getViewport().getSequenceSetId());
-      frame.setVisible(false);
-    }
-  }
-
-  public FeatureColourChooser()
-  {
-    try
-    {
-      jbInit();
-    } catch (Exception ex)
-    {
-      ex.printStackTrace();
-    }
-  }
-
-  private void jbInit() throws Exception
-  {
-    JLabel minLabel = new JLabel(MessageManager.getString("label.min")), maxLabel = new JLabel(
-            MessageManager.getString("label.max"));
-    minLabel.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));
-    maxLabel.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));
-    // minColour.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));
-    // minColour.setLabel("Min Colour");
-
-    minColour.setBounds(0, 0, 40, 27);
-    maxColour.setBounds(0, 0, 40, 27);
-    minColour.addMouseListener(this);
-
-    maxColour.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));
-    maxColour.addMouseListener(this);
-
-    thresholdIsMin.addItemListener(this);
-
-    this.setLayout(new GridLayout(4, 1));
-    jPanel1.setLayout(new FlowLayout());
-    jPanel2.setLayout(new FlowLayout());
-    jPanel3.setLayout(new GridLayout(1, 1));
-    jPanel4.setLayout(new FlowLayout());
-    jPanel1.setBackground(Color.white);
-    jPanel2.setBackground(Color.white);
-    jPanel4.setBackground(Color.white);
-    threshold.addItemListener(this);
-    threshold.addItem(MessageManager
-            .getString("label.threshold_feature_no_thereshold"));
-    threshold.addItem(MessageManager
-            .getString("label.threshold_feature_above_thereshold"));
-    threshold.addItem(MessageManager
-            .getString("label.threshold_feature_below_thereshold"));
-    thresholdValue.addActionListener(this);
-    slider.setBackground(Color.white);
-    slider.setEnabled(false);
-    slider.setSize(new Dimension(93, 21));
-    thresholdValue.setEnabled(false);
-    thresholdValue.setSize(new Dimension(79, 22)); // setBounds(new
-                                                   // Rectangle(248, 2, 79,
-                                                   // 22));
-    thresholdValue.setColumns(5);
-    jPanel3.setBackground(Color.white);
-
-    colourFromLabel.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));
-    colourFromLabel.setLabel(MessageManager
-            .getString("label.colour_by_label"));
-    colourFromLabel.setSize(new Dimension(139, 22));
-    // threshold.setBounds(new Rectangle(11, 3, 139, 22));
-    thresholdIsMin.setBackground(Color.white);
-    thresholdIsMin.setLabel(MessageManager
-            .getString("label.threshold_minmax"));
-    thresholdIsMin.setSize(new Dimension(135, 23));
-    // thresholdIsMin.setBounds(new Rectangle(328, 3, 135, 23));
-    jPanel1.add(minLabel);
-    jPanel1.add(minColour);
-    jPanel1.add(maxLabel);
-    jPanel1.add(maxColour);
-    jPanel1.add(colourFromLabel);
-    jPanel2.add(threshold);
-    jPanel3.add(slider);
-    jPanel4.add(thresholdValue);
-    jPanel4.add(thresholdIsMin);
-    this.add(jPanel1);// , java.awt.BorderLayout.NORTH);
-    this.add(jPanel2);// , java.awt.BorderLayout.NORTH);
-    this.add(jPanel3);// , java.awt.BorderLayout.CENTER);
-    this.add(jPanel4);// , java.awt.BorderLayout.CENTER);
-  }
-
-  JPanel minColour = new JPanel();
-
-  JPanel maxColour = new JPanel();
-
-  JPanel jPanel1 = new JPanel();
-
-  JPanel jPanel2 = new JPanel();
-
-  Choice threshold = new Choice();
-
-  JPanel jPanel3 = new JPanel();
-
-  JPanel jPanel4 = new JPanel();
-
-  JScrollBar slider = new JScrollBar(JScrollBar.HORIZONTAL);
-
-  JTextField thresholdValue = new JTextField(20);
-
-  // BorderLayout borderLayout1 = new BorderLayout();
-
-  JCheckBox thresholdIsMin = new JCheckBox();
-
-  JCheckBox colourFromLabel = new JCheckBox();
-
-  private GraphLine threshline;
-
-  public void actionPerformed(ActionEvent evt)
-  {
-    if (evt.getSource() == thresholdValue)
-    {
-      try
-      {
-        float f = new Float(thresholdValue.getText()).floatValue();
-        slider.setValue((int) (f * 1000));
-        adjustmentValueChanged(null);
-      } catch (NumberFormatException ex)
-      {
-      }
-    }
-    else if (evt.getSource() == minColour)
-    {
-      minColour_actionPerformed(null);
-    }
-    else if (evt.getSource() == maxColour)
-    {
-      maxColour_actionPerformed(null);
-    }
-    else
-    {
-      changeColour();
-    }
-  }
-
-  public void itemStateChanged(ItemEvent evt)
-  {
-    maxColour.setEnabled(!colourFromLabel.isSelected());
-    minColour.setEnabled(!colourFromLabel.isSelected());
-    changeColour();
-  }
-
-  public void adjustmentValueChanged(AdjustmentEvent evt)
-  {
-    if (!adjusting)
-    {
-      thresholdValue.setText((slider.getValue() / 1000f) + "");
-      valueChanged();
-    }
-  }
-
-  protected void valueChanged()
-  {
-    threshline.value = slider.getValue() / 1000f;
-    cs.setThresh(threshline.value);
-    changeColour();
-    PaintRefresher.Refresh(this, fr.getViewport().getSequenceSetId());
-    // ap.paintAlignment(false);
-  }
-
-  public void minColour_actionPerformed(Color newCol)
-  {
-    if (newCol == null)
-    {
-      UserDefinedColours udc = new UserDefinedColours(this,
-              minColour.getBackground(), owner,
-              MessageManager.getString("label.select_colour_minimum_value")); // frame.owner,
-    }
-    else
-    {
-      minColour.setBackground(newCol);
-      minColour.setForeground(newCol);
-      minColour.repaint();
-      changeColour();
-    }
-
-  }
-
-  public void maxColour_actionPerformed(Color newCol)
-  {
-    if (newCol == null)
-    {
-
-      // UserDefinedColours udc = new UserDefinedColours(this,
-      // "Select Colour for Maximum Value",maxColour.getBackground(),true);
-      UserDefinedColours udc = new UserDefinedColours(this,
-              maxColour.getBackground(), owner,
-              MessageManager.getString("label.select_colour_maximum_value"));
-    }
-    else
-    {
-      maxColour.setBackground(newCol);
-      maxColour.setForeground(newCol);
-      maxColour.repaint();
-      changeColour();
-    }
-  }
-
-  void changeColour()
-  {
-    // Check if combobox is still adjusting
-    if (adjusting)
-    {
-      return;
-    }
-
-    int aboveThreshold = AnnotationColourGradient.NO_THRESHOLD;
-    if (threshold.getSelectedIndex() == 1)
-    {
-      aboveThreshold = AnnotationColourGradient.ABOVE_THRESHOLD;
-    }
-    else if (threshold.getSelectedIndex() == 2)
-    {
-      aboveThreshold = AnnotationColourGradient.BELOW_THRESHOLD;
-    }
-
-    slider.setEnabled(true);
-    thresholdValue.setEnabled(true);
-    GraduatedColor acg = new GraduatedColor(minColour.getBackground(),
-            maxColour.getBackground(), min, max);
-
-    acg.setColourByLabel(colourFromLabel.isSelected());
-    maxColour.setEnabled(!colourFromLabel.isSelected());
-    minColour.setEnabled(!colourFromLabel.isSelected());
-    if (aboveThreshold == AnnotationColourGradient.NO_THRESHOLD)
-    {
-      slider.setEnabled(false);
-      thresholdValue.setEnabled(false);
-      thresholdValue.setText("");
-    }
-
-    else if (aboveThreshold != AnnotationColourGradient.NO_THRESHOLD
-            && threshline == null)
-    {
-      // todo visual indication of feature threshold
-      threshline = new GraphLine((max - min) / 2f,
-              "Threshold", Color.black);
-    }
-
-    if (aboveThreshold != AnnotationColourGradient.NO_THRESHOLD)
-    {
-      adjusting = true;
-      acg.setThresh(threshline.value);
-
-      float range = max * 1000f - min * 1000f;
-
-      slider.setMinimum((int) (min * 1000));
-      slider.setMaximum((int) (max * 1000));
-      slider.setValue((int) (threshline.value * 1000));
-      thresholdValue.setText(threshline.value + "");
-      slider.setEnabled(true);
-      thresholdValue.setEnabled(true);
-      adjusting = false;
-    }
-
-    acg.setThreshType(aboveThreshold);
-    if (thresholdIsMin.isSelected()
-            && aboveThreshold != AnnotationColourGradient.NO_THRESHOLD)
-    {
-      if (aboveThreshold == AnnotationColourGradient.ABOVE_THRESHOLD)
-      {
-        acg = new GraduatedColor(acg, threshline.value, max);
-      }
-      else
-      {
-        acg = new GraduatedColor(acg, min, threshline.value);
-      }
-    }
-
-    fr.setColour(type, acg);
-    cs = acg;
-    PaintRefresher.Refresh(this, fr.getViewport().getSequenceSetId());
-    // ap.paintAlignment(false);
-  }
-
-  void reset()
-  {
-    fr.setColour(type, oldcs);
-    PaintRefresher.Refresh(this, fr.getViewport().getSequenceSetId());
-    // ap.paintAlignment(true);
-
-  }
-
-  public void mouseClicked(MouseEvent evt)
-  {
-  }
-
-  public void mousePressed(MouseEvent evt)
-  {
-  }
-
-  public void mouseReleased(MouseEvent evt)
-  {
-    if (evt.getSource() == minColour || evt.getSource() == maxColour)
-    {
-      // relay the event
-      actionPerformed(new ActionEvent(evt.getSource(), 1, "Clicked"));
-    }
-    else
-    {
-      PaintRefresher.Refresh(this, fr.getViewport().getSequenceSetId());
-    }
-    // ap.paintAlignment(true);
-  }
-
-  public void mouseEntered(MouseEvent evt)
-  {
-  }
-
-  public void mouseExited(MouseEvent evt)
-  {
-  }
-
-}
+/*\r
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)\r
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors\r
+ * \r
+ * This file is part of Jalview.\r
+ * \r
+ * Jalview 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 3\r
+ * of the License, or (at your option) any later version.\r
+ *  \r
+ * Jalview is distributed in the hope that it will be useful, but \r
+ * WITHOUT ANY WARRANTY; without even the implied warranty \r
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR \r
+ * PURPOSE.  See the GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.\r
+ * The Jalview Authors are detailed in the 'AUTHORS' file.\r
+ */\r
+package jalview.appletgui;\r
+\r
+import jalview.datamodel.GraphLine;\r
+import jalview.schemes.AnnotationColourGradient;\r
+import jalview.schemes.GraduatedColor;\r
+import jalview.util.MessageManager;\r
+\r
+import javax.swing.JCheckBox;\r
+import java.awt.Color;\r
+import java.awt.Dimension;\r
+import java.awt.FlowLayout;\r
+import java.awt.Font;\r
+import javax.swing.JFrame;\r
+import java.awt.GridLayout;\r
+import javax.swing.JLabel;\r
+import javax.swing.JPanel;\r
+import javax.swing.JScrollBar;\r
+import javax.swing.JTextField;\r
+import java.awt.event.ActionEvent;\r
+import java.awt.event.ActionListener;\r
+import java.awt.event.AdjustmentEvent;\r
+import java.awt.event.AdjustmentListener;\r
+import java.awt.event.ItemEvent;\r
+import java.awt.event.ItemListener;\r
+import java.awt.event.MouseEvent;\r
+import java.awt.event.MouseListener;\r
+import java.util.Hashtable;\r
+\r
+public class FeatureColourChooser extends JPanel implements ActionListener,\r
+        AdjustmentListener, ItemListener, MouseListener\r
+{\r
+  JVDialog frame;\r
+\r
+  JFrame owner;\r
+\r
+  FeatureRenderer fr;\r
+\r
+  FeatureSettings fs = null;\r
+\r
+  // AlignmentPanel ap;\r
+\r
+  GraduatedColor cs;\r
+\r
+  Object oldcs;\r
+\r
+  Hashtable oldgroupColours;\r
+\r
+  boolean adjusting = false;\r
+\r
+  private float min, max;\r
+\r
+  String type = null;\r
+\r
+  private AlignFrame af = null;\r
+\r
+  public FeatureColourChooser(AlignFrame af, String type)\r
+  {\r
+    this.af = af;\r
+    init(af.getSeqcanvas().getFeatureRenderer(), type);\r
+  }\r
+\r
+  public FeatureColourChooser(FeatureSettings fsettings, String type)\r
+  {\r
+    this.fs = fsettings;\r
+    init(fsettings.fr, type);\r
+    // this.ap = fsettings.ap;\r
+  }\r
+\r
+  private void init(FeatureRenderer frenderer, String type)\r
+  {\r
+    this.type = type;\r
+    fr = frenderer;\r
+    float mm[] = ((float[][]) fr.getMinMax().get(type))[0];\r
+    min = mm[0];\r
+    max = mm[1];\r
+    oldcs = fr.getFeatureColours().get(type);\r
+    if (oldcs instanceof GraduatedColor)\r
+    {\r
+      cs = new GraduatedColor((GraduatedColor) oldcs, min, max);\r
+    }\r
+    else\r
+    {\r
+      // promote original color to a graduated color\r
+      Color bl = Color.black;\r
+      if (oldcs instanceof Color)\r
+      {\r
+        bl = (Color) oldcs;\r
+      }\r
+      // original colour becomes the maximum colour\r
+      cs = new GraduatedColor(Color.white, bl, mm[0], mm[1]);\r
+    }\r
+    minColour.setBackground(cs.getMinColor());\r
+    maxColour.setBackground(cs.getMaxColor());\r
+    minColour.setForeground(cs.getMinColor());\r
+    maxColour.setForeground(cs.getMaxColor());\r
+    colourFromLabel.setSelected(cs.isColourByLabel());\r
+    adjusting = true;\r
+\r
+    try\r
+    {\r
+      jbInit();\r
+    } catch (Exception ex)\r
+    {\r
+    }\r
+    threshold\r
+            .select(cs.getThreshType() == AnnotationColourGradient.NO_THRESHOLD ? 0\r
+                    : cs.getThreshType() == AnnotationColourGradient.ABOVE_THRESHOLD ? 1\r
+                            : 2);\r
+\r
+    adjusting = false;\r
+    changeColour();\r
+    colourFromLabel.addItemListener(this);\r
+    slider.addAdjustmentListener(this);\r
+    slider.addMouseListener(this);\r
+    owner = (af != null) ? af : fs.frame;\r
+    frame = new JVDialog(owner, MessageManager.formatMessage(\r
+            "label.graduated_color_for_params", new String[]\r
+            { type }), true, 480, 248);\r
+    frame.setMainPanel(this);\r
+    validate();\r
+    frame.setVisible(true);\r
+    if (frame.accept)\r
+    {\r
+      changeColour();\r
+    }\r
+    else\r
+    {\r
+      // cancel\r
+      reset();\r
+      PaintRefresher.Refresh(this, fr.getViewport().getSequenceSetId());\r
+      frame.setVisible(false);\r
+    }\r
+  }\r
+\r
+  public FeatureColourChooser()\r
+  {\r
+    try\r
+    {\r
+      jbInit();\r
+    } catch (Exception ex)\r
+    {\r
+      ex.printStackTrace();\r
+    }\r
+  }\r
+\r
+  private void jbInit() throws Exception\r
+  {\r
+    JLabel minLabel = new JLabel(MessageManager.getString("label.min")), maxLabel = new JLabel(\r
+            MessageManager.getString("label.max"));\r
+    minLabel.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));\r
+    maxLabel.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));\r
+    // minColour.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));\r
+    // minColour.setLabel("Min Colour");\r
+\r
+    minColour.setBounds(0, 0, 40, 27);\r
+    maxColour.setBounds(0, 0, 40, 27);\r
+    minColour.addMouseListener(this);\r
+\r
+    maxColour.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));\r
+    maxColour.addMouseListener(this);\r
+\r
+    thresholdIsMin.addItemListener(this);\r
+\r
+    this.setLayout(new GridLayout(4, 1));\r
+    jPanel1.setLayout(new FlowLayout());\r
+    jPanel2.setLayout(new FlowLayout());\r
+    jPanel3.setLayout(new GridLayout(1, 1));\r
+    jPanel4.setLayout(new FlowLayout());\r
+    jPanel1.setBackground(Color.white);\r
+    jPanel2.setBackground(Color.white);\r
+    jPanel4.setBackground(Color.white);\r
+    threshold.addItemListener(this);\r
+    threshold.addItem(MessageManager\r
+            .getString("label.threshold_feature_no_thereshold"));\r
+    threshold.addItem(MessageManager\r
+            .getString("label.threshold_feature_above_thereshold"));\r
+    threshold.addItem(MessageManager\r
+            .getString("label.threshold_feature_below_thereshold"));\r
+    thresholdValue.addActionListener(this);\r
+    slider.setBackground(Color.white);\r
+    slider.setEnabled(false);\r
+    slider.setSize(new Dimension(93, 21));\r
+    thresholdValue.setEnabled(false);\r
+    thresholdValue.setSize(new Dimension(79, 22)); // setBounds(new\r
+                                                   // Rectangle(248, 2, 79,\r
+                                                   // 22));\r
+    thresholdValue.setColumns(5);\r
+    jPanel3.setBackground(Color.white);\r
+\r
+    colourFromLabel.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));\r
+    colourFromLabel.setLabel(MessageManager\r
+            .getString("label.colour_by_label"));\r
+    colourFromLabel.setSize(new Dimension(139, 22));\r
+    // threshold.setBounds(new Rectangle(11, 3, 139, 22));\r
+    thresholdIsMin.setBackground(Color.white);\r
+    thresholdIsMin.setLabel(MessageManager\r
+            .getString("label.threshold_minmax"));\r
+    thresholdIsMin.setSize(new Dimension(135, 23));\r
+    // thresholdIsMin.setBounds(new Rectangle(328, 3, 135, 23));\r
+    jPanel1.add(minLabel);\r
+    jPanel1.add(minColour);\r
+    jPanel1.add(maxLabel);\r
+    jPanel1.add(maxColour);\r
+    jPanel1.add(colourFromLabel);\r
+    jPanel2.add(threshold);\r
+    jPanel3.add(slider);\r
+    jPanel4.add(thresholdValue);\r
+    jPanel4.add(thresholdIsMin);\r
+    this.add(jPanel1);// , java.awt.BorderLayout.NORTH);\r
+    this.add(jPanel2);// , java.awt.BorderLayout.NORTH);\r
+    this.add(jPanel3);// , java.awt.BorderLayout.CENTER);\r
+    this.add(jPanel4);// , java.awt.BorderLayout.CENTER);\r
+  }\r
+\r
+  JPanel minColour = new JPanel();\r
+\r
+  JPanel maxColour = new JPanel();\r
+\r
+  JPanel jPanel1 = new JPanel();\r
+\r
+  JPanel jPanel2 = new JPanel();\r
+\r
+  Choice threshold = new Choice();\r
+\r
+  JPanel jPanel3 = new JPanel();\r
+\r
+  JPanel jPanel4 = new JPanel();\r
+\r
+  JScrollBar slider = new JScrollBar(JScrollBar.HORIZONTAL);\r
+\r
+  JTextField thresholdValue = new JTextField(20);\r
+\r
+  // BorderLayout borderLayout1 = new BorderLayout();\r
+\r
+  JCheckBox thresholdIsMin = new JCheckBox();\r
+\r
+  JCheckBox colourFromLabel = new JCheckBox();\r
+\r
+  private GraphLine threshline;\r
+\r
+  public void actionPerformed(ActionEvent evt)\r
+  {\r
+    if (evt.getSource() == thresholdValue)\r
+    {\r
+      try\r
+      {\r
+        float f = new Float(thresholdValue.getText()).floatValue();\r
+        slider.setValue((int) (f * 1000));\r
+        adjustmentValueChanged(null);\r
+      } catch (NumberFormatException ex)\r
+      {\r
+      }\r
+    }\r
+    else if (evt.getSource() == minColour)\r
+    {\r
+      minColour_actionPerformed(null);\r
+    }\r
+    else if (evt.getSource() == maxColour)\r
+    {\r
+      maxColour_actionPerformed(null);\r
+    }\r
+    else\r
+    {\r
+      changeColour();\r
+    }\r
+  }\r
+\r
+  public void itemStateChanged(ItemEvent evt)\r
+  {\r
+    maxColour.setEnabled(!colourFromLabel.isSelected());\r
+    minColour.setEnabled(!colourFromLabel.isSelected());\r
+    changeColour();\r
+  }\r
+\r
+  public void adjustmentValueChanged(AdjustmentEvent evt)\r
+  {\r
+    if (!adjusting)\r
+    {\r
+      thresholdValue.setText((slider.getValue() / 1000f) + "");\r
+      valueChanged();\r
+    }\r
+  }\r
+\r
+  protected void valueChanged()\r
+  {\r
+    threshline.value = slider.getValue() / 1000f;\r
+    cs.setThresh(threshline.value);\r
+    changeColour();\r
+    PaintRefresher.Refresh(this, fr.getViewport().getSequenceSetId());\r
+    // ap.paintAlignment(false);\r
+  }\r
+\r
+  public void minColour_actionPerformed(Color newCol)\r
+  {\r
+    if (newCol == null)\r
+    {\r
+      UserDefinedColours udc = new UserDefinedColours(this,\r
+              minColour.getBackground(), owner,\r
+              MessageManager.getString("label.select_colour_minimum_value")); // frame.owner,\r
+    }\r
+    else\r
+    {\r
+      minColour.setBackground(newCol);\r
+      minColour.setForeground(newCol);\r
+      minColour.repaint();\r
+      changeColour();\r
+    }\r
+\r
+  }\r
+\r
+  public void maxColour_actionPerformed(Color newCol)\r
+  {\r
+    if (newCol == null)\r
+    {\r
+\r
+      // UserDefinedColours udc = new UserDefinedColours(this,\r
+      // "Select Colour for Maximum Value",maxColour.getBackground(),true);\r
+      UserDefinedColours udc = new UserDefinedColours(this,\r
+              maxColour.getBackground(), owner,\r
+              MessageManager.getString("label.select_colour_maximum_value"));\r
+    }\r
+    else\r
+    {\r
+      maxColour.setBackground(newCol);\r
+      maxColour.setForeground(newCol);\r
+      maxColour.repaint();\r
+      changeColour();\r
+    }\r
+  }\r
+\r
+  void changeColour()\r
+  {\r
+    // Check if combobox is still adjusting\r
+    if (adjusting)\r
+    {\r
+      return;\r
+    }\r
+\r
+    int aboveThreshold = AnnotationColourGradient.NO_THRESHOLD;\r
+    if (threshold.getSelectedIndex() == 1)\r
+    {\r
+      aboveThreshold = AnnotationColourGradient.ABOVE_THRESHOLD;\r
+    }\r
+    else if (threshold.getSelectedIndex() == 2)\r
+    {\r
+      aboveThreshold = AnnotationColourGradient.BELOW_THRESHOLD;\r
+    }\r
+\r
+    slider.setEnabled(true);\r
+    thresholdValue.setEnabled(true);\r
+    GraduatedColor acg = new GraduatedColor(minColour.getBackground(),\r
+            maxColour.getBackground(), min, max);\r
+\r
+    acg.setColourByLabel(colourFromLabel.isSelected());\r
+    maxColour.setEnabled(!colourFromLabel.isSelected());\r
+    minColour.setEnabled(!colourFromLabel.isSelected());\r
+    if (aboveThreshold == AnnotationColourGradient.NO_THRESHOLD)\r
+    {\r
+      slider.setEnabled(false);\r
+      thresholdValue.setEnabled(false);\r
+      thresholdValue.setText("");\r
+    }\r
+\r
+    else if (aboveThreshold != AnnotationColourGradient.NO_THRESHOLD\r
+            && threshline == null)\r
+    {\r
+      // todo visual indication of feature threshold\r
+      threshline = new GraphLine((max - min) / 2f,\r
+              "Threshold", Color.black);\r
+    }\r
+\r
+    if (aboveThreshold != AnnotationColourGradient.NO_THRESHOLD)\r
+    {\r
+      adjusting = true;\r
+      acg.setThresh(threshline.value);\r
+\r
+      float range = max * 1000f - min * 1000f;\r
+\r
+      slider.setMinimum((int) (min * 1000));\r
+      slider.setMaximum((int) (max * 1000));\r
+      slider.setValue((int) (threshline.value * 1000));\r
+      thresholdValue.setText(threshline.value + "");\r
+      slider.setEnabled(true);\r
+      thresholdValue.setEnabled(true);\r
+      adjusting = false;\r
+    }\r
+\r
+    acg.setThreshType(aboveThreshold);\r
+    if (thresholdIsMin.isSelected()\r
+            && aboveThreshold != AnnotationColourGradient.NO_THRESHOLD)\r
+    {\r
+      if (aboveThreshold == AnnotationColourGradient.ABOVE_THRESHOLD)\r
+      {\r
+        acg = new GraduatedColor(acg, threshline.value, max);\r
+      }\r
+      else\r
+      {\r
+        acg = new GraduatedColor(acg, min, threshline.value);\r
+      }\r
+    }\r
+\r
+    fr.setColour(type, acg);\r
+    cs = acg;\r
+    PaintRefresher.Refresh(this, fr.getViewport().getSequenceSetId());\r
+    // ap.paintAlignment(false);\r
+  }\r
+\r
+  void reset()\r
+  {\r
+    fr.setColour(type, oldcs);\r
+    PaintRefresher.Refresh(this, fr.getViewport().getSequenceSetId());\r
+    // ap.paintAlignment(true);\r
+\r
+  }\r
+\r
+  public void mouseClicked(MouseEvent evt)\r
+  {\r
+  }\r
+\r
+  public void mousePressed(MouseEvent evt)\r
+  {\r
+  }\r
+\r
+  public void mouseReleased(MouseEvent evt)\r
+  {\r
+    if (evt.getSource() == minColour || evt.getSource() == maxColour)\r
+    {\r
+      // relay the event\r
+      actionPerformed(new ActionEvent(evt.getSource(), 1, "Clicked"));\r
+    }\r
+    else\r
+    {\r
+      PaintRefresher.Refresh(this, fr.getViewport().getSequenceSetId());\r
+    }\r
+    // ap.paintAlignment(true);\r
+  }\r
+\r
+  public void mouseEntered(MouseEvent evt)\r
+  {\r
+  }\r
+\r
+  public void mouseExited(MouseEvent evt)\r
+  {\r
+  }\r
+\r
+}\r