4a234f089be336a40604bf7002b3811dc3dad308 kent Mon Aug 9 14:58:47 2010 -0700 Adding a trackHash parameter to a bunch of metadata routines so that they could find the track associated with a table. Fixing clipping bug in hgTracks.c for multiWig labels when in non-overlay mode due to a special case that seems to be obsolete (did fair bit of testing to make sure it's not used.) diff --git src/hg/lib/hui.c src/hg/lib/hui.c index 7c449a3..d55d00d 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -47,27 +47,40 @@ #define ENCODE_DCC_DOWNLOADS "encodeDCC" +struct trackDb *wgEncodeDownloadDirKeeper(char *db, struct trackDb *tdb, struct hash *trackHash) +/* Look up through self and parents, looking for someone responsible for handling + * where the downloads are. */ +{ +if (!sameString(tdb->table, tdb->track)) + { + tdb = hashFindVal(trackHash, tdb->table); + if (tdb == NULL) + errAbort("Can't find track for table %s in wgEncodeDownloadDirKeeper", tdb->table); + } +return trackDbTopLevelSelfOrParent(tdb); +} -static boolean makeNamedDownloadsLink(char *database, struct trackDb *tdb,char *name) +static boolean makeNamedDownloadsLink(char *database, struct trackDb *tdb,char *name, + struct hash *trackHash) // Make a downloads link (if appropriate and then returns TRUE) { // Downloads directory if this is ENCODE if(trackDbSetting(tdb, "wgEncode") != NULL) { + struct trackDb *dirKeeper = wgEncodeDownloadDirKeeper(database, tdb, trackHash); printf("%s", hDownloadsServer(), - trackDbSettingOrDefault(tdb, "origAssembly",database), - ENCODE_DCC_DOWNLOADS, - tdb->track,name); + trackDbSettingOrDefault(dirKeeper, "origAssembly",database), + ENCODE_DCC_DOWNLOADS, dirKeeper->table, name); return TRUE; } return FALSE; } -boolean makeDownloadsLink(char *database, struct trackDb *tdb) +boolean makeDownloadsLink(char *database, struct trackDb *tdb, struct hash *trackHash) // Make a downloads link (if appropriate and then returns TRUE) { -return makeNamedDownloadsLink(database, tdb,"Downloads"); +return makeNamedDownloadsLink(database, tdb,"Downloads", trackHash); } #ifdef BIG_UI_NAV_LINKS @@ -104,7 +117,7 @@ } boolean compositeMetadataToggle(char *db,struct trackDb *tdb,char *title, - boolean embeddedInText,boolean showLongLabel) + boolean embeddedInText,boolean showLongLabel, struct hash *trackHash) /* If metadata from metaTbl if it exists, create a link that will allow toggling it's display */ { const struct mdbObj *safeObj = metadataForTable(db,tdb,NULL); @@ -129,7 +142,7 @@ && trackDbSettingClosestToHome(tdb,"wgEncode") != NULL) { printf("%s:",mdbVar->var); - makeNamedDownloadsLink(db, trackDbTopLevelSelfOrParent(tdb), mdbVar->val); + makeNamedDownloadsLink(db, tdb, mdbVar->val, trackHash); printf(""); } else @@ -146,14 +159,14 @@ return TRUE; } -void extraUiLinks(char *db,struct trackDb *tdb) +void extraUiLinks(char *db,struct trackDb *tdb, struct hash *trackHash) /* Show downlaods, schema and metadata links where appropriate */ { boolean schemaLink = (isCustomTrack(tdb->table) == FALSE) && (hTableOrSplitExists(db, tdb->table)); boolean metadataLink = (!tdbIsComposite(tdb) && metadataForTable(db, tdb, NULL) != NULL); -boolean downloadLink = (trackDbSetting(tdb, "wgEncode") != NULL); +boolean downloadLink = (trackDbSetting(tdb, "wgEncode") != NULL && !tdbIsSuperTrack(tdb)); boolean moreThanOne = (schemaLink && metadataLink) || (schemaLink && downloadLink) || (downloadLink && metadataLink); @@ -170,13 +183,12 @@ } if(downloadLink) { - struct trackDb *trueTdb = trackDbTopLevelSelfOrParent(tdb); - makeNamedDownloadsLink(db, trueTdb,(moreThanOne ? "downloads":"Downloads")); + makeNamedDownloadsLink(db, tdb, (moreThanOne ? "downloads":"Downloads"), trackHash); if(metadataLink) printf(","); } if (metadataLink) - compositeMetadataToggle(db,tdb,"metadata", TRUE, TRUE); + compositeMetadataToggle(db,tdb,"metadata", TRUE, TRUE, trackHash); if(moreThanOne) printf(""); @@ -3634,7 +3646,7 @@ } static void compositeUiSubtracks(char *db, struct cart *cart, struct trackDb *parentTdb, - boolean selectedOnly, char *primarySubtrack) + boolean selectedOnly, char *primarySubtrack, struct hash *trackHash) /* Display list of subtracks and descriptions with checkboxes to control visibility and possibly other * nice things including links to schema and metadata and a release date. */ { @@ -3882,7 +3894,7 @@ printf ("
 %s", subtrack->longLabel); if(trackDbSetting(parentTdb, "wgEncode") && trackDbSetting(subtrack, "accession")) printf (" [GEO:%s]", trackDbSetting(subtrack, "accession")); - compositeMetadataToggle(db,subtrack,"...",TRUE,FALSE); + compositeMetadataToggle(db,subtrack,"...",TRUE,FALSE, trackHash); printf("
"); if(cType != cfgNone) @@ -3931,17 +3943,17 @@ } static void compositeUiAllSubtracks(char *db, struct cart *cart, struct trackDb *tdb, - char *primarySubtrack) + char *primarySubtrack, struct hash *trackHash) /* Show checkboxes for all subtracks, not just selected ones. */ { -compositeUiSubtracks(db, cart, tdb, FALSE, primarySubtrack); +compositeUiSubtracks(db, cart, tdb, FALSE, primarySubtrack, trackHash); } static void compositeUiSelectedSubtracks(char *db, struct cart *cart, struct trackDb *tdb, - char *primarySubtrack) + char *primarySubtrack, struct hash *trackHash) /* Show checkboxes only for selected subtracks. */ { -compositeUiSubtracks(db, cart, tdb, TRUE, primarySubtrack); +compositeUiSubtracks(db, cart, tdb, TRUE, primarySubtrack, trackHash); } static void makeAddClearSubmitTweak(char javascript[JBUFSIZE], char *formName, @@ -6382,7 +6394,7 @@ } void hCompositeUi(char *db, struct cart *cart, struct trackDb *tdb, - char *primarySubtrack, char *fakeSubmit, char *formName) + char *primarySubtrack, char *fakeSubmit, char *formName, struct hash *trackHash) /* UI for composite tracks: subtrack selection. If primarySubtrack is * non-NULL, don't allow it to be cleared and only offer subtracks * that have the same type. If fakeSubmit is non-NULL, add a hidden @@ -6406,7 +6418,7 @@ puts("

"); if (trackDbCountDescendantLeaves(tdb) < MANY_SUBTRACKS && !hasSubgroups) { - compositeUiAllSubtracks(db, cart, tdb, primarySubtrack); + compositeUiAllSubtracks(db, cart, tdb, primarySubtrack, trackHash); return; } if (fakeSubmit) @@ -6442,11 +6454,11 @@ if(displayAll) { - compositeUiAllSubtracks(db, cart, tdb, primarySubtrack); + compositeUiAllSubtracks(db, cart, tdb, primarySubtrack, trackHash); } else { - compositeUiSelectedSubtracks(db, cart, tdb, primarySubtrack); + compositeUiSelectedSubtracks(db, cart, tdb, primarySubtrack, trackHash); } if (primarySubtrack == NULL) // primarySubtrack is set for tableBrowser but not hgTrackUi