9e9fdcd37b60aa4186eeea2b2c61df277dbfeb5a kate Thu Oct 22 15:48:16 2020 -0700 Add multi-region button to position line and lighten highlights on alternating regions. Part of improving multi-region features for sparse track use. refs #26385 diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c index d541c7d..41c6f8c 100644 --- src/hg/hgTracks/hgTracks.c +++ src/hg/hgTracks/hgTracks.c @@ -5364,31 +5364,31 @@ } if (!exists) { hvGfxSetClip(bgImg, fullInsideX, 0, fullInsideWidth, pixHeight); y = gfxBorder; if (virtMode) { // vertical windows separators if (emAltHighlight) { // light blue alternating backgrounds - Color lightBlue = hvGfxFindRgb(bgImg, &guidelineColor); + Color lightBlue = hvGfxFindRgb(bgImg, &lightGuidelineColor); for (window=windows; window; window=window->next) // background under every other window { if (window->regionOdd) hvGfxBox(bgImg, window->insideX, 0, window->insideWidth, pixHeight, lightBlue); } } else { // red vertical lines Color lightRed = hvGfxFindRgb(bgImg, &vertWindowSeparatorColor); for (window=windows->next; window; window=window->next) // skip first window, not needed hvGfxBox(bgImg, window->insideX, 0, 1, pixHeight, lightRed); } } else @@ -8598,30 +8598,44 @@ } /* Make line that says position. */ { char buf[256]; char *survey = cfgOptionEnv("HGDB_SURVEY", "survey"); char *surveyLabel = cfgOptionEnv("HGDB_SURVEY_LABEL", "surveyLabel"); char *javascript = "document.location = '/cgi-bin/hgTracks?db=' + document.TrackForm.db.options[document.TrackForm.db.selectedIndex].value;"; if (containsStringNoCase(database, "zoo")) { hPuts("Organism "); printAssemblyListHtmlExtra(database, "change", javascript); } + /* Multi-region button on position line */ + if (sameString(virtModeType, "default")) + { + hButtonMaybePressed("hgTracksConfigMultiRegionPage", "multi-region", + "Configure view in multi-region display mode", + "popUpHgt.hgTracks('multi-region config'); return false;", FALSE); + } + else + { + hButtonWithMsg("hgt.exitMultiRegion", "exit multi-region", + "Exit multi-region display mode"); + } + hPrintf(" "); + if (virtualSingleChrom()) // DISGUISE VMODE safef(buf, sizeof buf, "%s", windowsSpanPosition()); else safef(buf, sizeof buf, "%s:%ld-%ld", virtChromName, virtWinStart+1, virtWinEnd); position = cloneString(buf); char *pressedClass = "", *showVirtRegions = ""; if (differentString(virtModeType, "default")) { pressedClass = "pressed"; showVirtRegions = "show multi-region position ranges and "; } hPrintf("%s", pressedClass, showVirtRegions, addCommasToPos(database, position)); @@ -9461,30 +9475,37 @@ } } if (sameString(position, "")) { hUserAbort("Please go back and enter a coordinate range or a search term in the \"search term\" field.
For example: chr22:20100000-20200000.\n"); } if (!positionIsVirt) { if (! resolvePosition(&position)) return; } +if (cgiVarExists("hgt.exitMultiRegion")) + { + cartRemove(cart, "hgt.exitMultiRegion"); + cartSetString(cart, "virtModeType", "default"); + cartSetBoolean(cart, "virtMode", FALSE); + } + virtMode = cartUsualBoolean(cart, "virtMode", FALSE); /* Figure out basic dimensions of display. This * needs to be done early for the sake of the * zooming and dinking routines. */ setLayoutGlobals(); virtModeType = cartUsualString(cart, "virtModeType", virtModeType); if (positionIsVirt && virtualSingleChrom()) { // we need chromName to be set before initRegionList() gets called. position = cartUsualString(cart, "nonVirtPosition", ""); if (!sameString(position,"")) parseNonVirtPosition(position);