4e91fbccad6b04384ba5792bce44f933b5a1c1ff
tdreszer
Tue Oct 4 11:56:27 2011 -0700
Further fixes to the cfgByType consistency logic, prompted by side by side comparisons on hg18 tracks.
diff --git src/hg/hgTrackUi/hgTrackUi.c src/hg/hgTrackUi/hgTrackUi.c
index 3916174..b860670 100644
--- src/hg/hgTrackUi/hgTrackUi.c
+++ src/hg/hgTrackUi/hgTrackUi.c
@@ -1699,63 +1699,30 @@
radioButton(logicTypeVar, logicTypeVal, "and");
radioButton(logicTypeVar, logicTypeVal, "or");
printf("
\n");
/* List various fields you can filter on. */
printf("
\n", CONTROL_TABLE_WIDTH);
cg = startControlGrid(4, NULL);
for (fil = mud->filterList; fil != NULL; fil = fil->next)
oneMrnaFilterUi(cg, fil->label, fil->key, cart);
endControlGrid(&cg);
baseColorDrawOptDropDown(cart, tdb);
indelShowOptions(cart, tdb);
}
-
-static void filterByChrom(struct trackDb *tdb)
-{
-char *filterSetting;
-char filterVar[256];
-char *filterVal = "";
-
-printf("Filter by chromosome (e.g. chr10): ");
-snprintf(filterVar, sizeof(filterVar), "%s.chromFilter", tdb->track);
-filterSetting = cartUsualString(cart, filterVar, filterVal);
-cgiMakeTextVar(filterVar, cartUsualString(cart, filterVar, ""), 15);
-}
-
-void crossSpeciesUi(struct trackDb *tdb)
-/* Put up UI for selecting rainbow chromosome color or intensity score. */
-{
-char colorVar[256];
-char *colorSetting;
-/* initial value of chromosome coloring option is "on", unless
- * overridden by the colorChromDefault setting in the track */
-char *colorDefault = trackDbSettingOrDefault(tdb, "colorChromDefault", "on");
-
-printf("
Color track based on chromosome: ");
-snprintf(colorVar, sizeof(colorVar), "%s.color", tdb->track);
-colorSetting = cartUsualString(cart, colorVar, colorDefault);
-cgiMakeRadioButton(colorVar, "on", sameString(colorSetting, "on"));
-printf(" on ");
-cgiMakeRadioButton(colorVar, "off", sameString(colorSetting, "off"));
-printf(" off ");
-printf("
");
-filterByChrom(tdb);
-}
-
void transRegCodeUi(struct trackDb *tdb)
/* Put up UI for transcriptional regulatory code - not
* much more than score UI. */
{
printf("%s",
"
The scoring ranges from 0 to 1000 and is based on the number of lines "
"of evidence that support the motif being active. Each of the two "
"sensu stricto species in which the motif was conserved counts "
"as a line of evidence. If the ChIP-chip data showed good (P ≤ 0.001) "
"evidence of binding to the transcription factor associated with the "
"motif, that counts as two lines of evidence. If the ChIP-chip data "
"showed weaker (P ≤ 0.005) evidence of binding, that counts as just one line "
"of evidence. The following table shows the relationship between lines "
"of evidence and score:");
printf("
");
@@ -1847,31 +1814,31 @@
}
}
void chainColorUi(struct trackDb *tdb)
/* UI for the chain tracks */
{
boolean normScoreAvailable = chainDbNormScoreAvailable(tdb);
boolean compositeTrack = tdbIsComposite(tdb);
if (compositeTrack)
return; // configuration taken care of by hCompositeUi() later
else if (normScoreAvailable)
chainCfgUi(database, cart, tdb, tdb->track, NULL, FALSE, chromosome);
else
- crossSpeciesUi(tdb);
+ crossSpeciesCfgUi(cart,tdb);
}
void chromGraphUi(struct trackDb *tdb)
/* UI for the wiggle track */
{
char varName[chromGraphVarNameMaxSize];
struct sqlConnection *conn = NULL;
char *track = tdb->track;
if (!isCustomTrack(track))
conn = hAllocConn(database);
double minVal,maxVal;
struct chromGraphSettings *cgs = chromGraphSettingsGet(track,
conn, tdb, cart);
printf("Track height: ");
@@ -2355,30 +2322,39 @@
"&list_uids=%s&dopt=Abstract&tool=genome.ucsc.edu\" TARGET=_BLANK>%s", pmId, ref);
labelArr[refCount] = cloneString(label);
valueArr[refCount++] = cloneString(pmId);
if (! filterPmIdInCart)
slNameAddHead(&checked, pmId);
if (refCount >= MAX_DGV_REFS)
errAbort("dgvUi: %s has too many references (max %d)", tdb->track, MAX_DGV_REFS);
}
sqlFreeResult(&sr);
jsMakeCheckboxGroupSetClearButton(cartVarName, TRUE);
jsMakeCheckboxGroupSetClearButton(cartVarName, FALSE);
cgiMakeCheckboxGroupWithVals(cartVarName, labelArr, valueArr, refCount, checked, 4);
hFreeConn(&conn);
}
+static void factorSourceUi(char *db,struct trackDb *tdb)
+{
+printf("
Cell Abbreviations:
\n");
+char *sourceTable = trackDbRequiredSetting(tdb, "sourceTable");
+struct sqlConnection *conn = hAllocConn(db);
+hPrintAbbreviationTable(conn, sourceTable, "Cell Type");
+hFreeConn(&conn);
+}
+
#ifdef UNUSED
static boolean isInTrackList(struct trackDb *tdbList, struct trackDb *target)
/* Return TRUE if target is in tdbList. */
{
struct trackDb *tdb;
for (tdb = tdbList; tdb != NULL; tdb = tdb->next)
if (tdb == target)
return TRUE;
return FALSE;
}
#endif /* UNUSED */
void superTrackUi(struct trackDb *superTdb, struct trackDb *tdbList)
/* List tracks in this collection, with visibility controls and UI links */
{
@@ -2435,31 +2411,38 @@
// TODO: use hTrackUiName()
printf("
NOTE: Early access to additional track data may be available on the Preview Browser.",
"genome-preview.ucsc.edu", db, tdb->track);
}
}
}
void specificUi(struct trackDb *tdb, struct trackDb *tdbList, struct customTrack *ct, boolean ajax)
/* Draw track specific parts of UI. */
{
char *track = tdb->track;
// Ideally check cfgTypeFromTdb()/cfgByCfgType() first, but with all these special cases already in
// place, lets be cautious at this time.
// NOTE: Developer, please try to use cfgTypeFromTdb()/cfgByCfgType().
-if (sameString(track, "stsMap"))
+// UI precedence:
+// 1) supers to get them out of the way: they have no controls
+// 2) special cases based upon track name (developer please avoid)
+// 3) cfgTypeFromTdb()/cfgByCfgType() <== prefered method
+// 4) special cases falling through the cracks but based upon type
+if (tdbIsSuperTrack(tdb))
+ superTrackUi(tdb, tdbList);
+else if (sameString(track, "stsMap"))
stsMapUi(tdb);
else if (sameString(track, "affyTxnPhase2"))
affyTxnPhase2Ui(tdb);
else if (sameString(track, "cgapSage"))
cgapSageUi(tdb);
else if (sameString(track, "stsMapMouseNew"))
stsMapMouseUi(tdb);
else if (sameString(track, "stsMapRat"))
stsMapRatUi(tdb);
else if (sameString(track, "snpMap"))
snpMapUi(tdb);
else if (sameString(track, "snp"))
snpUi(tdb);
else if (snpVersion(track) >= 125)
snp125Ui(tdb);
@@ -2518,138 +2501,111 @@
rosettaUi(tdb);
else if (startsWith("blastDm", track))
blastFBUi(tdb);
else if (sameString(track, "blastSacCer1SG"))
blastSGUi(tdb);
else if (sameString(track, "blastHg17KG")
|| sameString(track, "blastHg16KG")
|| sameString(track, "blastCe3WB")
|| sameString(track, "blastHg18KG")
|| sameString(track, "blatzHg17KG")
|| startsWith("mrnaMap", track)
|| startsWith("mrnaXeno", track))
blastUi(tdb);
else if (sameString(track, "hgPcrResult"))
pcrResultUi(tdb);
-else if (startsWith("chromGraph", tdb->type))
- chromGraphUi(tdb);
else if (sameString(track, "ancientR"))
ancientRUi(tdb);
else if (sameString(track, "zoo") || sameString(track, "zooNew" ))
zooWiggleUi(tdb);
else if (sameString(track, "humMusL")
|| sameString( track, "musHumL")
|| sameString( track, "regpotent")
|| sameString( track, "mm3Rn2L" )
|| sameString( track, "mm3Hg15L" )
|| sameString( track, "hg15Mm3L" ))
humMusUi(tdb,7);
else if (startsWith("chain", track)
|| endsWith("chainSelf", track))
chainColorUi(tdb);
else if (sameString(track, "orthoTop4") // still used ??
|| sameString(track, "mouseOrtho")
|| sameString(track, "mouseSyn"))
- // NOTE: type psl xeno tracks use crossSpeciesUi, so
+ // NOTE: type psl xeno tracks use crossSpeciesCfgUi, so
// add explicitly here only if track has another type (bed, chain).
- // For crossSpeciesUi, the
+ // For crossSpeciesCfgUi, the
// default for chrom coloring is "on", unless track setting
// colorChromDefault is set to "off"
- crossSpeciesUi(tdb);
+ crossSpeciesCfgUi(cart,tdb);
else if (sameString(track, "affyTranscriptome"))
affyTranscriptomeUi(tdb);
-else if (startsWith("sample", tdb->type))
- genericWiggleUi(tdb,7);
else if (sameString(track, WIKI_TRACK_TABLE))
wikiTrackUi(tdb);
else if (sameString(track, RULER_TRACK_NAME))
rulerUi(tdb);
else if (sameString(track, OLIGO_MATCH_TRACK_NAME))
oligoMatchUi(tdb);
else if (sameString(track, CUTTERS_TRACK_NAME))
cutterUi(tdb);
else if(sameString(track, "affyTransfrags"))
affyTransfragUi(tdb);
else if (sameString(track, "gvPos"))
gvUi(tdb);
else if (sameString(track, "oreganno"))
oregannoUi(tdb);
else if (startsWith("retroposons", track))
retroposonsUi(tdb);
else if (sameString(track, "tfbsConsSites"))
tfbsConsSitesUi(tdb);
else if (sameString(track, "CGHBreastCancerUCSF"))
ucsfdemoUi(tdb);
else if (startsWith("hapmapSnps", track))
hapmapSnpsUi(tdb);
else if (sameString(track, "switchDbTss"))
switchDbScoreUi(tdb);
else if (sameString(track, "dgv")
|| (startsWith("dgvV", track) && isdigit(track[4])))
dgvUi(tdb);
-else
+else if (tdb->type != NULL)
{ // NOTE for developers: please avoid special cases and use cfgTypeFromTdb//cfgByCfgType()
// When you do, then multi-view cfg and subtrack cfg will work.
eCfgType cType = cfgTypeFromTdb(tdb,FALSE);
if (cType != cfgNone)
{
boolean boxed = trackDbSettingClosestToHomeOn(tdb, "boxedCfg");
cfgByCfgType(cType,database, cart, tdb,tdb->track, NULL, boxed);
}
- else if (tdb->type != NULL)
- {
- /* handle all tracks with type genePred or bed or "psl xeno " */
- char *typeLine = cloneString(tdb->type);
- char *words[8];
- int wordCount = 0;
- wordCount = chopLine(typeLine, words);
- if (wordCount > 0)
- {
- if (sameWord(words[0], "expRatio"))
+ // NOTE: these cases that fall through the cracks should probably get folded into cfgByCfgType()
+ else if (startsWithWord("expRatio", tdb->type))
expRatioUi(tdb);
- else if (sameWord(words[0], "array")) /* not quite the same as an "expRatio" type (custom tracks) */
+ else if (startsWith("chromGraph", tdb->type))
+ chromGraphUi(tdb);
+ else if (startsWith("sample", tdb->type))
+ genericWiggleUi(tdb,7);
+ else if (startsWithWord("array",tdb->type)) /* not quite the same as an "expRatio" type (custom tracks) */
expRatioCtUi(tdb);
- else if (sameWord(words[0], "psl"))
- {
- if (wordCount == 3)
- if (sameWord(words[1], "xeno"))
- crossSpeciesUi(tdb);
- baseColorDrawOptDropDown(cart, tdb);
- indelShowOptions(cart, tdb);
- }
- else if (sameWord(words[0], "factorSource"))
- {
- printf("
Cell Abbreviations:
\n");
- char *sourceTable = trackDbRequiredSetting(tdb, "sourceTable");
- struct sqlConnection *conn = hAllocConn(database);
- hPrintAbbreviationTable(conn, sourceTable, "Cell Type");
- hFreeConn(&conn);
- }
- }
- freeMem(typeLine);
- }
- }
-if (tdbIsSuperTrack(tdb))
- {
- superTrackUi(tdb, tdbList);
+ else if (startsWithWord("factorSource",tdb->type))
+ factorSourceUi(database,tdb);
}
-else if (tdbIsComposite(tdb)) // for the moment generalizing this to include other containers...
+
+if (!ajax) // ajax asks for a simple cfg dialog for right-click popup or hgTrackUi subtrack cfg
{
+ // Composites *might* have had their top level controls just printed, but almost certainly have additional controls
+ if (tdbIsComposite(tdb)) // for the moment generalizing this to include other containers...
hCompositeUi(database, cart, tdb, NULL, NULL, MAIN_FORM, trackHash);
- }
-if (!ajax)
- {
+
+ // Additional special case navigation links may be added
previewLinks(database, tdb);
extraUiLinks(database,tdb, trackHash);
}
}
#ifdef UNUSED
static void findSuperChildrenAndSettings(struct trackDb *tdbList, struct trackDb *super)
/* Find the tracks that have super as a parent and stuff references to them on
* super's children list. Also do some visibility and parentName futzing. */
{
struct trackDb *tdb;
for (tdb = tdbList; tdb != NULL; tdb = tdb->next)
{
if (tdb->parent == super)
{