src/hg/lib/cart.c 1.104

1.104 2009/03/13 23:25:43 tdreszer
Add support for enable/disabling checkboxes by having 4 state boolShad hidden inputs
Index: src/hg/lib/cart.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/lib/cart.c,v
retrieving revision 1.103
retrieving revision 1.104
diff -b -B -U 4 -r1.103 -r1.104
--- src/hg/lib/cart.c	9 Feb 2009 17:01:06 -0000	1.103
+++ src/hg/lib/cart.c	13 Mar 2009 23:25:43 -0000	1.104
@@ -311,9 +311,10 @@
     {
     if (startsWith(booShadow, cv->name))
         {
 	char *booVar = cv->name + booSize;
-	char *val = (cgiVarExists(booVar) ? "1" : "0");
+    // Support for 2 boolean CBs: checked/unchecked (1/0) and enabled/disabled:(-1/-2)
+	char *val = (cgiVarExists(booVar) ? "1" : cv->val);
 	storeInOldVars(cart, oldVars, booVar);
 	cartRemove(cart, booVar);
 	hashAdd(cgiHash, booVar, val);
 	hashAdd(booHash, booVar, NULL);
@@ -953,9 +954,9 @@
 boolean cartBoolean(struct cart *cart, char *var)
 /* Retrieve cart boolean. */
 {
 char *s = cartString(cart, var);
-if (sameString(s, "on") || atoi(s) != 0)
+if (sameString(s, "on") || atoi(s) > 0)
     return TRUE;
 else
     return FALSE;
 }
@@ -965,12 +966,9 @@
 {
 char *s = cartOptionalString(cart, var);
 if (s == NULL)
     return usual;
-if (sameString(s, "on") || atoi(s) != 0)
-    return TRUE;
-else
-    return FALSE;
+return (sameString(s, "on") || atoi(s) > 0);
 }
 
 boolean cartCgiUsualBoolean(struct cart *cart, char *var, boolean usual)
 /* Look for var in CGI, then in cart, if not found then return usual. */
@@ -984,9 +982,9 @@
 
 void cartSetBoolean(struct cart *cart, char *var, boolean val)
 /* Set boolean value. */
 {
-cartSetInt(cart,var,val);
+cartSetInt(cart,var,(val?1:0)); // Be explicit because some cartBools overloaded with negative "disabled" values
 }
 
 void cartMakeTextVar(struct cart *cart, char *var, char *defaultVal, int charSize)
 /* Make a text control filled with value from cart if it exists or
@@ -1688,9 +1686,9 @@
 /* Returns value or Aborts for a cart boolean ('on' or != 0) from lowest level on up:
    subtrackName.suffix, then compositeName.view.suffix, then compositeName.suffix */
 {
 char *setting = cartStringClosestToHome(cart,tdb,compositeLevel,suffix);
-return (sameString(setting, "on") || atoi(setting) != 0);
+return (sameString(setting, "on") || atoi(setting) > 0);
 }
 
 boolean cartUsualBooleanClosestToHome(struct cart *cart, struct trackDb *tdb, boolean compositeLevel, char *suffix,boolean usual)
 /* Returns value or {usual} for a cart boolean ('on' or != 0) from lowest level on up:
@@ -1698,9 +1696,9 @@
 {
 char *setting = cartOptionalStringClosestToHome(cart,tdb,compositeLevel,suffix);
 if(setting == NULL)
     return usual;
-return (sameString(setting, "on") || atoi(setting) != 0);
+return (sameString(setting, "on") || atoi(setting) > 0);
 }
 
 
 int cartUsualIntClosestToHome(struct cart *cart, struct trackDb *tdb, boolean compositeLevel, char *suffix, int usual)