21bf4f713e944af4e8810544d68c441510ea85a3 kate Wed Jul 26 16:31:01 2017 -0700 Add support for maxHeightPixels in trackDb and UI of barChart type tracks. refs #19872 diff --git src/hg/lib/barChartUi.c src/hg/lib/barChartUi.c index b5cfcbe..3903721 100644 --- src/hg/lib/barChartUi.c +++ src/hg/lib/barChartUi.c @@ -144,30 +144,45 @@ cgiMakeCheckBoxWithId(cartVar, isAutoScale, cartVar); jsOnEventByIdF("change", cartVar, "barChartTransformChanged(event);"); boolean isViewLimits = !isAutoScale && !isLogTransform; safef(buf, sizeof buf, "%sViewLimitsMaxLabel %s", track, !isViewLimits ? "disabled" : ""); puts(" "); printf("<span class='%s'><b>View limits maximum:</b></span>\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("<span class='%s'> %s (range 0-%d)</span>\n", buf, unit, round(barChartUiMaxMedianScore(tdb))); } +void barChartUiMaxHeight(struct cart *cart, char *track, struct trackDb *tdb) +/* Input to change maximum track height */ +{ +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); +puts("<b>Track height maximum:</b>\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); +} + 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; if (labels == NULL) { @@ -240,53 +255,53 @@ struct barChartCategory *categ = barChartUiGetCategoryById(id, database, tdb); if (categ == NULL) return "Unknown"; return categ->label; } 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); -printf("\n<table id=barChartControls style='font-size:%d%%' %s>\n<tr><td>", - isPopup ? 75 : 100, boxed ?" width='100%'":""); - -char cartVar[1024]; /* Data transform (log, autoscale or viewlimits) */ -puts("<div>"); +char cartVar[1024]; +puts("<p>"); barChartUiViewTransform(cart, track, tdb); -puts("</div>"); +puts("</p>"); + +/* Maximum track height */ +puts("<p>"); +barChartUiMaxHeight(cart, track, tdb); +puts("</p>"); /* Category filter */ printf("<br>"); char *categoryLabel = trackDbSettingClosestToHomeOrDefault(tdb, BAR_CHART_CATEGORY_LABEL, BAR_CHART_CATEGORY_LABEL_DEFAULT); char *db = cartString(cart, "db"); struct barChartCategory *categs = barChartUiGetCategories(db, tdb); printf("<div><b>%s:</b>\n", categoryLabel); safef(cartVar, sizeof(cartVar), "%s.%s", track, BAR_CHART_CATEGORY_SELECT); if (isPopup) { printf("<a href='%s?g=%s'><button type='button'>Change</button><a>", hTrackUiForTrack(track), track); } else { jsMakeCheckboxGroupSetClearButton(cartVar, TRUE); puts(" "); jsMakeCheckboxGroupSetClearButton(cartVar, FALSE); } printf("</div>"); struct slName *selectedValues = NULL; if (cartListVarExistsAnyLevel(cart, tdb, FALSE, BAR_CHART_CATEGORY_SELECT)) selectedValues = cartOptionalSlNameListClosestToHome(cart, tdb, FALSE, BAR_CHART_CATEGORY_SELECT); makeCategoryCheckboxes(cartVar, categs, selectedValues); - -puts("\n</table>\n"); cfgEndBox(boxed); }