f2e106b897f58f772d3a25713bb3ede142ae4bd5 braney Mon Jun 13 15:58:12 2016 -0700 add next/prev item navigation to longTabix support diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c index 5dcf167..512d021 100644 --- src/hg/hgTracks/simpleTracks.c +++ src/hg/hgTracks/simpleTracks.c @@ -2005,30 +2005,43 @@ NULL, &rowOffset); while ((row = sqlNextRow(sr)) != NULL) { struct oreganno *el = oregannoLoad(row); if (!oregannoFilterType(el, tg->attrTable)) oregannoFree(&el); else slAddHead(&list, el); } sqlFreeResult(&sr); slReverse(&list); tg->items = list; hFreeConn(&conn); } +struct bed* loadLongTabixAsBed (struct track *tg, char *chr, int start, int end) +/* load bigBed for a range, as a bed list (for next item button). Just grab one item */ +{ +struct hash *settings = tg->tdb->settingsHash; +char *bigDataUrl = hashFindVal(settings, "bigDataUrl"); +struct bedTabixFile *btf = bedTabixFileMayOpen(bigDataUrl, NULL, 0, 0); +struct bed *bed = bedTabixReadFirstBed(btf, chromName, start, end, bedLoad5); +bedTabixFileClose(&btf); + +return bed; +} + + struct bed* loadBigBedAsBed (struct track *tg, char *chr, int start, int end) /* load bigBed for a range, as a bed list (for next item button). Just grab one item */ { struct bbiFile *bbiFile = fetchBbiForTrack(tg); struct lm *lm = lmInit(0); struct bigBedInterval *intervals = bigBedIntervalQuery(bbiFile, chr, start, end, 1, lm); struct bed *retBed = NULL; if (intervals != NULL) { AllocVar(retBed); retBed->chrom = cloneString(chr); retBed->chromStart = intervals->start; @@ -2791,30 +2804,32 @@ struct window *windows = makeWindowListFromVirtChrom(xStart, xEnd); // To optimize when using tiny exon-like regions, merge nearby regions. struct window *mergedWindows = makeMergedWindowList(windows); struct window *mw; for(mw=mergedWindows; mw; mw=mw->next) { struct bed *items = NULL; #ifndef GBROWSE if (sameWord(tg->table, WIKI_TRACK_TABLE)) items = wikiTrackGetBedRange(tg->table, mw->chromName, mw->winStart, mw->winEnd); + else if (startsWith("longTabix", tg->tdb->type)) + items = loadLongTabixAsBed(tg, mw->chromName, mw->winStart, mw->winEnd); else if (sameWord(tg->table, "gvPos")) items = loadGvAsBed(tg, mw->chromName, mw->winStart, mw->winEnd); else if (sameWord(tg->table, "oreganno")) items = loadOregannoAsBed(tg, mw->chromName, mw->winStart, mw->winEnd); else if (tg->isBigBed) items = loadBigBedAsBed(tg, mw->chromName, mw->winStart, mw->winEnd); else #endif /* GBROWSE */ { if (isCustomTrack(tg->table)) { struct customTrack *ct = tg->customPt; items = hGetCtBedRange(CUSTOM_TRASH, database, ct->dbTableName, mw->chromName, mw->winStart, mw->winEnd, NULL); } else