70e9200a58ef4db6378dae703296d29188ae26b1
tdreszer
  Fri Dec 17 14:58:43 2010 -0800
Make use of fileUi.h macros and support hgFileUi CGI
diff --git src/hg/hgTrackUi/hgTrackUi.c src/hg/hgTrackUi/hgTrackUi.c
index 861a77c..7a6d23e 100644
--- src/hg/hgTrackUi/hgTrackUi.c
+++ src/hg/hgTrackUi/hgTrackUi.c
@@ -2150,39 +2150,39 @@
 jsMakeCheckboxGroupSetClearButton(cartVarName, FALSE);
 cgiMakeCheckboxGroupWithVals(cartVarName, labelArr, valueArr, refCount, checked, 4);
 hFreeConn(&conn);
 }
 
 void superTrackUi(struct trackDb *superTdb)
 /* List tracks in this collection, with visibility controls and UI links */
 {
 struct trackDb *tdb;
 printf("<P><TABLE CELLPADDING=2>");
 tdbSortPrioritiesFromCart(cart, &superTdb->subtracks);
 for (tdb = superTdb->subtracks; tdb != NULL; tdb = tdb->next)
     {
     if (!hTableOrSplitExists(database, tdb->table)
     && tdb->subtracks != NULL && trackDbLocalSetting(tdb, "compositeTrack") == NULL
-    && !sameWord(tdb->type,"downloadsOnly"))
+    && !tdbIsDownloadsOnly(tdb))
 	// NOTE: tdb if composite, is not yet populated with it's own subtracks!
         continue;
     printf("<TR>");
     printf("<TD NOWRAP><A HREF=\"%s?%s=%u&c=%s&g=%s\">%s</A>&nbsp;</TD>",
                 hgTrackUiName(), cartSessionVarName(), cartSessionId(cart),
                 chromosome, cgiEncode(tdb->track), tdb->shortLabel);
     printf("<TD>");
-    if (sameWord(tdb->type,"downloadsOnly"))
+    if (tdbIsDownloadsOnly(tdb))
         printf("&nbsp;");
     else
     {
         enum trackVisibility tv =
                         hTvFromString(cartUsualString(cart, tdb->track,
                                                 hStringFromTv(tdb->visibility)));
         hTvDropDownClassVisOnly(tdb->track, tv, tdb->canPack,
                                 tv == tvHide ?  "hiddenText" : "normalText",
                                 trackDbSetting(tdb, "onlyVisibility"));
     }
     printf("<TD>%s", tdb->longLabel);
     char *dataVersion = trackDbSetting(tdb, "dataVersion");
     if (dataVersion)
         printf("&nbsp&nbsp;<EM><FONT COLOR=#666666 SIZE=-1>%s</FONT></EM>", dataVersion);
     printf("</TD></TR>");
@@ -2501,31 +2501,31 @@
 struct trackDb *parentTdb = tdb->parent;
 if (parentTdb && !ajax)
     {
     char *encodedMapName = cgiEncode(parentTdb->track);
     printf("&nbsp;&nbsp;<B style='font-family:serif; font-size:100%%;'>(<A HREF=\"%s?%s=%u&c=%s&g=%s\" title='Link to parent track'><IMG height=12 src='../images/ab_up.gif'>%s</A>)</B>",
 		hgTrackUiName(), cartSessionVarName(), cartSessionId(cart),
 		chromosome, encodedMapName, parentTdb->shortLabel);
     freeMem(encodedMapName);
     }
     puts("<BR><BR>");
 
 if (ct && sameString(tdb->type, "maf"))
     tdb->canPack = TRUE;
 
 // Don't bother with vis controls for downloadsOnly
-if (!sameWord(tdb->type,"downloadsOnly"))
+if (!tdbIsDownloadsOnly(tdb))
     {
     /* Display visibility menu */
         if (tdbIsComposite(tdb) && multViewCount(tdb) > 0)
             printf("<B>Maximum&nbsp;display&nbsp;mode:&nbsp;</B>");
         else
             printf("<B>Display&nbsp;mode:&nbsp;</B>");
         if (tdbIsSuper(tdb))
             {
             /* This is a supertrack -- load its members and show hide/show dropdown */
             hTrackDbLoadSuper(database, tdb);
             superTrackDropDown(cart, tdb, 1);
             }
         else
             {
             /* normal visibility control dropdown */
@@ -2559,81 +2559,54 @@
         cgiMakeHiddenVar(CT_SELECTED_TABLE_VAR, tdb->track);
         puts("&nbsp;");
         if (differentString(tdb->type, "chromGraph"))
             {
             char buf[256];
             if(ajax)
                 // reference to a separate form doesn't work in modal dialog, so change window.location directly.
                 safef(buf, sizeof(buf), "window.location='%s?hgsid=%d&%s=%s';return false;", hgCustomName(), cartSessionId(cart), CT_SELECTED_TABLE_VAR, tdb->track);
             else
                 safef(buf, sizeof(buf), "document.customTrackForm.submit();return false;");
             cgiMakeOnClickButton(buf, "Update custom track");
             }
         }
     }
 
-if (!tdbIsSuper(tdb))
+if (!tdbIsSuper(tdb) && !tdbIsDownloadsOnly(tdb))
     {
     // NAVLINKS - For pages w/ matrix, add Description, Subtracks and Downloads links
     if (trackDbSetting(tdb, "dimensions"))
         {
         printf("\n&nbsp;&nbsp;<span id='navDown' style='float:right; display:none;'>");
         if (trackDbSetting(tdb, "wgEncode"))
             {
             printf("&nbsp;&nbsp;");
             makeDownloadsLink(database, tdb, trackHash);
             }
         char *downArrow = "&dArr;";
         enum browserType browser = cgiBrowser();
         if (browser == btIE || browser == btFF)
             downArrow = "&darr;";
         printf("&nbsp;&nbsp;<A HREF='#DISPLAY_SUBTRACKS' TITLE='Jump to subtracks section of page'>Subtracks%s</A>",downArrow);
         printf("&nbsp;&nbsp;<A HREF='#TRACK_HTML' TITLE='Jump to description section of page'>Description%s</A>",downArrow);
         printf("&nbsp;</span>");
         }
     }
 printf("<BR>\n");
 
-// FIXME: Do something here for downloadOnly tracks.
-if (sameWord(tdb->type,"downloadsOnly"))
-    {
-    filesDownloadUi(database,cart,tdb);
-        // FIXME: To be written: hgTracUi cgi which is downloads page.
-        // Should be lib code and 2 cgis:
-        // hgTrackUi when we have downloads ONLY, except for this on trackDb entry to point us there
-        // hgFilesUi when we have composite tracks AND download filess, so that hgTrackUi handles composite and offers link to hgFilesUi for downloads
-        /*
-        struct fileDb, contains mdbObj struct
-        get composite name (in trackDb) from cart: g=wgEncodeBroadHistone
-        // Use composite name to aquire list of mdbObjs where composite= and fileName exists
-        // Use trackDb settings to get at html description, long and short labels
-        // Acquire composite level setting for:
-        //   experiment defining variables?
-        //   major sort order?
-        //   filterComposite stuff?  Or is this defined in trackDb for pseudo-composite?
-        // Sort list of mdbObjs?
-        // Weed list of mdbObjects via fileExists.
-        // Get preamble from dir
-        // Make any selection controls (filterBoxes) Do we want a matrix?
-        // Make table class=sortable
-        // Get html from trackDb
-        // Recommend different color background to get the point across that these are files, not tracks
-
-        */
-    //makeDownloadsLink(database, tdb, trackHash);
-    //extraUiLinks(database,tdb, trackHash);
-    }
+if (tdbIsDownloadsOnly(tdb))
+    filesDownloadUi(database,cart,tdb);  // Composites without tracks but with files to download are tdb->type: downloadsOnly
 else
     specificUi(tdb, ct, ajax);
 puts("</FORM>");
 
 if (ct && !ajax)
     {
     /* hidden form for custom tracks CGI */
     printf("<FORM ACTION='%s' NAME='customTrackForm'>", hgCustomName());
     cartSaveSession(cart);
     cgiMakeHiddenVar(CT_SELECTED_TABLE_VAR, tdb->track);
     puts("</FORM>\n");
     }
 
 if (ajax)
     return;
@@ -2767,31 +2740,32 @@
 	    track, database, chromosome, trackHash->elCount);
    errAbort("Can't find %s in track database %s chromosome %s",
 	    track, database, chromosome);
    }
 char *super = trackDbGetSupertrackName(tdb);
 if (super)
     {
     /* configured as a supertrack member in trackDb */
     if (tdb->parent)
         {
         /* the supertrack is also configured, so use supertrack defaults */
         tdbMarkAsSuperTrack(tdb->parent);
         trackDbSuperMemberSettings(tdb);
         }
     }
-char *title = (tdbIsSuper(tdb) ? "Super-track Settings" : "Track Settings");
+char *title = (tdbIsSuper(tdb) ? "Super-track Settings" :
+                tdbIsDownloadsOnly(tdb) ? DOWNLOADS_ONLY_TITLE : "Track Settings");
 if(cartOptionalString(cart, "ajax"))
     {
     // html is going to be used w/n a dialog in hgTracks.js so serve up stripped down html
     trackUi(tdb, ct, TRUE);
     cartRemove(cart,"ajax");
     }
 else
     {
     cartWebStart(cart, database, "%s %s", tdb->shortLabel, title);
     trackUi(tdb, ct, FALSE);
     printf("<BR>\n");
     webEnd();
     }
 }