3c01f2d42cd99f1804007c9ded92a56c3775279f larrym Fri Feb 24 13:45:02 2012 -0800 use maxWindowToDraw to show 'zoom in ... to view items' in track image when there are too many cutters to show (#6951) diff --git src/hg/hgTracks/cutterTrack.c src/hg/hgTracks/cutterTrack.c index 0bdadf1..91ee493 100644 --- src/hg/hgTracks/cutterTrack.c +++ src/hg/hgTracks/cutterTrack.c @@ -1,22 +1,24 @@ #include "common.h" #include "psl.h" #include "cutter.h" #include "hgTracks.h" #include "hdb.h" #include "cutterTrack.h" +#define MAX_CUTTER_WINSIZE 250000 + void cuttersDrawAt(struct track *tg, void *item, struct hvGfx *hvg, int xOff, int y, double scale, MgFont *font, Color color, enum trackVisibility vis) /* Draw the restriction enzyme at position. */ { struct bed *bed = item; int heightPer, x1, x2, w; if (!zoomedToBaseLevel) bedDrawSimpleAt(tg, item, hvg, xOff, y, scale, font, color, vis); else { heightPer = tg->heightPer; x1 = round((double)((int)bed->chromStart-winStart)*scale) + xOff; x2 = round((double)((int)bed->chromEnd-winStart)*scale) + xOff; color = hvGfxFindColorIx(hvg, 0,0,0); @@ -91,85 +93,88 @@ void cuttersLoad(struct track *tg) { struct sqlConnection *conn; struct cutter *cutters; struct dnaSeq *windowDna = NULL; struct bed *bedList = NULL; int winSize = winEnd - winStart; conn = hAllocConn("hgFixed"); cutters = cutterLoadByQuery(conn, "select * from cutters"); windowDna = hDnaFromSeq(database, chromName, winStart, winEnd, dnaUpper); /* Do different things based on window size. */ -if (winSize < 250000) +if (winSize < MAX_CUTTER_WINSIZE) { char *enz = cartUsualString(cart, cutterVar, cutterDefault); struct slName *cartCutters = NULL; if (enz && (strlen(enz) > 0)) { eraseWhiteSpace(enz); cartCutters = slNameListFromComma(enz); } if (cartCutters) cullCutters(&cutters, TRUE, cartCutters, 0); else { if (zoomedToBaseLevel) cullCutters(&cutters, FALSE, NULL, 0); - else if (winSize >= 20000 && winSize < 250000) + else if (winSize >= 20000 && winSize < MAX_CUTTER_WINSIZE) { struct slName *popularCutters = slNameListFromComma(CUTTERS_POPULAR); cullCutters(&cutters, TRUE, popularCutters, 0); } else if (winSize < 3000) { cullCutters(&cutters, FALSE, NULL, 5); } else cullCutters(&cutters, FALSE, NULL, 6); } bedList = matchEnzymes(cutters, windowDna, winStart); if (bedList) tg->items = bedList; } cutterFreeList(&cutters); freeDnaSeq(&windowDna); hFreeConn(&conn); } struct track *cuttersTg() /* Track group for the restriction enzymes. */ { struct track *tg = trackNew(); struct trackDb *tdb; +char buf[32]; bedMethods(tg); AllocVar(tdb); tg->track = CUTTERS_TRACK_NAME; tg->table = CUTTERS_TRACK_NAME; tg->canPack = TRUE; tg->visibility = tvHide; tg->hasUi = TRUE; tg->shortLabel = cloneString(CUTTERS_TRACK_LABEL); tg->longLabel = cloneString(CUTTERS_TRACK_LONGLABEL); tg->loadItems = cuttersLoad; tg->drawItemAt = cuttersDrawAt; tg->priority = 99.9; tg->defaultPriority = 99.9; tg->groupName = cloneString("map"); tg->defaultGroupName = cloneString("map"); tdb->track = cloneString(CUTTERS_TRACK_NAME); tdb->canPack = tg->canPack; tdb->table = cloneString(CUTTERS_TRACK_NAME); tdb->shortLabel = cloneString(tg->shortLabel); tdb->longLabel = cloneString(tg->longLabel); tdb->grp = cloneString(tg->groupName); tdb->priority = tg->priority; +safef(buf, sizeof(buf), "%d", MAX_CUTTER_WINSIZE); +trackDbAddSetting(tdb, "maxWindowToDraw", buf); trackDbPolish(tdb); tg->tdb = tdb; return tg; }