c5d4303120891ad38c855d560c94b1db76d5f038 tdreszer Thu Jul 8 14:50:16 2010 -0700 Remove subtrack level vis override when composite or view vis comes in. diff --git src/hg/lib/cart.c src/hg/lib/cart.c index 4b730b0..279140c 100644 --- src/hg/lib/cart.c +++ src/hg/lib/cart.c @@ -324,8 +324,6 @@ } } } - -// subtrack settings overridden by more recent view or composite level settings (HOW?) } static void loadCgiOverHash(struct cart *cart, struct hash *oldVars) @@ -1911,3 +1909,37 @@ return atof(a); } + +boolean cartValueHasChanged(struct cart *newCart,struct hash *oldVars,char *setting,boolean ignoreRemoved) +/* Returns TRUE if new cart setting has changed from old cart setting */ +{ +char *newValue = cartOptionalString(newCart,setting); +char *oldValue = hashFindVal(oldVars,setting); + +if (newValue == NULL) + return (!ignoreRemoved && oldValue != NULL); +if (oldValue == NULL) + return FALSE; // FIXME: This seems strange but it is what works in practice. +return (differentString(newValue,oldValue)); +} + + +void cartRemoveFromTdbTree(struct cart *cart,struct trackDb *tdb,char *suffix,boolean skipParent) +/* Removes a 'trackName.suffix' from all tdb descendents (but not parent). + If suffix NULL then removes 'trackName' which holds visibility */ +{ +struct slRef *tdbRef, *tdbRefList = trackDbListGetRefsToDescendants(skipParent?tdb->subtracks:tdb); +for (tdbRef = tdbRefList; tdbRef != NULL; tdbRef = tdbRef->next) + { + struct trackDb *descendentTdb = tdbRef->val; + char settingName[512]; // wgEncodeOpenChromChip.Peaks.vis + if (suffix != NULL) + safef(settingName,sizeof(settingName),"%s.%s",descendentTdb->track,suffix); + else + safef(settingName,sizeof(settingName),"%s",descendentTdb->track); + cartRemove(cart,settingName); + } +} + + +