d162dfbe424e317de51074ce592b48a16d882d06 braney Fri Feb 17 15:22:05 2017 -0800 fix weird bug with right-click dialogs that don't set cart variables for ui variables that didn't chage. diff --git src/hg/hgTracks/bedTrack.c src/hg/hgTracks/bedTrack.c index e4e02f2..2a04b27 100644 --- src/hg/hgTracks/bedTrack.c +++ src/hg/hgTracks/bedTrack.c @@ -46,57 +46,56 @@ // If there is a name, use it by default, otherwise no label by default if (track->bedSize > 3) slAddHead(&track->labelColumns, slIntNew(3)); } else if (sameString(labelList->name, "none")) return; // no label else { // what has the user said to use as a label char cartVar[1024]; safef(cartVar, sizeof cartVar, "%s.label", track->tdb->track); struct hashEl *labelEl = cartFindPrefix(cart, cartVar); struct hash *onHash = newHash(4); // fill hash with fields that should be used for labels - if (labelEl == NULL) - { - // there are no cart variables, so look for defaults + // first turn on all the fields that are in defaultLabelFields struct slPair *defaultLabelList = buildFieldList(track->tdb, "defaultLabelFields", as); if (defaultLabelList != NULL) { for(; defaultLabelList; defaultLabelList = defaultLabelList->next) hashStore(onHash, defaultLabelList->name); } else // no default list, use first entry in labelFields as default hashStore(onHash, labelList->name); - } - else - { - // use cart variables to fill in onHash + + // use cart variables to tweak the default-on hash for(; labelEl; labelEl = labelEl->next) { + /* the field name is after the <trackName>.label string */ + char *fieldName = &labelEl->name[strlen(cartVar) + 1]; + if (sameString((char *)labelEl->val, "1")) - hashStore(onHash, &labelEl->name[strlen(cartVar) + 1]); - } + hashStore(onHash, fieldName); + else if (sameString((char *)labelEl->val, "0")) + hashRemove(onHash, fieldName); } struct slPair *thisLabel = labelList; for(; thisLabel; thisLabel = thisLabel->next) { - if (hashLookup(onHash, thisLabel->name)) { // put this column number in the list of columns to use to make label slAddHead(&track->labelColumns, slIntNew(ptToInt(thisLabel->val))); } } slReverse(&track->labelColumns); } } void loadSimpleBed(struct track *tg) /* Load the items in one track - just move beds in * window... */ { struct bed *(*loader)(char **row);