1753574db04394981a56fae1ca4154fdd9d7f03c braney Mon Jan 5 13:41:42 2015 -0800 stop putting stuff in the cart when displaying wigMaf tracks. #14622 diff --git src/hg/hgTracks/wigMafTrack.c src/hg/hgTracks/wigMafTrack.c index 1b25480..0779527 100644 --- src/hg/hgTracks/wigMafTrack.c +++ src/hg/hgTracks/wigMafTrack.c @@ -144,37 +144,34 @@ mi->height = tl.fontHeight; slAddHead(&miList, mi); hashAdd(hash, mi->db, mi); } } } hashFree(&hash); return miList; } struct wigMafItem *newSpeciesItems(struct track *track, int height) /* Make up item list for all species configured in track settings */ { -struct dyString *order = dyStringNew(256); -char option[MAX_SP_SIZE]; char *species[MAX_SP_SIZE]; char *groups[20]; char *defaultOff[MAX_SP_SIZE]; char sGroup[MAX_SP_SIZE]; -struct wigMafItem *mi = NULL, *miList = NULL; int group; int i; int speciesCt = 0, groupCt = 1; int speciesOffCt = 0; struct hash *speciesOffHash = newHash(0); char *speciesUseFile = trackDbSetting(track->tdb, SPECIES_USE_FILE); char *msaTable = NULL; /* either speciesOrder or speciesGroup is specified in trackDb */ char *speciesOrder = trackDbSetting(track->tdb, SPECIES_ORDER_VAR); char *speciesGroup = trackDbSetting(track->tdb, SPECIES_GROUP_VAR); char *speciesOff = trackDbSetting(track->tdb, SPECIES_DEFAULT_OFF_VAR); bool lowerFirstChar = TRUE; char *firstCase; @@ -216,66 +213,52 @@ /* keep track of species configured off initially for track */ if (speciesOff) { speciesOffCt = chopLine(cloneString(speciesOff), defaultOff); for (i = 0; i < speciesOffCt; i++) hashAdd(speciesOffHash, defaultOff[i], NULL); } char *prefix = track->track; // use when setting things to the cart if (tdbIsContainerChild(track->tdb)) prefix = tdbGetContainer(track->tdb)->track; /* Make up items for other organisms by scanning through group & species track settings */ +struct wigMafItem *mi = NULL, *miList = NULL; for (group = 0; group < groupCt; group++) { if (groupCt != 1 || !speciesOrder) { safef(sGroup, sizeof sGroup, "%s%s", SPECIES_GROUP_PREFIX, groups[group]); speciesOrder = trackDbRequiredSetting(track->tdb, sGroup); } speciesCt = chopLine(cloneString(speciesOrder), species); for (i = 0; i < speciesCt; i++) { - /* skip this species if UI checkbox was unchecked */ - if (!cartVarExistsAnyLevel(cart, track->tdb,FALSE,species[i])) - { - if (hashLookup(speciesOffHash, species[i])) + boolean defaultOn = (hashLookup(speciesOffHash, species[i]) == NULL); + + if (cartUsualBooleanClosestToHome(cart, track->tdb, FALSE, species[i],defaultOn)) { - safef(option, sizeof(option), "%s.%s", prefix, species[i]); - cartSetBoolean(cart, option, FALSE); - } - } - if (!cartUsualBooleanClosestToHome(cart, track->tdb, FALSE, species[i],TRUE)) - continue; mi = newMafItem(species[i], group, lowerFirstChar); + mi->height = height; slAddHead(&miList, mi); } } - -slReverse(&miList); -for (mi = miList; mi != NULL; mi = mi->next) - { - mi->height = height; - dyStringPrintf(order, "%s ",mi->db); } -safef(option, sizeof(option), "%s.speciesOrder", prefix); -cartSetString(cart, option, order->string); -slReverse(&miList); return miList; } static struct wigMafItem *scoreItem(int scoreHeight, char *label) /* Make up item that will show the score */ { struct wigMafItem *mi; AllocVar(mi); mi->name = cloneString(label); mi->height = scoreHeight; return mi; } @@ -1135,52 +1118,49 @@ { /* Draw pairwise display for this multiple alignment */ char *summary; struct wigMafItem *miList = track->items, *mi = miList; struct sqlConnection *conn; struct sqlResult *sr = NULL; char **row = NULL; int rowOffset = 0; struct mafSummary *ms, *summaryList; struct hash *componentHash = newHash(6); struct hashEl *hel; struct hashCookie cookie; struct dyString *where = dyStringNew(256); char *whereClause = NULL; boolean useIrowChains = TRUE; -char option[64]; if (miList == NULL) return FALSE; char *prefix = track->track; // use when setting things to the cart if (tdbIsContainerChild(track->tdb)) prefix = tdbGetContainer(track->tdb)->track; /* get summary table name from trackDb */ if ((summary = summarySetting(track)) == NULL) return FALSE; if (cartVarExistsAnyLevel(cart, track->tdb,FALSE,MAF_CHAIN_VAR)) useIrowChains = cartUsualBooleanClosestToHome(cart, track->tdb, FALSE, MAF_CHAIN_VAR,TRUE); else { char *irowString = trackDbSetting(track->tdb, "irows"); if (irowString && sameString(irowString, "off")) useIrowChains = FALSE; - safef(option, sizeof(option), "%s.%s", prefix, MAF_CHAIN_VAR); - cartSetBoolean(cart, option, useIrowChains); } /* Create SQL where clause that will load up just the * summaries for the species that we are including. */ conn = hAllocConn(database); dyStringAppend(where, "src in ("); for (mi = miList; mi != NULL; mi = mi->next) { if (!isPairwiseItem(mi)) /* exclude non-species items (e.g. conservation wiggle */ continue; dyStringPrintf(where, "'%s'", mi->db); if (mi->next != NULL) dyStringAppend(where, ","); } @@ -1363,50 +1343,47 @@ } static boolean drawPairsFromMultipleMaf(struct track *track, int seqStart, int seqEnd, struct hvGfx *hvg, int xOff, int yOff, int width, MgFont *font, Color color, enum trackVisibility vis) /* Draw pairwise display from maf of multiple alignment. * Extract pairwise alignments from maf and rescore. * This is used only when zoomed-in. */ { struct wigMafItem *miList = track->items, *mi = miList; int graphHeight = 0; Color pairColor = (vis == tvFull ? track->ixAltColor : color); boolean useIrowChains = TRUE; -char option[64]; boolean doSnpMode = (vis == tvPack) &&(trackDbSetting(track->tdb, "snpMode") != NULL); char *prefix = track->track; // use when setting things to the cart if (tdbIsContainerChild(track->tdb)) prefix = track->tdb->parent->track; struct mafPriv *mp = getMafPriv(track); if (miList == NULL || mp->list == NULL) return FALSE; if (cartVarExistsAnyLevel(cart, track->tdb,FALSE,MAF_CHAIN_VAR)) useIrowChains = cartUsualBooleanClosestToHome(cart, track->tdb, FALSE, MAF_CHAIN_VAR,TRUE); else { char *irowString = trackDbSetting(track->tdb, "irows"); if (irowString && sameString(irowString, "off")) useIrowChains = FALSE; - safef(option, sizeof(option), "%s.%s", prefix, MAF_CHAIN_VAR); - cartSetBoolean(cart, option, useIrowChains); } if (vis == tvFull) graphHeight = pairwiseWigHeight(track); /* display pairwise items */ for (mi = miList; mi != NULL; mi = mi->next) { struct mafAli *mafList = NULL, *maf, *pairMaf; struct mafComp *mcThis, *mcPair = NULL, *mcMaster = NULL; if (mi->ix < 0) /* ignore item for the score */ continue; @@ -1835,31 +1812,30 @@ MgFont *font, Color color, enum trackVisibility vis, struct wigMafItem *miList) /* Draw base-by-base view, return new Y offset. */ { struct wigMafItem *mi; struct mafAli *mafList, *maf, *sub; struct mafComp *mc, *mcMaster; int lineCount = slCount(miList); char **lines = NULL, *selfLine, *insertLine; int *insertCounts; int i, x = xOff, y = yOff; struct dnaSeq *seq = NULL; struct hash *miHash = newHash(9); struct hash *srcHash = newHash(0); char dbChrom[64]; -char option[64]; int alignLineLength = winBaseCount * 2; /* doubled to allow space for insert counts */ boolean complementBases = cartUsualBooleanDb(cart, database, COMPLEMENT_BASES_VAR, FALSE); bool dots = FALSE; /* configuration option */ /* this line must be longer than the longest base-level display */ char noAlignment[2000]; boolean useIrowChains = TRUE; int offset; char *framesTable = NULL; char *defaultCodonSpecies = cartUsualString(cart, SPECIES_CODON_DEFAULT, NULL); char *codonTransMode = NULL; boolean startSub2 = FALSE; int mafOrig = 0; int mafOrigOffset = 0; @@ -1913,32 +1889,30 @@ startSub2 = TRUE; seqStart -=2; } seqEnd +=2; if (seqEnd > seqBaseCount) seqEnd = seqBaseCount; if (cartVarExistsAnyLevel(cart, track->tdb,FALSE,MAF_DOT_VAR)) dots = cartUsualBooleanClosestToHome(cart, track->tdb, FALSE, MAF_DOT_VAR,TRUE); else { char *dotString = trackDbSetting(track->tdb, MAF_DOT_VAR); if (dotString && sameString(dotString, "on")) { dots = TRUE; - safef(option, sizeof(option), "%s.%s", prefix, MAF_DOT_VAR); - cartSetBoolean(cart, option, TRUE); } } if (cartVarExistsAnyLevel(cart, track->tdb,FALSE,"frames")) framesTable = cartOptionalStringClosestToHome(cart, track->tdb,FALSE,"frames"); else framesTable = trackDbSetting(track->tdb, "frames"); if (framesTable) { codonTransMode = cartUsualStringClosestToHome(cart, track->tdb,FALSE,"codons", "codonDefault"); if (sameString("codonNone", codonTransMode)) framesTable = NULL; } @@ -1947,32 +1921,30 @@ if (framesTable != NULL) newTableType = hHasField(database, framesTable, "isExonStart"); /* initialize "no alignment" string to o's */ for (i = 0; i < sizeof noAlignment - 1; i++) noAlignment[i] = UNALIGNED_SEQ; if (cartVarExistsAnyLevel(cart, track->tdb,FALSE,MAF_CHAIN_VAR)) useIrowChains = cartUsualBooleanClosestToHome(cart, track->tdb, FALSE, MAF_CHAIN_VAR,TRUE); else { char *irowString = trackDbSetting(track->tdb, "irows"); if (irowString && sameString(irowString, "off")) useIrowChains = FALSE; - safef(option, sizeof(option), "%s.%s", prefix, MAF_CHAIN_VAR); - cartSetBoolean(cart, option, useIrowChains); } /* Allocate a line of characters for each item. */ AllocArray(lines, lineCount); lines[0] = needMem(alignLineLength); for (i=1; i<lineCount; ++i) { lines[i] = needMem(alignLineLength); memset(lines[i], ' ', alignLineLength - 1); } /* Give nice names to first two. */ insertLine = lines[0]; selfLine = lines[1];