src/lib/cheapcgi.c 1.111

1.111 2009/03/13 23:00:34 tdreszer
Add support for enable/disabling checkboxes by having 4 state boolShad hidden inputs
Index: src/lib/cheapcgi.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/lib/cheapcgi.c,v
retrieving revision 1.110
retrieving revision 1.111
diff -b -B -U 4 -r1.110 -r1.111
--- src/lib/cheapcgi.c	26 Feb 2009 04:01:13 -0000	1.110
+++ src/lib/cheapcgi.c	13 Mar 2009 23:00:34 -0000	1.111
@@ -997,28 +997,29 @@
 safef(buf, sizeof(buf), "%s%s", cgiBooleanShadowPrefix(), name);
 return cgiVarExists(buf);
 }
 
-static void cgiCommonMakeCheckBox(char *name, boolean checked, char *id, char *moreHtml)
+static void cgiMakeCheckBox2Bool(char *name, boolean checked, boolean enabled, char *id, char *moreHtml)
 /* Make check box - designed to be called by the variously overloaded
  * cgiMakeCheckBox functions, and should NOT be called directly.
  * moreHtml: optional additional html like javascript call or mouseover msg (may be NULL)
  * id: button id (may be NULL)
- * Also make a shadow hidden variable so we
- * can distinguish between variable not present and
- * variable set to false. */
+ * Also make a shadow hidden variable and support 2 boolean states:
+ *    checked/unchecked and enabled/disabled. */
 {
 char buf[256], idBuf[256];
 
 if(id)
     safef(idBuf, sizeof(idBuf), " id=\"%s\"", id);
 else
     idBuf[0] = 0;
 
-printf("<INPUT TYPE=CHECKBOX NAME=\"%s\"%s VALUE=on %s %s>", name, idBuf,
-    (moreHtml ? moreHtml : ""), (checked ? "CHECKED" : ""));
+printf("<INPUT TYPE=CHECKBOX NAME=\"%s\"%s VALUE=on %s%s%s>", name, idBuf,
+    (moreHtml ? moreHtml : ""),
+    (checked ? " CHECKED" : ""),
+    (enabled ? "" : " DISABLED"));
 safef(buf, sizeof(buf), "%s%s", cgiBooleanShadowPrefix(), name);
-cgiMakeHiddenVar(buf, "1");
+cgiMakeHiddenVar(buf, ( enabled ? (checked ? "1" : "0") : (checked ? "-1" : "-2")));
 }
 
 void cgiMakeCheckBoxUtil(char *name, boolean checked, char *msg, char *id)
 /* Make check box - can be called directly, though it was originally meant
@@ -1032,38 +1033,45 @@
     safef(buf, sizeof(buf), "TITLE=\"%s\"", msg);
 else
     buf[0] = 0;
 
-cgiCommonMakeCheckBox(name, checked, id, buf);
+cgiMakeCheckBox2Bool(name, checked, TRUE, id, buf);
 }
 
 void cgiMakeCheckBoxWithMsg(char *name, boolean checked, char *msg)
 {
-cgiCommonMakeCheckBox(name, checked, NULL, msg);
+cgiMakeCheckBox2Bool(name, checked, TRUE, NULL, msg);
 }
 
 void cgiMakeCheckBoxWithId(char *name, boolean checked, char *id)
 /* Make check box, which includes an ID. */
 {
-cgiCommonMakeCheckBox(name, checked, id, NULL);
+cgiMakeCheckBox2Bool(name, checked, TRUE, id, NULL);
 }
 
 void cgiMakeCheckBox(char *name, boolean checked)
 /* Make check box. */
 {
-cgiCommonMakeCheckBox(name, checked, NULL, NULL);
+cgiMakeCheckBox2Bool(name, checked, TRUE, NULL, NULL);
 }
 
 void cgiMakeCheckBoxJS(char *name, boolean checked, char *javascript)
 /* Make check box with javascript. */
 {
-cgiCommonMakeCheckBox(name,checked,NULL,javascript);
+cgiMakeCheckBox2Bool(name,checked,TRUE,NULL,javascript);
 }
 
 void cgiMakeCheckBoxIdAndJS(char *name, boolean checked, char *id, char *javascript)
 /* Make check box with ID and javascript. */
 {
-cgiCommonMakeCheckBox(name,checked,id,javascript);
+cgiMakeCheckBox2Bool(name,checked,TRUE,id,javascript);
+}
+
+void cgiMakeCheckBox2BoolWithIdAndJS(char *name, boolean checked, boolean enabled,char *id, char *javascript)
+/* Make check box supporting 2 boolean state: checke/unchecked and enabled/disabled
+   Also support ID and javascript.*/
+{
+cgiMakeCheckBox2Bool(name,checked,enabled,id,javascript);
 }
 
 void cgiMakeHiddenBoolean(char *name, boolean on)
 /* Make hidden boolean variable. Also make a shadow hidden variable so we