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/hgTracks/imageV2.c src/hg/hgTracks/imageV2.c index 571d3ef..422a703 100644 --- src/hg/hgTracks/imageV2.c +++ src/hg/hgTracks/imageV2.c @@ -201,30 +201,31 @@ ///////////////////////// // JSON support. Eventually the whole imgTbl could be written out as JSON static void jsonTdbSettingsInit(struct jsonElement *settings) // Inititializes trackDbJson { struct jsonElement *ele = newJsonObject(newHash(8)); jsonObjectAdd(ele, "shortLabel", newJsonString("ruler")); jsonObjectAdd(ele, "type", newJsonString("ruler")); jsonObjectAdd(ele, "longLabel", newJsonString("Base Position Controls")); jsonObjectAdd(ele, "canPack", newJsonNumber(0)); jsonObjectAdd(ele, "visibility", newJsonNumber(rulerMode)); jsonObjectAdd(ele, "configureBy", newJsonString("popup")); jsonObjectAdd(ele, "kindOfParent", newJsonNumber(0)); +//jsonObjectAdd(ele, "isMergedItem", newJsonBoolean(FALSE)); jsonObjectAdd(settings, "ruler", (struct jsonElement *) ele); } void jsonTdbSettingsBuild(struct jsonElement *settings, struct track *track, boolean configurable) // Adds trackDb settings to the jsonTdbSettings { struct jsonElement *ele = newJsonObject(newHash(8)); jsonObjectAdd(settings, track->track, (struct jsonElement *) ele); // track name and type jsonObjectAdd(ele, "type", newJsonString(track->tdb->type)); // Tell which kind of parent and which kind of child enum kindOfParent kindOfParent = tdbKindOfParent(track->tdb); enum kindOfChild kindOfChild = tdbKindOfChild(track->tdb); jsonObjectAdd(ele, "kindOfParent", newJsonNumber(kindOfParent)); @@ -234,30 +235,41 @@ if (kindOfChild != kocOrphan) { struct trackDb *parentTdb = (kindOfChild == kocFolderContent ? track->tdb->parent : tdbGetContainer(track->tdb)); jsonObjectAdd(ele, "parentTrack", newJsonString(parentTdb->track)); jsonObjectAdd(ele, "parentLabel", newJsonString(parentTdb->shortLabel)); if (kindOfChild != kocFolderContent && !track->canPack) { jsonObjectAdd(ele, "shouldPack", newJsonNumber(0)); // default vis is full, track->canPack = rTdbTreeCanPack(parentTdb); // but pack is an option } } boolean isCustomComposite = trackDbSettingOn(track->tdb, CUSTOM_COMPOSITE_SETTING); jsonObjectAdd(ele, "isCustomComposite", newJsonBoolean(isCustomComposite)); + +// check if track can have merged items, needed for context clicks in track +char *canHaveMergedItems = trackDbSetting(track->tdb, MERGESPAN_TDB_SETTING); +if (canHaveMergedItems != NULL) + { + // tells hgTracks.js whether we currently are merged or not + char setting[256]; + safef(setting, sizeof(setting), "%s.%s", track->track, MERGESPAN_CART_SETTING); + jsonObjectAdd(ele, setting, newJsonNumber(cartUsualInt(cart, setting, 0))); + } + // XXXX really s/d be numChildren jsonObjectAdd(ele, "hasChildren", newJsonNumber(slCount(track->tdb->subtracks))); // Configuring? int cfgByPopup = configurableByAjax(track->tdb,0); if (!configurable || track->hasUi == FALSE || cfgByPopup == cfgNone) jsonObjectAdd(ele, "configureBy", newJsonString("none")); else if (cfgByPopup < 0) // denied via ajax, but allowed via full normal hgTrackUi page jsonObjectAdd(ele, "configureBy", newJsonString("clickThrough")); else jsonObjectAdd(ele, "configureBy", newJsonString("popup")); // Remote access by URL?