e323d595c241d03570d380d8c60de60e99c1c4ec braney Fri Mar 21 12:36:21 2025 -0700 add support for bigDbSnp to quicklift diff --git src/hg/hgTrackUi/hgTrackUi.c src/hg/hgTrackUi/hgTrackUi.c index bd54dbfce9c..6f4701b14e5 100644 --- src/hg/hgTrackUi/hgTrackUi.c +++ src/hg/hgTrackUi/hgTrackUi.c @@ -2837,30 +2837,34 @@ { ancestors[count] = sp->name; count++; } char *coalescent = cartOptionalString(cart, codeVarName); printf("Set Coalescent Ancestor to:"); cgiMakeDropListFull(codeVarName, ancestors, ancestors, count, coalescent, NULL, NULL); } #endif void specificUi(struct trackDb *tdb, struct trackDb *tdbList, struct customTrack *ct, boolean ajax) /* Draw track specific parts of UI. */ { char *track = tdb->track; +char *db = database; +char *liftDb = cloneString(trackDbSetting(tdb, "quickLiftDb")); +if (liftDb != NULL) + db = liftDb; // Ideally check cfgTypeFromTdb()/cfgByCfgType() first, but with all these special cases already in // place, lets be cautious at this time. // NOTE: Developer, please try to use cfgTypeFromTdb()/cfgByCfgType(). boolean boxed = trackDbSettingClosestToHomeOn(tdb, "boxedCfg"); boolean isGencode3 = trackDbSettingOn(tdb, "isGencode3"); // UI precedence: // 1) supers to get them out of the way: they have no controls // 2) special cases based upon track name (developer please avoid) // 3) cfgTypeFromTdb()/cfgByCfgType() <== prefered method // 4) special cases falling through the cracks but based upon type if (tdbIsSuperTrack(tdb)) superTrackUi(tdb, tdbList); else if (sameString(track, "stsMap")) stsMapUi(tdb); @@ -3002,65 +3006,65 @@ || sameString(track, "tightEst") || sameString(track, "intronEst") || sameString(track, "xenoMrna") || sameString(track, "xenoEst")) mrnaCfgUi(cart, tdb, tdb->track, NULL, boxed); else if (sameString(track, "lrg")) lrgCfgUi(cart, tdb, tdb->track, NULL, boxed); else if (startsWithWord("hic", tdb->type) && tdbIsComposite(tdb)) hicCfgUiComposite(cart, tdb, tdb->track, NULL, boxed); // Some hic options aren't available at this level else if (tdb->type != NULL) { // NOTE for developers: please avoid special cases and use cfgTypeFromTdb//cfgByCfgType() // When you do, then multi-view cfg and subtrack cfg will work. eCfgType cType = cfgTypeFromTdb(tdb,FALSE); if (cType != cfgNone) { - cfgByCfgType(cType,database, cart, tdb,tdb->track, NULL, boxed); + cfgByCfgType(cType,db, cart, tdb,tdb->track, NULL, boxed); if (startsWith("gtexGene", track)) gtexGeneUi(cart, tdb, tdb->track, NULL, TRUE); else if (startsWith("gtexEqtlCluster", track)) gtexEqtlClusterUi(cart, tdb, tdb->track, NULL, TRUE); #ifdef USE_HAL if (cType == cfgSnake) cfgHalSnake(tdb, tdb->track); #endif } // NOTE: these cases that fall through the cracks should probably get folded into cfgByCfgType() else if (startsWithWord("expRatio", tdb->type)) expRatioUi(tdb); else if (startsWith("chromGraph", tdb->type)) chromGraphUi(tdb); else if (startsWith("sample", tdb->type)) genericWiggleUi(tdb,7); else if (startsWithWord("array",tdb->type)) // not quite the same as "expRatio" (custom tracks) expRatioCtUi(tdb); else if (startsWithWord("factorSource",tdb->type)) - factorSourceUi(database,tdb); + factorSourceUi(db,tdb); else if (startsWithWord("bigBed",tdb->type)) - labelCfgUi(database, cart, tdb, tdb->track); + labelCfgUi(db, cart, tdb, tdb->track); } if (!ajax) // ajax asks for a simple cfg dialog for right-click popup or hgTrackUi subtrack cfg { // Composites *might* have had their top level controls just printed, // but almost certainly have additional controls boolean isLogo = (trackDbSetting(tdb, "logo") != NULL); if (tdbIsComposite(tdb) && !isLogo) // for the moment generalizing this to include other containers... - hCompositeUi(database, cart, tdb, NULL, NULL, MAIN_FORM); + hCompositeUi(db, cart, tdb, NULL, NULL, MAIN_FORM); // Additional special case navigation links may be added - extraUiLinks(database, tdb, cart); + extraUiLinks(db, tdb, cart); } } #ifdef UNUSED static void findSuperChildrenAndSettings(struct trackDb *tdbList, struct trackDb *super) /* Find the tracks that have super as a parent and stuff references to them on * super's children list. Also do some visibility and parentName futzing. */ { struct trackDb *tdb; for (tdb = tdbList; tdb != NULL; tdb = tdb->next) { if (tdb->parent == super) { trackDbSuperMemberSettings(tdb); /* This adds tdb to tdb->parent->children. */ }