3e1c9e1a4f3d10821478ae0d99f82bc071f20117
tdreszer
Thu Jan 26 13:27:05 2012 -0800
configurable off should be supported at composite/view and subtrack level. Before this it was only at subtrack level.
diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index 16ef068..ad1a4fc 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -3748,32 +3748,39 @@
if (tdbIsComposite(tdb) // called for the composite
&& !tdbIsCompositeView(tdb->subtracks) // and there is no view level
&& slCount(tdb->subtracks) == 1) // and there is only one subtrack
{
//warn("What do you mean by having a composite (%s) with only one subtrack (%s) ???",tdb->track,tdb->subtracks->track);
tdb = tdb->subtracks; // show subtrack cfg instead
prefix = tdb->track;
}
else if (tdbIsSubtrack(tdb) // called with subtrack
&& tdbIsCompositeView(tdb->parent) // subtrack has view
&& differentString(prefix,tdb->track) // and this has been called FOR the view
&& slCount(tdb->parent->subtracks) == 1) // and view has only one subtrack
prefix = tdb->track; // removes reference to view level
}
#endif///def SUBTRACK_CFG
-// composite without view should pass in subtrack as example track!
-if (tdbIsComposite(tdb) && !tdbIsCompositeView(tdb->subtracks))
+
+// Cfg could be explicitly blocked, but if tdb is example subtrack
+// then blocking should have occurred before we got here.
+if (!tdbIsSubtrack(tdb) && trackDbSettingBlocksConfiguration(tdb))
+ return;
+
+// composite/view must pass in example subtrack
+// NOTE: if subtrack types vary then there shouldn't be cfg at composite/view level!
+while (tdb->subtracks)
tdb = tdb->subtracks;
switch(cType)
{
case cfgBedScore:
{
char *scoreMax = trackDbSettingClosestToHome(tdb, SCORE_FILTER _MAX);
int maxScore = (scoreMax ? sqlUnsigned(scoreMax):1000);
scoreCfgUi(db, cart,tdb,prefix,title,maxScore,boxed);
}
break;
case cfgPeak:
encodePeakCfgUi(cart,tdb,prefix,title,boxed);
break;
case cfgWig: wigCfgUi(cart,tdb,prefix,title,boxed);
@@ -6249,30 +6256,33 @@
char configurable[membersOfView->count];
memset(configurable,cfgNone,sizeof(configurable));
int firstOpened = -1;
boolean makeCfgRows = FALSE;
struct trackDb **matchedViewTracks = needMem(sizeof(struct trackDb *) * membersOfView->count);
for (ix = 0; ix < membersOfView->count; ix++)
{
if (membersOfView->subtrackList != NULL
&& membersOfView->subtrackList[ix] != NULL)
{
struct trackDb *subtrack = membersOfView->subtrackList[ix]->val;
matchedViewTracks[ix] = subtrack->parent;
configurable[ix] = (char)cfgTypeFromTdb(subtrack, TRUE);
+ if (configurable[ix] != cfgNone && trackDbSettingBlocksConfiguration(subtrack))
+ configurable[ix] = cfgNone;
+
if(configurable[ix] != cfgNone)
{
if(firstOpened == -1)
{
safef(varName, sizeof(varName), "%s.showCfg", matchedViewTracks[ix]->track);
if(cartUsualBoolean(cart,varName,FALSE)) // No need for closestToHome: view level input
firstOpened = ix;
}
makeCfgRows = TRUE;
}
}
}
toLowerN(membersOfView->groupTitle, 1);
printf("Select %s (help):\n", membersOfView->groupTitle);