0f6dbe96fa46d69d5f198bdd5b5ed242b069fab9
chmalee
Mon Sep 23 15:17:40 2024 -0700
Make sure there is only one highlight color picker for the track highlightBy settings, since they all share the same highlight color. Add an info icon to note that all highlights use the same color and are additive.
diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index 1a48056..4971a54 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -6788,36 +6788,41 @@
return tdbGetTrackFilters( tdb, HIGHLIGHT_TEXT_WILDCARD_LOW, HIGHLIGHT_TEXT_NAME_LOW, HIGHLIGHT_TEXT_WILDCARD_CAP, HIGHLIGHT_TEXT_NAME_CAP);
}
struct trackDbFilter *tdbGetTrackHighlightByHighlights( struct trackDb *tdb)
// get the values filters out of trackDb
{
return tdbGetTrackFilters( tdb, HIGHLIGHT_VALUES_WILDCARD_LOW, HIGHLIGHT_VALUES_NAME_LOW, HIGHLIGHT_VALUES_WILDCARD_CAP, HIGHLIGHT_VALUES_NAME_CAP);
}
char *prevHighlightColor(struct cart *cart, struct trackDb *tdb)
/* Return the cart string for the highlight color if it has been changed else the default */
{
return cartOrTdbString(cart, tdb, HIGHLIGHT_COLOR_CART_VAR, HIGHLIGHT_COLOR_DEFAULT);
}
+static boolean didHighlightSelector = FALSE;
void printHighlightColorPicker(struct cart *cart, struct trackDb *tdb)
{
+if (didHighlightSelector)
+ return;
jsIncludeFile("ajax.js", NULL);
jsIncludeFile("hui.js", NULL);
-puts("
");
-puts("Choose highlight color:");
+puts("
");
+char *text = "Note that multiple highlight selections use the same color, and are applied successively. So any item that meets at least one criteria will be highlighted.";
+printInfoIcon(text);
+puts("
");
puts("");
jsInlineF("var cartHighlightColor = \"%s\"\n;", prevHighlightColor(cart, tdb));
jsInlineF("makeHighlightPicker(\"%s.highlightColor\", document.getElementById(\"hgTrackUiColorPicker\"), \"%s\");\n", tdb->track, tdb->track);
}
int defaultFieldLocation(char *field)
/* Sometimes we get bigBed filters with field names that are not in the AS file.
* Try to guess what the user means. */
{
if (sameString("score", field))
return 4;
if (sameString("signal", field))
return 6;
if (sameString("signalValue", field))
return 6;
@@ -6861,31 +6866,36 @@
if (asCol != NULL)
{ // Found label so replace field
field = asCol->comment;
}
else if (defaultFieldLocation(field) < 0)
errAbort("Building filter on field %s which is not in AS file.", field);
}
char labelBuf[1024];
char *label = labelBuf;
char *filterName = getScoreNameAdd(tdb, scoreName, _BY_RANGE);
boolean filterByRange = trackDbSettingClosestToHomeOn(tdb, filterName);
if (trackDbLabel)
label = trackDbLabel;
else
+ {
+ if (isHighlight)
+ safef(labelBuf, sizeof(labelBuf),"%s%s", filterByRange ? "": "Highlight items with Minimum ", field );
+ else
safef(labelBuf, sizeof(labelBuf),"%s%s", filterByRange ? "": "Minimum ", field);
+ }
if (isHighlight && count == 0)
printHighlightColorPicker(cart, tdb);
showScoreFilter(cart,tdb,opened,boxed,parentLevel,name,title,label,scoreName,isHighlight);
count++;
}
if (as != NULL)
asObjectFree(&as);
}
if (count > 0)
puts("");
return count;
}
@@ -7062,31 +7072,30 @@
filterBy_t *filterBySet = filterBySetGet(tdb,cart,name);
if (filterBySet != NULL)
{
if (!tdbIsComposite(tdb) && cartOptionalString(cart, "ajax") == NULL)
jsIncludeFile("hui.js",NULL);
if (!isBoxOpened) // Note filterBy boxes are not double "boxed",
printf("
"); // if there are no other filters
filterBySetCfgUi(cart,tdb,filterBySet,TRUE, name);
filterBySetFree(&filterBySet);
skipScoreFilter = TRUE;
}
// add any highlights:
// Numeric highlights are first
-boolean didHighlightSelector = FALSE;
if (numericFiltersShowAll(db, cart, tdb, &isBoxOpened, boxed, parentLevel, name, title, TRUE) > 0)
{
didHighlightSelector = TRUE;
skipScoreFilter = TRUE;
}
if (textFiltersShowAll(db, cart, tdb, TRUE))
{
didHighlightSelector = TRUE;
skipScoreFilter = TRUE;
}
filterBy_t *highlightBySet = highlightBySetGet(tdb,cart,name);
if (highlightBySet != NULL)
{