d4178f33139c9bd7c848f5d2ee958fb8838155df
larrym
  Fri Oct 21 12:22:52 2011 -0700
fix shifted checkbox problem (see redmine #3955)
diff --git src/hg/hgCustom/hgCustom.c src/hg/hgCustom/hgCustom.c
index cd71ed5..e7077a3 100644
--- src/hg/hgCustom/hgCustom.c
+++ src/hg/hgCustom/hgCustom.c
@@ -448,64 +448,74 @@
 {
 /* print table column header with white text on black background */
 puts("<TD ALIGN='CENTER' BGCOLOR='#536ED3' ");
 if (description)
     printf("TITLE='%s'", description);
 printf("><B>%s</B></TD> ", wrapWhiteFont(label));
 }
 
 void showCustomTrackList(struct customTrack *ctList, int numCts)
 /* print table of custom tracks with controls */
 {
 struct customTrack *ct;
 char buf[256];
 char *pos = NULL;
 char *dataUrl;
+int colSpan = 4;
 
 /* handle 'set all' and 'clr all' */
 boolean setAllDelete = FALSE;
 boolean setAllUpdate = FALSE;
 if (cartVarExists(cart, hgCtDoDeleteSet))
     setAllDelete = TRUE;
 if (cartVarExists(cart, hgCtDoRefreshSet))
     setAllUpdate = TRUE;
 
 /* determine which columns to display (avoid empty columns) */
 int updateCt = 0, itemCt = 0, posCt = 0, errCt = 0;
 for (ct = ctList; ct != NULL; ct = ct->next)
     {
     if (ctDataUrl(ct))
         updateCt++;
     if (ctItemCount(ct) > 0)
         itemCt++;
     if (ctInitialPosition(ct) || ctFirstItemPos(ct))
         posCt++;
     if (ct->networkErrMsg)
 	errCt++;
     }
 hTableStart();
 cgiSimpleTableRowStart();
 tableHeaderField("Name", "Short track identifier");
 tableHeaderField("Description", "Long track identifier");
 tableHeaderField("Type", "Data format of track");
 tableHeaderField("Doc", "HTML track description");
 if (itemCt)
+    {
     tableHeaderField("Items", "Count of discrete items in track");
+    colSpan++;
+    }
 if (posCt)
+    {
     tableHeaderField("Pos"," Go to genome browser at default track position or first item");
+    colSpan++;
+    }
 if (errCt)
+    {
     tableHeaderField("Error"," Error in custom track");
+    colSpan++;
+    }
 
 boolean showAllButtons = FALSE;
 if (numCts > 3)
     showAllButtons = TRUE;
 
 tableHeaderFieldStart(showAllButtons ? 2 : 1);
 cgiMakeButtonWithMsg(hgCtDoDelete, "delete", "Remove custom track");
 cgiTableFieldEnd();
 
 /* add column with Update button if any custom tracks are updateable */
 if (updateCt)
     {
     tableHeaderFieldStart(showAllButtons ? 2 : 1);
     cgiMakeButtonWithMsg(hgCtDoRefresh, "update", "Refresh from data URL");
     cgiTableFieldEnd();
@@ -589,31 +599,31 @@
         {
         printf("<TD COLSPAN=%d ALIGN=CENTER>", showAllButtons ? 2 : 1);
         safef(buf, sizeof(buf), "%s_%s", hgCtRefreshPrefix,
                 ct->tdb->track);
         if ((dataUrl = ctDataUrl(ct)) != NULL)
             cgiMakeCheckBoxWithMsg(buf, setAllUpdate, dataUrl);
         else
             puts("&nbsp;");
 	puts("</TD>");
         }
     puts("</TR>\n");
     }
 if (showAllButtons)
     {
     cgiSimpleTableRowStart();
-    puts("<TD COLSPAN=6 ALIGN='RIGHT'>check all / clear all&nbsp;</TD>");
+    printf("<TD COLSPAN=%d ALIGN='RIGHT'>check all / clear all&nbsp;</TD>", colSpan);
     cgiSimpleTableFieldStart();
     cgiMakeButtonWithMsg(hgCtDoDeleteSet, "+", "Select all for deletion");
     cgiTableFieldEnd();
     cgiSimpleTableFieldStart();
     cgiMakeButtonWithMsg(hgCtDoDeleteClr, "-", "Clear all for deletion");
     cgiTableFieldEnd();
     if (updateCt)
         {
         cgiSimpleTableFieldStart();
         cgiMakeButtonWithMsg(hgCtDoRefreshSet, "+", "Select all for update");
         cgiTableFieldEnd();
         cgiSimpleTableFieldStart();
         cgiMakeButtonWithMsg(hgCtDoRefreshClr, "-", "Clear all for update");
         cgiTableFieldEnd();
         }