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;
 }