update author list in license for (JAL-826)
[jalview.git] / src / jalview / appletgui / FeatureSettings.java
index 80559bd..9b2dba6 100755 (executable)
@@ -1,20 +1,19 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1)
- * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
+ * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
  * 
- * This program 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 2
- * of the License, or (at your option) any later version.
+ * This file is part of Jalview.
  * 
- * This program 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.
+ * 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.
  * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ * 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/>.
  */
 package jalview.appletgui;
 
@@ -161,6 +160,7 @@ public class FeatureSettings extends Panel implements ItemListener,
           int x, int y)
   {
     final String type = check.type;
+    final Object typeCol = fr.getFeatureStyle(type);
     java.awt.PopupMenu men = new PopupMenu("Settings for " + type);
     java.awt.MenuItem scr = new MenuItem("Sort by Score");
     men.add(scr);
@@ -206,16 +206,26 @@ public class FeatureSettings extends Panel implements ItemListener,
       {
         // graduated colourschemes for those where minmax exists for the
         // positional features
-        MenuItem mxcol = new MenuItem("Graduated Colour");
+        MenuItem mxcol = new MenuItem(
+                (typeCol instanceof Color) ? "Graduated Colour"
+                        : "Single Colour");
         men.add(mxcol);
         mxcol.addActionListener(new ActionListener()
         {
 
           public void actionPerformed(ActionEvent e)
           {
-            new FeatureColourChooser(me, type);
-            // write back the current colour object to update the table
-            check.updateColor(fr.getFeatureStyle(type));
+            if (typeCol instanceof Color)
+            {
+              new FeatureColourChooser(me, type);
+              // write back the current colour object to update the table
+              check.updateColor(fr.getFeatureStyle(type));
+            }
+            else
+            {
+              new UserDefinedColours(me, check.type,
+                      ((GraduatedColor) typeCol));
+            }
           }
 
         });
@@ -435,8 +445,8 @@ public class FeatureSettings extends Panel implements ItemListener,
       Checkbox source = (Checkbox) evt.getSource();
       if (fr.featureGroups.containsKey(source.getLabel()))
       {
-        fr.featureGroups.put(source.getLabel(), new Boolean(source
-                .getState()));
+        fr.featureGroups.put(source.getLabel(),
+                new Boolean(source.getState()));
         ap.seqPanel.seqCanvas.repaint();
         if (ap.overviewPanel != null)
         {
@@ -555,9 +565,23 @@ public class FeatureSettings extends Panel implements ItemListener,
     }
   }
 
-  public void setUserColour(String feature, Color col)
+  public void setUserColour(String feature, Object originalColour)
+  {
+    if (originalColour instanceof Color
+            || originalColour instanceof GraduatedColor)
+    {
+      fr.setColour(feature, originalColour);
+    }
+    else
+    {
+      throw new Error(
+              "Implementation error: Unsupported feature colour object.");
+    }
+    refreshTable();
+  }
+
+  public void refreshTable()
   {
-    fr.setColour(feature, col);
     featurePanel.removeAll();
     resetTable(false);
     ap.paintAlignment(true);
@@ -578,15 +602,14 @@ public class FeatureSettings extends Panel implements ItemListener,
     {
       this.popupSort(check, fr.minmax, evt.getX(), evt.getY());
     }
-    if (fr.featureLinks != null
-            && fr.featureLinks.containsKey(check.type))
+    if (fr.featureLinks != null && fr.featureLinks.containsKey(check.type))
     {
       if (evt.getX() > check.stringWidth + 20)
       {
         evt.consume();
         String link = fr.featureLinks.get(check.type).toString();
-        ap.alignFrame.showURL(link.substring(link.indexOf("|") + 1), link
-                .substring(0, link.indexOf("|")));
+        ap.alignFrame.showURL(link.substring(link.indexOf("|") + 1),
+                link.substring(0, link.indexOf("|")));
       }
     }
 
@@ -601,7 +624,9 @@ public class FeatureSettings extends Panel implements ItemListener,
       if (fcol instanceof Color)
       {
         new UserDefinedColours(this, check.type, (Color) fcol);
-      } else {
+      }
+      else
+      {
         new FeatureColourChooser(this, check.type);
         // write back the current colour object to update the table
         check.updateColor(fr.getFeatureStyle(check.type));
@@ -623,6 +648,7 @@ public class FeatureSettings extends Panel implements ItemListener,
   class MyCheckbox extends Checkbox
   {
     public String type;
+
     public int stringWidth;
 
     boolean hasLink;
@@ -654,14 +680,19 @@ public class FeatureSettings extends Panel implements ItemListener,
       else
       {
         String vlabel = type;
-        if (gcol.getThreshType()!=AnnotationColourGradient.NO_THRESHOLD)
+        if (gcol.getThreshType() != AnnotationColourGradient.NO_THRESHOLD)
         {
-          vlabel += " "+((gcol.getThreshType()==AnnotationColourGradient.ABOVE_THRESHOLD) ? "(>)" : "(<)");
+          vlabel += " "
+                  + ((gcol.getThreshType() == AnnotationColourGradient.ABOVE_THRESHOLD) ? "(>)"
+                          : "(<)");
         }
-        if (gcol.isColourByLabel()) {
+        if (gcol.isColourByLabel())
+        {
           setBackground(Color.white);
           vlabel += " (by Label)";
-        } else {
+        }
+        else
+        {
           setBackground(gcol.getMinColor());
         }
         this.setLabel(vlabel);
@@ -681,36 +712,37 @@ public class FeatureSettings extends Panel implements ItemListener,
     public MyCheckbox(String type, boolean selected, boolean b,
             Object featureStyle)
     {
-      this(type,selected,b);
+      this(type, selected, b);
       updateColor(featureStyle);
     }
 
     public void paint(Graphics g)
     {
-      int width = getWidth(), height = getHeight();
+      Dimension d = getSize();
       if (gcol != null)
       {
         if (gcol.isColourByLabel())
         {
           g.setColor(Color.white);
-          g.fillRect(width/2, 0,width/2, height);
-          /*g.setColor(Color.black); 
-          Font f=g.getFont().deriveFont(9);
-          g.setFont(f);
-
-          // g.setFont(g.getFont().deriveFont(
-          // AffineTransform.getScaleInstance(
-          // width/g.getFontMetrics().stringWidth("Label"),
-          // height/g.getFontMetrics().getHeight())));
-          g.drawString("Label", width/2, 0); */
+          g.fillRect(d.width / 2, 0, d.width / 2, d.height);
+          /*
+           * g.setColor(Color.black); Font f=g.getFont().deriveFont(9);
+           * g.setFont(f);
+           * 
+           * // g.setFont(g.getFont().deriveFont( //
+           * AffineTransform.getScaleInstance( //
+           * width/g.getFontMetrics().stringWidth("Label"), //
+           * height/g.getFontMetrics().getHeight()))); g.drawString("Label",
+           * width/2, 0);
+           */
 
         }
         else
         {
           Color maxCol = gcol.getMaxColor();
           g.setColor(maxCol);
-          g.fillRect(width/2, 0,width/2, height);
-          
+          g.fillRect(d.width / 2, 0, d.width / 2, d.height);
+
         }
       }