23b9c239a6c92dc82a54294f9c99aa4b47292b79 kent Wed Dec 15 08:29:05 2021 -0800 Making merged bars respect individual field selection too on genome browser. diff --git src/hg/lib/facetedTable.c src/hg/lib/facetedTable.c index 84978b7..f7c953f 100644 --- src/hg/lib/facetedTable.c +++ src/hg/lib/facetedTable.c @@ -584,45 +584,50 @@ return retList; } static int facetedTableMergedOffsetCmp(const void *va, const void *vb) /* Compare to sort based on name start. */ { const struct facetedTableMergedOffset *a = *((struct facetedTableMergedOffset **)va); const struct facetedTableMergedOffset *b = *((struct facetedTableMergedOffset **)vb); return cmpWordsWithEmbeddedNumbers(a->name, b->name); } struct facetedTableMergedOffset *facetedTableMakeMergedOffsets(struct facetedTable *facTab, struct cart *cart) /* Return a structure that will let us relatively rapidly merge together one row */ { +struct fieldedTable *tableIn = facTab->table; +fieldedTableResetRowIds(tableIn, 0); // Use the seldom-used ID column as indexes + /* Figure out user selection of fields to select on and merge as ffSelList */ char *selList = facetedTableSelList(facTab, cart); struct facetField *ffSelList = deLinearizeFacetValString(selList); +/* Remove columns that have not been selected */ +struct fieldedTable *subtable = facetFieldSelectRows(facTab->table, selList, facTab->ffArray); +// struct fieldedTable *subtable = facTab->table; // ugly + /* Get output column list and pointers to key columns */ -struct fieldedTable *tableIn = facTab->table; struct mergeColHelper *countCol = NULL, *valCol = NULL, *colorCol = NULL; -struct mergeColHelper *colList = makeColList(facTab, tableIn, ffSelList, +struct mergeColHelper *colList = makeColList(facTab, subtable, ffSelList, &countCol, &valCol, &colorCol); -struct mergeGroup *mergeList = findMergeGroups(tableIn, colList); +struct mergeGroup *mergeList = findMergeGroups(subtable, colList); int newFieldCount; struct mergeColHelper **outCol; annotateColListAndMakeNewFields(colList, mergeList, &newFieldCount, &outCol); -fieldedTableResetRowIds(tableIn, 0); // Use the seldom-used ID column as indexes struct facetedTableMergedOffset *tmoList = NULL; struct mergeGroup *merge; for (merge = mergeList; merge != NULL; merge = merge->next) { struct facetedTableMergedOffset *tmo; AllocVar(tmo); slAddHead(&tmoList, tmo); tmo->name = merge->key; int r,g,b; weightedAveColorAt(countCol, colorCol->ix, merge, &r, &g, &b); safef(tmo->color, sizeof(tmo->color), "#%02X%02X%02X", r, g, b); struct slRef *ref; for (ref = merge->rowRefList; ref != NULL; ref = ref->next)