more graduated feature support
[jalview.git] / src / jalview / gui / FeatureRenderer.java
index ade8915..8d09d10 100755 (executable)
@@ -349,8 +349,13 @@ public class FeatureRenderer
           if (sequenceFeatures[sfindex].begin <= start
                   && sequenceFeatures[sfindex].end >= start)
           {
-            currentColour = av.featuresDisplayed
-                    .get(sequenceFeatures[sfindex].type);
+            // this is passed out to the overview and other sequence renderers (e.g. molecule viewer) to get displayed colour for rendered sequence
+            currentColour = new Integer(getColour(sequenceFeatures[sfindex]).getRGB());
+             // used to be retreived from av.featuresDisplayed
+            // currentColour = av.featuresDisplayed
+            //        .get(sequenceFeatures[sfindex].type);
+             
+            
           }
         }
         else if (sequenceFeatures[sfindex].type.equals("disulfide bond"))
@@ -361,16 +366,20 @@ public class FeatureRenderer
                   seq,
                   seq.findIndex(sequenceFeatures[sfindex].begin) - 1,
                   seq.findIndex(sequenceFeatures[sfindex].begin) - 1,
-                  new Color(((Integer) av.featuresDisplayed
-                          .get(sequenceFeatures[sfindex].type)).intValue()),
+                  getColour(sequenceFeatures[sfindex])
+                  //new Color(((Integer) av.featuresDisplayed
+                  //        .get(sequenceFeatures[sfindex].type)).intValue())
+                  ,
                   start, end, y1);
           renderFeature(
                   g,
                   seq,
                   seq.findIndex(sequenceFeatures[sfindex].end) - 1,
                   seq.findIndex(sequenceFeatures[sfindex].end) - 1,
-                  new Color(((Integer) av.featuresDisplayed
-                          .get(sequenceFeatures[sfindex].type)).intValue()),
+                  getColour(sequenceFeatures[sfindex])
+                  //new Color(((Integer) av.featuresDisplayed
+                  //        .get(sequenceFeatures[sfindex].type)).intValue())
+                  ,
                   start, end, y1);
 
         }
@@ -715,7 +724,7 @@ public class FeatureRenderer
    * types, in the order given by getOrder or the order given in allFeatures.
    * Note. this operates directly on the featureOrder hash for efficiency. TODO:
    * eliminate the float storage for computing/recalling the persistent ordering
-   * 
+   * New Cability: updates min/max for colourscheme range if its dynamic
    * @param allFeatures
    */
   private void updateRenderOrder(Vector allFeatures)
@@ -723,6 +732,7 @@ public class FeatureRenderer
     Vector allfeatures = new Vector(allFeatures);
     String[] oldRender = renderOrder;
     renderOrder = new String[allfeatures.size()];
+    Object mmrange,fc=null;
     boolean initOrders = (featureOrder == null);
     int opos = 0;
     if (oldRender != null && oldRender.length > 0)
@@ -741,9 +751,21 @@ public class FeatureRenderer
             renderOrder[opos++] = oldRender[j]; // existing features always
             // appear below new features
             allfeatures.removeElement(oldRender[j]);
+            if (minmax!=null)
+            {
+              mmrange = minmax.get(oldRender[j]);
+              if (mmrange!=null)
+              {
+                fc = featureColours.get(oldRender[j]);
+                if (fc!=null && fc instanceof GraduatedColor && ((GraduatedColor)fc).isAutoScale())
+                {
+                  ((GraduatedColor) fc).updateBounds(((float[][])mmrange)[0][0],((float[][])mmrange)[0][1]);
+                }
+            }
           }
         }
       }
+      }
     }
     if (allfeatures.size() == 0)
     {
@@ -760,6 +782,19 @@ public class FeatureRenderer
     while (en.hasMoreElements())
     {
       newf[i] = en.nextElement().toString();
+      if (minmax!=null)
+      {
+        // update from new features minmax if necessary
+        mmrange = minmax.get(newf[i]);
+        if (mmrange!=null) 
+        {
+          fc = featureColours.get(newf[i]);
+          if (fc!=null && fc instanceof GraduatedColor && ((GraduatedColor)fc).isAutoScale())
+          {
+            ((GraduatedColor) fc).updateBounds(((float[][])mmrange)[0][0],((float[][])mmrange)[0][1]);
+          }
+        }
+      }
       if (initOrders || !featureOrder.containsKey(newf[i]))
       {
         int denom = initOrders ? allfeatures.size() : featureOrder.size();
@@ -777,7 +812,9 @@ public class FeatureRenderer
       i--;
     }
     if (iSize > 1 && sort)
+    {
       jalview.util.QuickSort.sort(sortOrder, newf);
+    }
     sortOrder = null;
     System.arraycopy(newf, 0, renderOrder, opos, newf.length);
   }
@@ -800,7 +837,7 @@ public class FeatureRenderer
     {
       if (fc instanceof GraduatedColor)
       {
-        return ((GraduatedColor) fc).getMinColor();
+        return ((GraduatedColor) fc).getMaxColor();
       }
       // TODO: raise an implementation error here.
       return null; // Color.white;