a79ca8843be0fbe1b0c59167db1aa9e4b487a07e kate Wed Aug 9 12:45:32 2017 -0700 Fixes to maxHeightPixels support in barChart UI. refs #19872 diff --git src/hg/lib/barChartUi.c src/hg/lib/barChartUi.c index 3903721..c9a2679 100644 --- src/hg/lib/barChartUi.c +++ src/hg/lib/barChartUi.c @@ -114,73 +114,81 @@ /* Convenience functions for hgTrackUi */ double barChartUiMaxMedianScore(struct trackDb *tdb) /* Max median score, for scaling */ { char *setting = trackDbSettingClosestToHome(tdb, BAR_CHART_MAX_LIMIT); if (setting != NULL) { double max = sqlDouble(setting); if (max > 0.0) return max; } return BAR_CHART_MAX_LIMIT_DEFAULT; } -void barChartUiViewTransform(struct cart *cart, char *track, struct trackDb *tdb) +void barChartUiViewTransform(struct cart *cart, struct trackDb *tdb) /* Checkboxes to select log-transform or autoscale RPKM values, or text input for view limits */ { +char *track = tdb->track; char buf[512]; char cartVar[1024]; puts("Log10(x+1) transform:\n"); safef(cartVar, sizeof(cartVar), "%s.%s", track, BAR_CHART_LOG_TRANSFORM); boolean isLogTransform = cartCgiUsualBoolean(cart, cartVar, BAR_CHART_LOG_TRANSFORM_DEFAULT); cgiMakeCheckBoxWithId(cartVar, isLogTransform, cartVar); jsOnEventByIdF("change", cartVar, "barChartTransformChanged(event);"); puts(" "); puts("Autoscale:\n"); safef(cartVar, sizeof(cartVar), "%s.%s", track, BAR_CHART_AUTOSCALE); boolean isAutoScale = cartCgiUsualBoolean(cart, cartVar, BAR_CHART_AUTOSCALE_DEFAULT); cgiMakeCheckBoxWithId(cartVar, isAutoScale, cartVar); jsOnEventByIdF("change", cartVar, "barChartTransformChanged(event);"); boolean isViewLimits = !isAutoScale && !isLogTransform; safef(buf, sizeof buf, "%sViewLimitsMaxLabel %s", track, !isViewLimits ? "disabled" : ""); puts(" "); printf("View limits maximum:\n", buf); safef(cartVar, sizeof(cartVar), "%s.%s", track, BAR_CHART_MAX_VIEW_LIMIT); int viewMax = cartCgiUsualInt(cart, cartVar, BAR_CHART_MAX_VIEW_LIMIT_DEFAULT); cgiMakeIntVarWithExtra(cartVar, viewMax, 4, !isViewLimits ? "disabled" : ""); char *unit = trackDbSettingClosestToHomeOrDefault(tdb, BAR_CHART_UNIT, ""); printf(" %s (range 0-%d)\n", buf, unit, round(barChartUiMaxMedianScore(tdb))); } -void barChartUiMaxHeight(struct cart *cart, char *track, struct trackDb *tdb) -/* Input to change maximum track height */ +void barChartUiFetchMinMaxPixels(struct cart *cart, struct trackDb *tdb, + int *retMin, int *retMax, int *retDefault, int *retCurrent) +/* Get min/max/default/current settings for track height from cart and trackDb */ { -int min = BAR_CHART_MAX_HEIGHT_MIN; -int deflt = BAR_CHART_MAX_HEIGHT_DEFAULT; -int max = BAR_CHART_MAX_HEIGHT_MAX; -int settingsDefault; -wigFetchMinMaxPlusPixelsWithCart(cart, tdb, track, &min, &max, &deflt, &settingsDefault); +assert(retMin && retMax && retDefault && retCurrent); +cartTdbFetchMinMaxPixels(cart, tdb, + BAR_CHART_MAX_HEIGHT_MIN, BAR_CHART_MAX_HEIGHT_MAX, BAR_CHART_MAX_HEIGHT_DEFAULT, + retMin, retMax, retDefault, retCurrent); +} + +static void barChartUiMaxHeight(struct cart *cart, struct trackDb *tdb) +/* Input box to change maximum track height */ +{ +int min, max, deflt, current; +barChartUiFetchMinMaxPixels(cart, tdb, &min, &max, &deflt, ¤t); puts("Track height maximum:\n"); char cartVar[1024]; -safef(cartVar, sizeof(cartVar), "%s.%s", track, HEIGHTPER); -cgiMakeIntVarWithLimits(cartVar, deflt, "Track height maximum", 0, min, max); -printf("pixels (range: %d to %d, default: %d)", min, max, settingsDefault); +safef(cartVar, sizeof(cartVar), "%s.%s", tdb->track, HEIGHTPER); +cgiMakeIntVarWithLimits(cartVar, current, "Track height maximum", 0, min, max); +printf("pixels (range: %d to %d, default: %d)", min, max, deflt); } struct barChartCategory *barChartUiGetCategories(char *database, struct trackDb *tdb) /* Get category colors and descriptions. Use barChartColors setting if present. If not, if there is a barChartBars setting, assign rainbow colors. * O/w look for a table naed track+Category, and use labels and colors there */ { struct barChartCategory *categs = NULL; char *words[BAR_CHART_MAX_CATEGORIES]; char *colorWords[BAR_CHART_MAX_CATEGORIES]; char *labels = trackDbSettingClosestToHome(tdb, BAR_CHART_CATEGORY_LABELS); char *colors = trackDbSettingClosestToHome(tdb, BAR_CHART_CATEGORY_COLORS); struct barChartCategory *categ = NULL; @@ -259,36 +267,36 @@ } void barChartCfgUi(char *database, struct cart *cart, struct trackDb *tdb, char *track, char *title, boolean boxed) /* Bar chart track type */ { if (cartVarExists(cart, "ajax")) isPopup = TRUE; boxed = cfgBeginBoxAndTitle(tdb, boxed, title); if (startsWith("big", tdb->type)) labelCfgUi(database, cart, tdb); /* Data transform (log, autoscale or viewlimits) */ char cartVar[1024]; puts("
"); -barChartUiViewTransform(cart, track, tdb); +barChartUiViewTransform(cart, tdb); puts("
"); /* Maximum track height */ puts(""); -barChartUiMaxHeight(cart, track, tdb); +barChartUiMaxHeight(cart, tdb); puts("
"); /* Category filter */ printf("