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