src/hg/lib/hui.c 1.174

1.174 2009/03/13 23:29:09 tdreszer
Add support for enable/disabling checkboxes by having 4 state boolShad hidden inputs
Index: src/hg/lib/hui.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/lib/hui.c,v
retrieving revision 1.173
retrieving revision 1.174
diff -b -B -U 4 -r1.173 -r1.174
--- src/hg/lib/hui.c	13 Mar 2009 23:02:08 -0000	1.173
+++ src/hg/lib/hui.c	13 Mar 2009 23:29:09 -0000	1.174
@@ -2702,20 +2702,27 @@
     }
 
 for (subtrack = parentTdb->subtracks; subtrack != NULL; subtrack = subtrack->next)
     {
-    boolean alreadySet = TRUE;
+    boolean checkedCB = TRUE;
+    boolean enabledCB = TRUE;
     boolean isPrimary = FALSE;
     char *setting;
     int ix;
 
-    safef(htmlIdentifier, sizeof(htmlIdentifier), "%s_sel", subtrack->tableName);
     if ((setting = trackDbSetting(subtrack, "subTrack")) != NULL)
         {
         if (chopLine(cloneString(setting), words) >= 2)
-            alreadySet = differentString(words[1], "off");
+            checkedCB = differentString(words[1], "off");
+        }
+    safef(htmlIdentifier, sizeof(htmlIdentifier), "%s_sel", subtrack->tableName);
+    setting = cartOptionalString(cart, htmlIdentifier);
+    if(setting != NULL)
+        {
+        int state = atoi(setting);
+        checkedCB = (state == 1 || state == -1);  // checked/eanbled:1 unchecked/enabled:0 checked/disabled:-1 unchecked/disabled:-2
+        enabledCB = (state >= 0);
         }
-    alreadySet = cartUsualBoolean(cart, htmlIdentifier, alreadySet);
     isPrimary = (primarySubtrack &&
          sameString(subtrack->tableName, primarySubtrack));
 
     if (primarySubtrack)
@@ -2731,9 +2738,9 @@
         else if (hSameTrackDbType(primaryType, subtrack->type) &&
                      hTableExists(db, subtrack->tableName))
             {
             puts("<TR><TD>");
-            cgiMakeCheckBox(htmlIdentifier, alreadySet);
+            cgiMakeCheckBox(htmlIdentifier, checkedCB && enabledCB);
             printf ("</TD><TD>%s</TD></TR>\n", subtrack->longLabel);
             }
         }
     else
@@ -2766,9 +2773,9 @@
                 if(dimensions[di] && -1 != (ix = stringArrayIx(dimensions[di]->tag, membership->subgroups, membership->count)))
                     dyStringPrintf(dyHtml, " %s",membership->membership[ix]);
                 }
             dyStringAppendC(dyHtml,'"');
-            cgiMakeCheckBoxIdAndJS(htmlIdentifier,alreadySet,id,dyStringContents(dyHtml));
+            cgiMakeCheckBox2BoolWithIdAndJS(htmlIdentifier,checkedCB,enabledCB,id,dyStringContents(dyHtml));
             if(sortOrder != NULL || useDragAndDrop)
                 {
                 safef(htmlIdentifier, sizeof(htmlIdentifier), "%s.priority", subtrack->tableName);
                 float priority = (float)cartUsualDouble(cart, htmlIdentifier, subtrack->priority);
@@ -4379,10 +4386,9 @@
                     continue;
                 if (sameString(subName, subGroup) && sameString(subValue, name))
                     {
                     boolean newVal = FALSE;
-                            safef(option, sizeof(option),
-                                    "%s_sel", subtrack->tableName);
+                    safef(option, sizeof(option),"%s_sel", subtrack->tableName);
                     newVal = sameString(button, ADD_BUTTON_LABEL);
                     if (primarySubtrack)
                         {
                         if (sameString(subtrack->tableName, primarySubtrack))
@@ -4471,9 +4477,9 @@
 if(trackDbSetting(tdb, "wgEncode") != NULL)
     {
     printf("<P><A HREF=\"http://%s/goldenPath/%s/%s/\" TARGET=_BLANK>Downloads</A></P>\n",
             cfgOptionDefault("downloads.server", "hgdownload.cse.ucsc.edu"),
-           (trackDbSetting(tdb, "origAssembly") != NULL ?trackDbSetting(tdb, "origAssembly"):"hg18"),
+            trackDbSettingOrDefault(tdb, "origAssembly","hg18"),
             tdb->tableName);
     return TRUE;
     }
 return FALSE;