bc948392618f037e666eeff707b087670e90c303 kate Thu Aug 24 14:17:35 2017 -0700 Revert autoscale and maxHeight features (to commit 7d342854b5719897461428785269775c06727326). Waiting for after release of barchart tracks and hubs before adding back (with additional UI review). refs #19355 diff --git src/hg/lib/barChartUi.c src/hg/lib/barChartUi.c index e6aed16..f424dc2 100644 --- src/hg/lib/barChartUi.c +++ src/hg/lib/barChartUi.c @@ -101,110 +101,73 @@ catSel->checked = TRUE; else catSel->checked = (hashLookup(checkHash, categ->name) != NULL); slAddHead(&all, catSel); } slReverse(&all); makeGroupCheckboxes(name, NULL, all); puts(""); char buf[512]; safef(buf, sizeof(buf), "%s%s", cgiMultListShadowPrefix(), name); cgiMakeHiddenVar(buf, "0"); } /* Convenience functions for hgTrackUi */ +void barChartUiLogTransform(struct cart *cart, char *track, struct trackDb *tdb) +/* Checkbox to select log-transformed RPKM values */ +/* NOTE: this code from gtexUi.c. Consider sharing. */ +{ +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, "barChartUiTransformChanged('%s');", track); +} + 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, struct trackDb *tdb) -/* Checkboxes to select log-transform or autoscale RPKM values, or text input for view limits */ +void barChartUiViewLimits(struct cart *cart, char *track, struct trackDb *tdb) +/* Set viewing limits if log transform not checked */ +/* NOTE: this code from gtexUi.c. Consider sharing. */ { -char *track = tdb->track; -char buf[512]; char cartVar[1024]; -puts("Log10(x+1) transform:\n"); +char buf[512]; 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);"); - -boolean isAutoScale = FALSE; -#define AUTO_SCALE -#ifdef AUTO_SCALE -// Implemented, but leaving out for now (seems confusing) -puts("  "); -puts("Auto-scale:\n"); -safef(cartVar, sizeof(cartVar), "%s.%s", track, BAR_CHART_AUTOSCALE); -isAutoScale = cartCgiUsualBoolean(cart, cartVar, BAR_CHART_AUTOSCALE_DEFAULT); -cgiMakeCheckBoxWithId(cartVar, isAutoScale, cartVar); -jsOnEventByIdF("change", cartVar, "barChartTransformChanged(event);"); -#endif - -boolean isViewLimits = !isAutoScale && !isLogTransform; -safef(buf, sizeof buf, "%sViewLimitsMaxLabel %s", track, !isViewLimits ? "disabled" : ""); -puts("  "); +safef(buf, sizeof buf, "%sViewLimitsMaxLabel %s", track, isLogTransform ? "disabled" : ""); 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, 6, !isViewLimits ? "disabled" : ""); +cgiMakeIntVarWithExtra(cartVar, viewMax, 4, isLogTransform ? "disabled" : ""); char *unit = trackDbSettingClosestToHomeOrDefault(tdb, BAR_CHART_UNIT, ""); printf(" %s (range 0-%d)\n", buf, unit, round(barChartUiMaxMedianScore(tdb))); } -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 */ -{ -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 item height */ -{ -char cartVar[1024]; -safef(cartVar, sizeof(cartVar), "%s.%s", tdb->track, BAR_CHART_LIMIT_HEIGHT); -boolean limitChartHeight = cartCgiUsualBoolean(cart, cartVar, BAR_CHART_LIMIT_HEIGHT_DEFAULT); -cgiMakeCheckBoxWithId(cartVar, limitChartHeight, cartVar); -jsOnEventByIdF("change", cartVar, "barChartHeightLimitChanged(event);"); - -int min, max, deflt, current; -barChartUiFetchMinMaxPixels(cart, tdb, &min, &max, &deflt, ¤t); -puts("Chart height maximum:\n"); -safef(cartVar, sizeof(cartVar), "%s.%s", tdb->track, HEIGHTPER); -char buf[512]; -safef(buf, sizeof buf, "%sChartLimitsMaxLabel %s", tdb->track, !limitChartHeight ? "disabled" : ""); -cgiMakeIntVarWithExtra(cartVar, current, 3, !limitChartHeight ? "disabled":""); -printf(" pixels (range: %d to %d, default: %d)", - buf, 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; if (labels == NULL) { @@ -277,53 +240,59 @@ 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\n
", + isPopup ? 75 : 100, boxed ?" width='100%'":""); -/* Data transform (log, autoscale or viewlimits) */ char cartVar[1024]; -puts("

"); -barChartUiViewTransform(cart, tdb); -puts("

"); -/* Maximum track height */ -puts("

"); -barChartUiMaxHeight(cart, tdb); -puts("

"); +/* Data transform. When selected, the next control (view limits max) is disabled */ + +puts("
"); +barChartUiLogTransform(cart, track, tdb); + +/* Viewing limits max. This control is disabled if log transform is selected */ +// construct class so JS can toggle +puts("  "); +barChartUiViewLimits(cart, track, tdb); +puts("
"); /* Category filter */ printf("
"); 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("
%s:\n", categoryLabel); safef(cartVar, sizeof(cartVar), "%s.%s", track, BAR_CHART_CATEGORY_SELECT); if (isPopup) { printf("", hTrackUiForTrack(track), track); } else { jsMakeCheckboxGroupSetClearButton(cartVar, TRUE); puts(" "); jsMakeCheckboxGroupSetClearButton(cartVar, FALSE); } printf("
"); 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
\n"); cfgEndBox(boxed); }