c0054bf266460cdca739b6c7d8cf258ccb279703 kate Thu Jan 15 14:57:16 2015 -0800 Restore subtrack color feature when no sortable columns. refs #14353 diff --git src/hg/lib/hui.c src/hg/lib/hui.c index 34d4e8c..fb55966 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -4020,54 +4020,56 @@ date = strSwapChar(date, ' ', 0); // Truncate time (not expected, but just in case) if (excludePast && !isEmpty(date) && dateIsOld(date, MDB_ENCODE_DATE_FORMAT)) freez(&date); } return date; } /* Subtrack configuration settings */ struct subtrackConfigSettings { sortOrder_t *sortOrder; /* from trackDb setting */ boolean useDragAndDrop; /* from trackDb setting */ boolean restrictions; /* from metadata ? */ - //boolean colorPatch; /* from trackDb setting */ + boolean colorPatch; /* from trackDb setting */ boolean displayAll; /* from radiobutton */ int bgColorIx; /* from logic over other settings */ int columnCount; /* determined from trackDb settings */ }; #define LARGE_COMPOSITE_CUTOFF 30 static void printSubtrackTableHeader(struct trackDb *parentTdb, struct slRef *subtrackRefList, struct subtrackConfigSettings *settings) /* Print header of subtrack table, including classes describing display appearance and behavior. Return number of columns */ { char buffer[SMALLBUF]; boolean useDragAndDrop = settings->useDragAndDrop; sortOrder_t *sortOrder = settings->sortOrder; if (sortOrder != NULL) puts(""); else puts(""); int colspan = 3; if (sortOrder != NULL) colspan = sortOrder->count+2; else if (!tdbIsMultiTrack(parentTdb)) // An extra column for subVis/wrench so dragAndDrop works colspan++; +if (settings->colorPatch) + colspan++; int columnCount = 0; if (sortOrder != NULL) printf("\n", useDragAndDrop ? " nodrop nodrag" : ""); else { printf("", useDragAndDrop ? " id='noDrag' class='nodrop nodrag'" : ""); // First table row contains the display "selected/visible" or "all" radio buttons // NOTE: list subtrack radio buttons are inside tracklist table header if // there are no sort columns. The reason is to ensure spacing of lines // column headers when the only column header is "Restricted Until" printf("List subtracks: ", colspan); char javascript[JBUFSIZE]; safef(javascript, sizeof(javascript), "class='allOrOnly' onclick='showOrHideSelectedSubtracks(true);'"); @@ -4397,30 +4399,36 @@ puts(""); freeMem(titleRoot); } else if (sameString(col, SUBTRACK_COLOR_SUBGROUP)) { char *hue = subtrackColorToCompare(subtrack); printf("" "    ", subtrack->track, col, hue, subtrack->colorR, subtrack->colorG, subtrack->colorB); } } } else // Non-sortable tables do not have sort by columns but will display a short label { // (which may be a configurable link) + if (settings->colorPatch) + { + printf("    ", + subtrack->colorR, subtrack->colorG, subtrack->colorB); + + } printf(" "); hierarchy_t *hierarchy = hierarchySettingGet(parentTdb); indentIfNeeded(hierarchy,membership); hierarchyFree(&hierarchy); printf("%s",subtrack->shortLabel); puts(""); } // The long label column (note that it may have a metadata dropdown) printf(" %s", subtrack->longLabel); if (trackDbSetting(parentTdb, "wgEncode") && trackDbSetting(subtrack, "accession")) printf(" [GEO:%s]", trackDbSetting(subtrack, "accession")); compositeMetadataToggle(db,subtrack,NULL,TRUE,FALSE); printf(" "); @@ -4567,50 +4575,51 @@ cgiMakeOnClickRadioButton(buffer, "all", displayAll,javascript); printf("all"); if (slCount(subtrackRefList) > 5) printf("    ()"); if (membersHaveMatrix(membersForAll)) makeTopLink(parentTdb); printf(""); } else { if (membersHaveMatrix(membersForAll)) makeTopLink(parentTdb); } // Get info for subtrack list -struct subtrackConfigSettings *subtrackConfig = NULL; -AllocVar(subtrackConfig); +struct subtrackConfigSettings *settings = NULL; +AllocVar(settings); // Determine whether there is a restricted until date column -subtrackConfig->restrictions = FALSE; +settings->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; + settings->restrictions = TRUE; break; } } -subtrackConfig->useDragAndDrop = sameOk("subTracks",trackDbSetting(parentTdb, "dragAndDrop")); -subtrackConfig->sortOrder = sortOrder; -subtrackConfig->displayAll = displayAll; +settings->useDragAndDrop = sameOk("subTracks",trackDbSetting(parentTdb, "dragAndDrop")); +settings->sortOrder = sortOrder; +settings->displayAll = displayAll; +settings->colorPatch = (trackDbSetting(parentTdb, SUBTRACK_COLOR_PATCH) != NULL); -printSubtrackTable(parentTdb, subtrackRefList, subtrackConfig, cart); +printSubtrackTable(parentTdb, subtrackRefList, settings, cart); if (sortOrder == NULL) printf(""); membersForAllSubGroupsFree(parentTdb,&membersForAll); sortOrderFree(&sortOrder); } static void compositeUiSubtracksMatchingPrimary(char *db, struct cart *cart, struct trackDb *parentTdb,char *primarySubtrack) // Display list of subtracks associated with a primary subtrack for the hgTables merge function { assert(primarySubtrack != NULL); char *primaryType = getPrimaryType(primarySubtrack, parentTdb); char htmlIdentifier[SMALLBUF];