bugfix + create/amend whilst feature panel open (still fixing)
[jalview.git] / src / jalview / gui / FeatureRenderer.java
index 65d5f55..10f91b0 100755 (executable)
@@ -398,7 +398,7 @@ public class FeatureRenderer
   synchronized void findAllFeatures()
   {
     findAllFeatures(true); // add all new features as visible
-    if (!newFeatureAdded && !firing) {
+    if (!firing) {
       firing=true;
       changeSupport.firePropertyChange("changeSupport",null,null);
       firing=false;
@@ -478,7 +478,7 @@ public class FeatureRenderer
     updateRenderOrder(allfeatures);
     findingFeatures = false;
   }
-  boolean firing=false;
+  protected boolean firing=false;
   /**
    * replaces the current renderOrder with the unordered features in allfeatures.
    * The ordering of any types in both renderOrder and allfeatures is preserved,
@@ -489,21 +489,21 @@ public class FeatureRenderer
    * 
    * @param allFeatures
    */
-  public void updateRenderOrder(Vector allFeatures) {
+  private void updateRenderOrder(Vector allFeatures) {
     Vector allfeatures = new Vector(allFeatures);
     String[] oldRender = renderOrder;
     renderOrder = new String[allfeatures.size()];
     boolean initOrders=(featureOrder==null);
     int opos=0;
-    if (oldRender!=null)
+    if (oldRender!=null && oldRender.length>0)
     {
-      for (int j=0; i<oldRender.length; j++)
+      for (int j=0; j<oldRender.length; j++)
       {
         if (oldRender[j]!=null)
           {
             if (initOrders)
             {
-              setOrder(oldRender[j], (1-((float)j)/(float) oldRender.length));
+              setOrder(oldRender[j], (1-(1+(float)j)/(float) oldRender.length));
             } 
             if (allfeatures.contains(oldRender[j])) {
               renderOrder[opos++]  = oldRender[j]; // existing features always
@@ -530,9 +530,9 @@ public class FeatureRenderer
       if (initOrders || !featureOrder.containsKey(newf[i])) 
       {
         int denom = initOrders ? allfeatures.size() : featureOrder.size();
-          // new unordered feature - compute persistent ordering at tail of
+          // new unordered feature - compute persistent ordering at head of
           // existing features.
-        setOrder(newf[i], ((float)2*denom)/(float)(1+2*denom));
+        setOrder(newf[i], i/(float) denom);
       }
       // set order from newly found feature from persisted ordering.
       sortOrder[i] = 2-((Float) featureOrder.get(newf[i])).floatValue();
@@ -543,7 +543,7 @@ public class FeatureRenderer
       }
       i--;
     }
-    if (sort)
+    if (iSize>1 && sort)
       jalview.util.QuickSort.sort(sortOrder, newf);
     sortOrder=null;
     System.arraycopy(newf, 0, renderOrder, opos, newf.length);