e7ad5cc78778afa4094ed2a4afa9122a4442b8cf tdreszer Mon Feb 7 10:07:50 2011 -0800 Fixed redmine track #98, question #56: bug in filterComposite when 'All' is selected. diff --git src/hg/lib/hui.c src/hg/lib/hui.c index 68544f4..bc4eb1b 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -2550,49 +2550,55 @@ } return members; } enum { dimV=0, // View first dimX=1, // X & Y next dimY=2, dimA=3, // dimA is start of first of the optional non-matrix, non-view dimensions }; typedef struct _membersForAll { int abcCount; - int dimMax; - boolean filters; - dimensions_t *dimensions; - members_t* members[27]; + int dimMax; // Arrays of "members" structs will be ordered as [view][dimX][dimY][dimA]... with first 3 in fixed spots and rest as found (and non-empty) + boolean filters; // ABCs use filterComp boxes (as upposed to check boxes + dimensions_t *dimensions; // One struct describing "deimensions" setting" (e.g. dimX:cell dimY:antibody dimA:treatment) + members_t* members[27]; // One struct for each dimension describing groups in dimension (e.g. cell: GM12878,K562) char* checkedTags[27]; // FIXME: Should move checkedTags into membersForAll->members[ix]->selected; char letters[27]; } membersForAll_t; static char* abcMembersChecked(struct trackDb *parentTdb, struct cart *cart, members_t* members, char letter) /* returns a string of subGroup tags which are currently checked */ { char settingName[SMALLBUF]; int mIx; if (members->selected == NULL) members->selected = needMem(members->count * sizeof(boolean)); safef(settingName, sizeof(settingName), "%s.filterComp.%s",parentTdb->track,members->groupTag); struct slName *options = cartOptionalSlNameList(cart,settingName); if(options != NULL) { + if (sameWord(options->name,"All")) // filterComp returns "All" which means every option selected + { + slNameFreeList(&options); + options = slNameListFromStringArray(members->tags, members->count); + assert(options != NULL); + } struct slName *option; for(option=options;option!=NULL;option=option->next) { mIx = membersSubGroupIx(members, option->name); if(mIx >= 0) members->selected[mIx] = TRUE; } return slNameListToString(options,','); } struct dyString *currentlyCheckedTags = NULL; // Need a string of subGroup tags which are currently checked safef(settingName,sizeof(settingName),"dimension%cchecked",letter); char *dimCheckedDefaults = trackDbSettingOrDefault(parentTdb,settingName,""); for(mIx=0;mIx<members->count;mIx++) {