char *findSelDb() /* Find user selected database (as opposed to genome database). */ { struct slName *dbList = getDbListForGenome(); char *selDb = cartUsualString(cart, hgtaTrack, NULL); if (!slNameInList(dbList, selDb)) selDb = cloneString(dbList->name); slFreeList(&dbList); return selDb; }
struct trackDb *showTrackField(struct grp *selGroup, char *trackVar, char *trackScript) /* Show track control. Returns selected track. */ { struct trackDb *track, *selTrack = NULL; if (trackScript == NULL) trackScript = ""; if (sameString(selGroup->name, "allTables")) { char *selDb = findSelDb(); struct slName *dbList = getDbListForGenome(), *db; hPrintf("<B>database:</B>\n"); hPrintf("<SELECT NAME=%s %s>\n", trackVar, trackScript); for (db = dbList; db != NULL; db = db->next) { hPrintf(" <OPTION VALUE=%s%s>%s\n", db->name, (sameString(db->name, selDb) ? " SELECTED" : ""), db->name); } hPrintf("</SELECT>\n"); } else { boolean allTracks = sameString(selGroup->name, "allTracks"); hPrintf("<B>track:</B>\n"); hPrintf("<SELECT NAME=\"%s\" %s>\n", trackVar, trackScript); if (allTracks) { selTrack = findSelectedTrack(fullTrackList, NULL, trackVar); slSort(&fullTrackList, trackDbCmpShortLabel); } else { selTrack = findSelectedTrack(fullTrackList, selGroup, trackVar); } for (track = fullTrackList; track != NULL; track = track->next) { if (allTracks || sameString(selGroup->name, track->grp)) { hPrintf(" <OPTION VALUE=\"%s\"%s>%s\n", track->track, (track == selTrack ? " SELECTED" : ""), track->shortLabel); } } hPrintf("</SELECT>\n"); } hPrintf("\n"); return selTrack; }
struct trackDb *showTrackField(struct grp *selGroup, char *trackVar, char *trackScript, boolean disableNoGenome) /* Show track control. Returns selected track. */ { struct trackDb *track, *selTrack = NULL; if (trackScript == NULL) trackScript = ""; if (sameString(selGroup->name, "allTables")) { char *selDb = findSelDb(); struct slName *dbList = getDbListForGenome(), *db; hPrintf("<B>database:</B>\n"); hPrintf("<SELECT NAME=%s %s>\n", trackVar, trackScript); for (db = dbList; db != NULL; db = db->next) { hPrintf(" <OPTION VALUE=%s%s>%s\n", db->name, (sameString(db->name, selDb) ? " SELECTED" : ""), db->name); } hPrintf("</SELECT>\n"); } else { boolean allTracks = sameString(selGroup->name, "allTracks"); hPrintf("<B>track:</B>\n"); hPrintf("<SELECT NAME=\"%s\" %s>\n", trackVar, trackScript); if (allTracks) { selTrack = findSelectedTrack(fullTrackList, NULL, trackVar); slSort(&fullTrackList, trackDbCmpShortLabel); } else { selTrack = findSelectedTrack(fullTrackList, selGroup, trackVar); } boolean selTrackIsDisabled = FALSE; struct trackDb *firstEnabled = NULL; for (track = fullTrackList; track != NULL; track = track->next) { if (allTracks || sameString(selGroup->name, track->grp)) { hPrintf(" <OPTION VALUE=\"%s\"", track->track); if (cartTrackDbIsNoGenome(database, track->table)) hPrintf(NO_GENOME_CLASS); if (disableNoGenome && isNoGenomeDisabled(database, track->table)) { hPrintf(" DISABLED"); if (track == selTrack) selTrackIsDisabled = TRUE; } else if (firstEnabled == NULL) firstEnabled = track; if (track == selTrack && !selTrackIsDisabled) hPrintf(" SELECTED"); hPrintf(">%s</OPTION>", track->shortLabel); } } if (selTrackIsDisabled) selTrack = firstEnabled; hPrintf("</SELECT>\n"); } hPrintf("\n"); return selTrack; }