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