1a89c8e587e4cdbdb94430448caaa19247871cb8
tdreszer
  Thu Sep 22 13:01:11 2011 -0700
Big load of changes for subCfg.
diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index 255cdd6..fdde31f 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -3990,30 +3990,31 @@
 
 // The subtracks need to be sorted by priority but only sortable and dragable will have non-default (cart) priorities to sort on
 if (sortOrder != NULL || useDragAndDrop)
     {
     preSorted = tdbRefSortPrioritiesFromCart(cart, &subtrackRefList); // preserves user's prev sort/drags
     printf("<TBODY class='%saltColors'>\n",(sortOrder != NULL ? "sortable " : "") );
     }
 else
     {
     slSort(&subtrackRefList, trackDbRefCmp);  // straight from trackDb.ra
     preSorted = TRUE;
     puts("<TBODY>");
     }
 
 // Finally the big "for loop" to list each subtrack as a table row.
+printf("\n<!-- ----- subtracks list ----- -->\n");
 for (subtrackRef = subtrackRefList; subtrackRef != NULL; subtrackRef = subtrackRef->next)
     {
     subtrack = subtrackRef->val;
     int ix;
 
     // Determine whether subtrack is checked, visible, configurable, has group membership, etc.
     int fourState = subtrackFourStateChecked(subtrack,cart);
     boolean checkedCB = fourStateChecked(fourState);
     boolean enabledCB = fourStateEnabled(fourState);
     boolean visibleCB = fourStateVisible(fourState);
     eCfgType cType = cfgTypeFromTdb(subtrack,FALSE);
     if (cType != cfgNone)
         {
     #ifdef SUBTRACK_CFG
         // Turn off configuring for certain track type or if explicitly turned off
@@ -4051,105 +4052,45 @@
     for(di=dimX;di<membersForAll->dimMax;di++)
         {
         if (membersForAll->members[di] && -1 != (ix = stringArrayIx(membersForAll->members[di]->groupTag, membership->subgroups, membership->count)))
             dyStringPrintf(dyHtml," %s",membership->membership[ix]);
         }
     if (membersForAll->members[dimV] && -1 != (ix = stringArrayIx(membersForAll->members[dimV]->groupTag, membership->subgroups, membership->count)))
         dyStringPrintf(dyHtml, " %s",membership->membership[ix]);  // Saved view for last
 
     // And finally the checkBox is made!
     safef(buffer, sizeof(buffer), "%s_sel", subtrack->track);
     cgiMakeCheckBoxFourWay(buffer,checkedCB,enabledCB,id,dyStringContents(dyHtml),"onclick='matSubCbClick(this);' style='cursor:pointer'");
     if (useDragAndDrop)
         printf("&nbsp;");
 
 #ifdef SUBTRACK_CFG
-#define SUBTRACK_CFG_VIS_SEEN
-#ifdef SUBTRACK_CFG_VIS_SEEN
     enum trackVisibility vis = tdbVisLimitedByAncestors(cart,subtrack,FALSE,FALSE);
     char *view = NULL;
     if (membersForAll->members[dimV] && -1 != (ix = stringArrayIx(membersForAll->members[dimV]->groupTag, membership->subgroups, membership->count)))
         view = membership->membership[ix];
-    //enum trackVisibility vis = tdbVisLimitedByAncestry(cart, subtrack, TRUE);
-    //if (fourStateVisible(fourState))
-    //    {
-    //    safef(buffer, sizeof(buffer), " onclick='return scm.cfgToggle(\"%s\");'%s",subtrack->track,(fourStateVisible(fourState) ?"":" disabled"));
-    //    char classList[256];
-    //    if (view != NULL)
-    //        safef(classList,sizeof(classList),"normalText subVisDD %s",view);
-    //    else
-    //        safecpy(classList,sizeof(classList),"normalText subVisDD");
-    //    hTvDropDownClassVisOnlyAndExtra(subtrack->track,vis,TRUE,classList, NULL,buffer);
-    //    }
-    //else
-    //    {
         char classList[256];
         if (view != NULL)
             safef(classList,sizeof(classList),"clickable fauxInput%s subVisDD %s",(visibleCB ? "":" disabled"),view); // view should be last!
         else
             safef(classList,sizeof(classList),"clickable fauxInput%s subVisDD",(visibleCB ? "":" disabled"));
         #define SUBTRACK_CFG_VIS "<div id= '%s_faux' class='%s' style='width:65px;' onclick='return scm.replaceWithVis(this,\"%s\",true);'>%s</div>\n"
         printf(SUBTRACK_CFG_VIS,subtrack->track,classList,subtrack->track,hStringFromTv(vis));
-    //    }
-#endif///def SUBTRACK_CFG_VIS_SEEN
     if (cType != cfgNone)  // make a wrench
         {
-        //#define SUBTRACK_CFG_STARRED
-        #ifdef SUBTRACK_CFG_STARRED
-            //lmCleanup(&lm);
-            //struct lm *lm = lmInit(0); // FIXME: If used, move lmInit to outside of subtrack loop.
-            //struct slPair *changeViewSettings = cartVarsWithPrefixLm(cart, subtrack->track, lm);
-            struct slPair *subSpecificSettings = cartVarsWithPrefix(cart, subtrack->track);
-            buffer[0] = '\0';
-            if (subSpecificSettings)
-                {
-                // Not interested in some:
-                struct slPair *subSpecificFiltered = NULL;
-                struct slPair *onePair;
-                while(subSpecificSettings)
-                    {
-                    onePair = slPopHead(&subSpecificSettings);
-                    if (!endsWith(onePair->name,"_sel")
-                    && !endsWith(onePair->name,".priority")
-                    && !endsWith(onePair->name,"_imgOrd"))
-                        slAddHead(&subSpecificFiltered,onePair);
-                    //else
-                    //    slPairFreeValsAndList(&onePair)
-                    }
-                subSpecificSettings = subSpecificFiltered;
-                if (subSpecificSettings)
-                    safef(buffer, sizeof(buffer), " (has differences)");
-                    // DEBUGGING are there other differences to be filtered
-                    //safef(buffer, sizeof(buffer), " (has %d differences", slCount(subSpecificSettings));
-                    //safef(buffer, sizeof(buffer), "<span class='diff' title='Subtrack specific differences %d'>&#42;</span>", slCount(subSpecificSettings));
-                    //printf("<span id-'%s_differs'>&#42;<sup>%d</sup></span>\n",subtrack->track,slCount(subSpecificSettings));
-                    //{
-                    //printf("<span id-'%s_differs'>&#42;<sup>%d",subtrack->track,slCount(subSpecificSettings));
-                    //onePair = subSpecificSettings;
-                    //for(;onePair != NULL;onePair = onePair->next)
-                    //    printf(", %s=%s",onePair->name,(char *)onePair->val);
-                    //printf("</sup></span>\n");
-                    //}
-                }
-            #define SUBTRACK_CFG_WRENCH "<span class='clickable' onclick='return scm.cfgToggle(\"%s\");' title='Configure this subtrack%s'><img src='../images/wrench.png'>%s</span>\n"
-            printf(SUBTRACK_CFG_WRENCH,subtrack->track,buffer,(subSpecificSettings?"<span class='diff'>&#42;</span>":""));
-            // TODO: js support for adding/removing star.  Problem: how many differences will there be?
-        #else///ifndef SUBTRACK_CFG_STARRED
-            //#define SUBTRACK_CFG_WRENCH "<a href='#a_cfg' onclick='return scm.cfgToggle(\"%s\");' title='Configure this subtrack'><img src='../images/wrench.png'></a>\n"
             #define SUBTRACK_CFG_WRENCH "<span class='clickable%s' onclick='return scm.cfgToggle(this,\"%s\");' title='Configure this subtrack'><img src='../images/wrench.png'></span>\n"
             printf(SUBTRACK_CFG_WRENCH,(visibleCB ? "":" halfVis"),subtrack->track);
-        #endif///ndef SUBTRACK_CFG_STARRED
         }
 #endif///def SUBTRACK_CFG
 
     // A hidden field to keep track of subtrack order if it could change
     if (sortOrder != NULL || useDragAndDrop)
         {
         safef(buffer, sizeof(buffer), "%s.priority", subtrack->track);
         float priority = (float)cartUsualDouble(cart, buffer, subtrack->priority);
         printf("<INPUT TYPE=HIDDEN NAME='%s' class='trPos' VALUE=\"%.0f\">", buffer, priority); // keeing track of priority
         }
 
     // A color patch which helps distinguish subtracks in some types of composites
     if (doColorPatch)
         {
         printf("<TD BGCOLOR='#%02X%02X%02X'>&nbsp;&nbsp;&nbsp;&nbsp;</TD>",
@@ -6960,33 +6901,35 @@
 boolean isMatrix = dimensionsExist(tdb);
 boolean viewsOnly = FALSE;
 
 if (primarySubtrack == NULL && !cartVarExists(cart, "ajax"))
     {
     if(trackDbSetting(tdb, "dragAndDrop") != NULL)
         jsIncludeFile("jquery.tablednd.js", NULL);
     jsIncludeFile("ajax.js",NULL);
     #ifdef TABLE_SCROLL
     jsIncludeFile("jquery.fixedtable.js",NULL);
     #endif//def TABLE_SCROLL
     jsIncludeFile("hui.js",NULL);
     }
 
 #ifdef SUBTRACK_CFG
-cgiMakeHiddenVar("db", db); // TODO: Change these to json vars as per Larry's new method
-printf("<input type=HIDDEN id='track' value='%s'>\n",tdb->track);
-#endif
+    jsonHashAddBoolean(NULL, "subCfg", TRUE);
+#else///ifndef SUBTRACK_CFG
+    jsonHashAddBoolean(NULL, "subCfg", FALSE);
+#endif///ndef SUBTRACK_CFG
+
 cgiDown(0.7);
 if (trackDbCountDescendantLeaves(tdb) < MANY_SUBTRACKS && !hasSubgroups)
     {
     if(primarySubtrack)
         compositeUiSubtracksMatchingPrimary(db, cart, tdb,primarySubtrack);
     else
         compositeUiSubtracks(db, cart, tdb, trackHash);
     return;
     }
 if (fakeSubmit)
     cgiMakeHiddenVar(fakeSubmit, "submit");
 
 if(primarySubtrack == NULL)
     {
     if(subgroupingExists(tdb,"view"))