fecc0bfffd30dccc9998aa0c2e5a6064d487bbb1 chmalee Fri Apr 10 15:39:54 2020 -0700 Initial work on merging multiple bigBed items that span the window, refs #25133 diff --git src/hg/lib/hui.c src/hg/lib/hui.c index eb1c78a..34e7913 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -4513,31 +4513,34 @@ // composite/view must pass in example subtrack // NOTE: if subtrack types vary then there shouldn't be cfg at composite/view level! while (tdb->subtracks) tdb = tdb->subtracks; switch(cType) { case cfgBedScore: { char *scoreMax = trackDbSettingClosestToHome(tdb, SCORE_FILTER _MAX); int maxScore = (scoreMax ? sqlUnsigned(scoreMax):1000); scoreCfgUi(db, cart,tdb,prefix,title,maxScore,boxed); if(startsWith("bigBed", tdb->type)) + { labelCfgUi(db, cart, tdb, prefix); + mergeSpanCfgUi(cart, tdb, prefix); + } } break; case cfgPeak: encodePeakCfgUi(cart,tdb,prefix,title,boxed); break; case cfgWig: wigCfgUi(cart,tdb,prefix,title,boxed); break; case cfgWigMaf: wigMafCfgUi(cart,tdb,prefix,title,boxed, db); break; case cfgGenePred: genePredCfgUi(db, cart,tdb,prefix,title,boxed); break; case cfgChain: chainCfgUi(db,cart,tdb,prefix,title,boxed, NULL); break; case cfgNetAlign: netAlignCfgUi(db,cart,tdb,prefix,title,boxed); break; @@ -6578,30 +6581,48 @@ isDefault = (slPairFind(defaultLabelList, thisLabel->name) != NULL); boolean option = cartUsualBoolean(cart, varName, isDefault); cgiMakeCheckBox(varName, option); // find comment for the column listed struct asColumn *col = as->columnList; unsigned num = ptToInt(thisLabel->val); for(; col && num--; col = col->next) ; assert(col); printf(" %s   ", col->comment); } } +void mergeSpanCfgUi(struct cart *cart, struct trackDb *tdb, char *prefix) +/* If this track offers a merge spanned items option, put up the cfg for it, which + * is just a checkbox with a small explanation. Comparing tdb->track to prefix + * ensures we don't offer this control at the composite level, as this is a + * subtrack only config */ +{ +if (trackDbSettingOn(tdb, MERGESPAN_TDB_SETTING) && sameString(tdb->track, prefix)) + { + boolean curOpt = trackDbSettingOn(tdb, "mergeSpannedItems"); + char mergeSetting[256]; + safef(mergeSetting, sizeof(mergeSetting), "%s.%s", tdb->track, MERGESPAN_CART_SETTING); + if (cartVarExists(cart, mergeSetting)) + curOpt = cartBoolean(cart, mergeSetting); + printf("Merge items that span the current region:"); + cgiMakeCheckBox(mergeSetting, curOpt); + } +} + void pslCfgUi(char *db, struct cart *cart, struct trackDb *tdb, char *name, char *title, boolean boxed) /* Put up UI for psl tracks */ { boxed = cfgBeginBoxAndTitle(tdb, boxed, title); char *typeLine = cloneString(tdb->type); char *words[8]; int wordCount = wordCount = chopLine(typeLine, words); if (sameString(tdb->type, "bigPsl")) labelCfgUi(db, cart, tdb, name); if (wordCount == 3 && sameWord(words[1], "xeno")) crossSpeciesCfgUi(cart,tdb); baseColorDropLists(cart, tdb, name); indelShowOptionsWithName(cart, tdb, name);