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/trackDbCustom.c src/hg/lib/trackDbCustom.c
index a227491..8835e50 100644
--- src/hg/lib/trackDbCustom.c
+++ src/hg/lib/trackDbCustom.c
@@ -762,31 +762,31 @@
 {
 if (tdbIsMultiTrackSubtrack(tdb))
     return cfgNone; // multitrack subtracks are never allowed to be separately configured.
 int ctPopup = (int)cfgTypeIfKnown;
 if (ctPopup <= cfgNone)
     ctPopup = (int)cfgTypeFromTdb(tdb,FALSE);
 if (ctPopup <= cfgNone && !tdbIsSubtrack(tdb)) // subtracks must receive CfgType!
     ctPopup = cfgUndetermined; // cfgTypeFromTdb() does not work for every case.
 
 if (ctPopup > cfgNone)
 {
     if (regexMatch(tdb->track, "^snp[0-9]+")     // Special cases to be removed
     ||  regexMatch(tdb->track, "^cons[0-9]+way") // (matches logic in json setup in imageV2.c)
     ||  startsWith("hapmapSnps", tdb->track)
     ||  startsWith("hapmapAlleles", tdb->track)
-    ||  SETTING_IS_OFF(trackDbSettingClosestToHome(tdb, "configureByPopup")))
+    ||  trackDbSettingBlocksConfiguration(tdb))
         ctPopup *= -1;
 }
 return ctPopup;
 }
 
 char *trackDbSetting(struct trackDb *tdb, char *name)
 /* Look for a trackDb setting from lowest level on up chain of parents. */
 {
 struct trackDb *generation;
 char *trackSetting = NULL;
 for (generation = tdb; generation != NULL; generation = generation->parent)
     {
     trackSetting = trackDbLocalSetting(generation,name);
     if (trackSetting != NULL)
         break;
@@ -1369,15 +1369,23 @@
     cartSetString(cart, buf, "1");   // Will reshape composite
     struct trackDb *composite = tdbGetComposite(tdb);
     if (composite && tdbIsSuperTrackChild(composite))
         {
         safef(buf,sizeof buf, "%s_sel", composite->track);
         cartSetString(cart, buf, "1");   // Will reshape supertrack
         }
     }
 else if (tdbIsSuperTrackChild(tdb)) // solo track
     {
     safef(buf,sizeof buf, "%s_sel", tdb->track);
     cartSetString(cart, buf, "1");   // Will reshape supertrack
     }
 }
 
+boolean trackDbSettingBlocksConfiguration(struct trackDb *tdb)
+// Configuration dialogs may be explicitly blocked in tracDb settings
+{
+return (SETTING_IS_OFF(trackDbSettingClosestToHome(tdb, "configurable"))
+     || SETTING_IS_OFF(trackDbSettingClosestToHome(tdb, "configureByPopup")));
+     // NOTE configureByPopup should be deprecated.
+}
+