e826c3a1fbfc64c882bb8a20446e7ce9d593e5db
tdreszer
  Mon Aug 16 10:39:19 2010 -0700
If dragReordered, successive newly visible tracks should appear below others
diff --git src/hg/hgTracks/imageV2.c src/hg/hgTracks/imageV2.c
index 7e7773f..e068647 100644
--- src/hg/hgTracks/imageV2.c
+++ src/hg/hgTracks/imageV2.c
@@ -58,6 +58,37 @@
 void flatTracksSort(struct flatTracks **flatTracks)
 // This routine sorts the imgTracks then forces tight ordering, so new tracks wil go to the end
 {
+// flatTracks list has 2 sets of "order": those already dragReordered (below IMG_ORDEREND)
+// and those not yet reordered (above).  It has been decided that adding new tracks to an
+// existing order should always put the new tracks below existing and treat them as if they
+// were reordered there.  Thus all new tracks should get an imgOrd below IMG_ORDEREND.
+// The result is turning on a successive set of new tracks will have them appear below all others.
+int imgOrdSet = 0;
+boolean notYetOrdered = FALSE;
+struct flatTracks *oneTrack = *flatTracks;
+for(;oneTrack!=NULL;oneTrack = oneTrack->next)
+    {
+    if (oneTrack->order <= IMG_ORDEREND
+    &&  imgOrdSet < oneTrack->order )
+        imgOrdSet = oneTrack->order;
+    else
+        notYetOrdered = TRUE;
+    }
+if (imgOrdSet > 0 && notYetOrdered) // Image order has previously been set, so givem all imgOrds
+    {
+    imgOrdSet = (IMG_ORDEREND - imgOrdSet);  // This difference should be removed from any with imgOrdSet
+    for(oneTrack = *flatTracks;oneTrack!=NULL;oneTrack = oneTrack->next)
+        {
+        if (oneTrack->order >= imgOrdSet)
+            {
+            oneTrack->order -= imgOrdSet;
+            char var[256];
+            safef(var,sizeof(var),"%s_%s",oneTrack->track->track,IMG_ORDER_VAR);
+            cartSetInt(cart, var, oneTrack->order);
+            }
+        }
+    }
+
 if(flatTracks && *flatTracks)
     slSort(flatTracks, flatTracksCmp);
 }