a65191178abf20e941ffab2da9bcde554de0a360
hiram
  Wed Aug 31 11:19:57 2011 -0700
very initial experiment for progress meter, long way to go
diff --git src/hg/hgCustom/hgCustom.c src/hg/hgCustom/hgCustom.c
index 05b4181..1977ba9 100644
--- src/hg/hgCustom/hgCustom.c
+++ src/hg/hgCustom/hgCustom.c
@@ -58,30 +58,33 @@
 #define hgCtDeletePrefix "hgct_del"
 #define hgCtRefreshPrefix "hgct_refresh"
 #define hgCtConfigLines   "hgct_configLines"
 
 /* commands */
 #define hgCtDo		  hgCt   "do_"	  /* prefix for all commands */
 #define hgCtDoAdd	  hgCtDo "add"
 #define hgCtDoDelete	  hgCtDo "delete"
 #define hgCtDoDeleteSet	  hgCtDo "delete_set"
 #define hgCtDoDeleteClr	  hgCtDo "delete_clr"
 #define hgCtDoRefresh     hgCtDo "refresh"
 #define hgCtDoRefreshSet  hgCtDo "refresh_set"
 #define hgCtDoRefreshClr  hgCtDo "refresh_clr"
 #define hgCtDoGenomeBrowser	  hgCtDo "gb"
 #define hgCtDoTableBrowser	  hgCtDo "tb"
+#ifdef PROGRESS_METER
+#define hgCtDoProgress	  hgCtDo "progress"
+#endif
 
 /* Global variables */
 struct cart *cart;
 struct hash *oldVars = NULL;
 char *excludeVars[] = {"Submit", "submit", "SubmitFile", NULL};
 char *database = NULL;
 char *organism = NULL;
 struct customTrack *ctList = NULL;
 
 void makeClearButton(char *field)
 /* UI button that clears a text field */
 {
 char javascript[1024];
 safef(javascript, sizeof javascript,
         "document.mainForm.%s.value = '';", field);
@@ -822,30 +825,51 @@
                 }
 	    if (!hgParseChromRange(database, words[2], &chrom, &start, &end) ||
                 start < 0 || end > hChromSize(database, chrom))
                 {
 	        err ="Invalid browser position (use chrN:123-456 format)";
                 break;
                 }
             cartSetString(cart, "position", words[2]);
 	    }
 	}
     }
 if (retErr)
     *retErr = err;
 }
 
+#ifdef PROGRESS_METER
+static void progressMeter()
+{
+printf("<FORM STYLE=\"margin-bottom:0;\" ACTION=\"%s\" METHOD=\"GET\" NAME=\"orgForm\">", hgCustomName());
+cartSaveSession(cart);
+printf("<INPUT TYPE=\"HIDDEN\" NAME=\"org\" VALUE=\"%s\">\n", organism);
+printf("<INPUT TYPE=\"HIDDEN\" NAME=\"db\" VALUE=\"%s\">\n", database);
+printf("<INPUT TYPE=\"HIDDEN\" NAME=\"hgct_do_add\" VALUE=\"1\">\n");
+puts("</FORM>");
+}
+static void doProgress(char *err)
+/* display progress meter to show loading process */
+{
+cartWebStart(cart, database, "Custom Track loading progress meter");
+progressMeter();
+// addCustomForm(NULL, err);
+helpCustom();
+cartWebEnd(cart);
+}
+#endif
+
 void doAddCustom(char *err)
 /* display form for adding custom tracks.
  * Include error message, if any */
 {
 cartWebStart(cart, database, "Add Custom Tracks");
 addCustomForm(NULL, err);
 helpCustom();
 cartWebEnd(cart);
 }
 
 void doUpdateCustom(struct customTrack *ct, char *err)
 /* display form for adding custom tracks.
  * Include error message, if any */
 {
 char *longLabel = htmlEncode(ct->tdb->longLabel);
@@ -1052,30 +1076,36 @@
             if (!dbWithCts)
                 dbWithCts = cloneString(dbDb->name);
             }
         }
     if (dbWithCts)
         /* set the database for the selected organism to an assembly that
          * has custom tracks */
         {
         database = dbWithCts;
         cartSetString(cart, "db", database);
         }
     }
 
 if (cartVarExists(cart, hgCtDoAdd))
     doAddCustom(NULL);
+#ifdef PROGRESS_METER
+else if (cartVarExists(cart, hgCtDoProgress))
+    {
+    doProgress(NULL);
+    }
+#endif
 else if (cartVarExists(cart, hgCtTable))
     {
     /* update track */
     /* need to clone the hgCtTable value, as the ParseCart will remove
        the variable */
     selectedTable = cloneString(cartString(cart, hgCtTable));
     if (isNotEmpty(selectedTable))
         {
         ctList = customTracksParseCart(database, cart, NULL, NULL);
         ct = ctFromList(ctList, selectedTable);
         }
     if (ct)
         doUpdateCustom(ct, NULL);
     else
         doAddCustom(NULL);