bbadf34db9d67578b26a7d93a7096c046be885a4 kate Tue Jan 13 14:06:12 2015 -0800 Set default subtracks on (10 spread across color spectrum, emphasizing ENCODE tier1 and well-known. Additional support for subtrack color on UI. refs #14353 diff --git src/hg/lib/hui.c src/hg/lib/hui.c index 33d651d..56c2453 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -3088,34 +3088,40 @@ // Can't use because of dimension dependence if (members==NULL) return FALSE; *value = cloneString(members->groupTitle); //subgroupMembersFree(&members); return TRUE; } void subgroupFree(char **value) // frees subgroup memory { if (value && *value) freez(value); } +boolean subgroupRequired(char *value) +/* Returns whether subgroup much be specified for each track. + * Generally true. Exceptions are specially defined subgroups */ +{ +return differentString(SUBTRACK_COLOR_SUBGROUP, value); +} + #define SORT_ON_TRACK_NAME "trackName" #define SORT_ON_RESTRICTED "dateUnrestricted" -#define SUBTRACK_COLOR_PATCH "subtrackColor" -#define SUBTRACK_COLOR_HEADER "Color" + sortOrder_t *sortOrderGet(struct cart *cart,struct trackDb *parentTdb) // Parses any list sort order instructions for parent of subtracks (from cart or trackDb) // Some trickiness here. sortOrder->sortOrder is from cart (changed by user action), // as is sortOrder->order, But columns are in original tdb order (unchanging)! // However, if cart is null, all is from trackDb.ra { int ix; char *setting = trackDbSetting(parentTdb, "sortOrder"); if (setting == NULL) // Must be in trackDb or not a sortable table return NULL; sortOrder_t *sortOrder = needMem(sizeof(sortOrder_t)); sortOrder->htmlId = needMem(strlen(parentTdb->track)+15); safef(sortOrder->htmlId, (strlen(parentTdb->track)+15), "%s.sortOrder", parentTdb->track); @@ -4354,31 +4360,31 @@ if (ix >= 0) { char *titleRoot=NULL; if (cvTermIsEmpty(sortOrder->column[sIx],membership->titles[ix])) titleRoot = cloneString("  "); else titleRoot = labelRoot(membership->titles[ix],NULL); // Each sortable column requires hidden goop (in the "abbr" field currently) // which is the actual sort on value printf(" ", subtrack->track,sortOrder->column[sIx],membership->membership[ix]); printf("%s",titleRoot); puts(""); freeMem(titleRoot); } - else if (sameString(sortOrder->column[sIx], SUBTRACK_COLOR_PATCH)) + else if (sameString(sortOrder->column[sIx], SUBTRACK_COLOR_SUBGROUP)) { struct rgbColor rgbColor; rgbColor.r = subtrack->colorR; rgbColor.g = subtrack->colorG; rgbColor.b = subtrack->colorB; struct hslColor hslColor = mgRgbToHsl(rgbColor); int hue = hslColor.h * 10; printf("    ", subtrack->track, sortOrder->column[sIx], hue, rgbColor.r, rgbColor.g, rgbColor.b); } } } else // Non-sortable tables do not have sort by columns but will display a short label { // (which may be a configurable link) printf(" "); @@ -4554,31 +4560,30 @@ struct subtrackConfigSettings *subtrackConfig = NULL; AllocVar(subtrackConfig); // Determine whether there is a restricted until date column subtrackConfig->restrictions = FALSE; for (subtrackRef = subtrackRefList; subtrackRef != NULL; subtrackRef = subtrackRef->next) { subtrack = subtrackRef->val; (void)metadataForTable(db,subtrack,NULL); if (NULL != metadataFindValue(subtrack,"dateUnrestricted")) { subtrackConfig->restrictions = TRUE; break; } } -//subtrackConfig->colorPatch = trackDbSettingOn(parentTdb, "showSubtrackColorOnUi"); subtrackConfig->useDragAndDrop = sameOk("subTracks",trackDbSetting(parentTdb, "dragAndDrop")); subtrackConfig->sortOrder = sortOrder; subtrackConfig->displayAll = displayAll; printSubtrackTable(parentTdb, subtrackRefList, subtrackConfig, cart); if (sortOrder == NULL) printf(""); membersForAllSubGroupsFree(parentTdb,&membersForAll); sortOrderFree(&sortOrder); } static void compositeUiSubtracksMatchingPrimary(char *db, struct cart *cart, struct trackDb *parentTdb,char *primarySubtrack)