7dc6cf43e46774f66fdae62e8df2d674c7dfcf43 tdreszer Mon Dec 20 15:21:29 2010 -0800 Subtrack list needed to exclude the view all/visible radio buttons when it is sortable. diff --git src/hg/lib/hui.c src/hg/lib/hui.c index 948e1f1..8d4a44e 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -3855,99 +3855,124 @@ struct slRef *subtrackRef, *subtrackRefList = trackDbListGetRefsToDescendantLeaves(parentTdb->subtracks); // Look for dividers, heirarchy, dimensions, sort and dragAndDrop! char **lastDivide = NULL; dividers_t *dividers = dividersSettingGet(parentTdb); if (dividers) lastDivide = needMem(sizeof(char*)*dividers->count); hierarchy_t *hierarchy = hierarchySettingGet(parentTdb); membersForAll_t* membersForAll = membersForAllSubGroupsGet(parentTdb,NULL); int dimCount=0,di; for(di=0;di<membersForAll->dimMax;di++) { if (membersForAll->members[di]) dimCount++; } sortOrder_t* sortOrder = sortOrderGet(cart,parentTdb); boolean preSorted = FALSE; boolean useDragAndDrop = sameOk("subTracks",trackDbSetting(parentTdb, "dragAndDrop")); +boolean displayAll = sameString(cartUsualString(cart, "displaySubtracks", "all"), "all"); // Determine whether there is a restricted until date column boolean restrictions = FALSE; for (subtrackRef = subtrackRefList; subtrackRef != NULL; subtrackRef = subtrackRef->next) { subtrack = subtrackRef->val; (void)metadataForTable(db,subtrack,NULL); if (NULL != metadataFindValue(subtrack,"dateUnrestricted")) { restrictions = TRUE; break; } } // Table wraps around entire list so that "Top" link can float to the correct place. printf("<table><tr><td class='windowSize'>"); printf("<A NAME='DISPLAY_SUBTRACKS'></A>"); +if (sortOrder != NULL) + { + // 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("<B>List subtracks: "); + char javascript[JBUFSIZE]; + safef(javascript, sizeof(javascript), "onclick=\"showOrHideSelectedSubtracks(true);\""); + cgiMakeOnClickRadioButton("displaySubtracks", "selected", !displayAll,javascript); + puts("only selected/visible "); + safef(javascript, sizeof(javascript), "onclick=\"showOrHideSelectedSubtracks(false);\""); + cgiMakeOnClickRadioButton("displaySubtracks", "all", displayAll,javascript); + printf("all</B>"); + if (slCount(subtrackRefList) > 5) + printf(" (<FONT class='subCBcount'></font>)"); + makeTopLink(parentTdb); + printf("</td></tr></table>"); + } +else makeTopLink(parentTdb); // Now we can start in on the table of subtracks It may be sortable and/or dragAndDroppable printf("\n<TABLE CELLSPACING='2' CELLPADDING='0' border='0'"); dyStringClear(dyHtml); if (sortOrder != NULL) dyStringPrintf(dyHtml, "sortable"); if (useDragAndDrop) { if (dyStringLen(dyHtml) > 0) dyStringAppendC(dyHtml,' '); dyStringPrintf(dyHtml, "tableWithDragAndDrop"); } if (dyStringLen(dyHtml) > 0) { - printf(" class='subtracks %s'",dyStringContents(dyHtml)); + printf(" class='subtracks bglevel1 %s'",dyStringContents(dyHtml)); colorIx = COLOR_BG_ALTDEFAULT_IX; } if (sortOrder != NULL) puts("><THEAD class=sortable>"); else puts("><THEAD>"); -// First table row contains the display "selected/visible" or "all" radio buttons -boolean displayAll = sameString(cartUsualString(cart, "displaySubtracks", "all"), "all"); boolean doColorPatch = trackDbSettingOn(parentTdb, "showSubtrackColorOnUi"); int colspan = 3; if (sortOrder != NULL) colspan = sortOrder->count+2; if (doColorPatch) colspan += 1; int columnCount = 0; +if (sortOrder != NULL) + printf("<TR id=\"subtracksHeader\" class='sortable%s'>\n",useDragAndDrop?" nodrop nodrag":""); +else + { printf("<TR%s>",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("<TD colspan='%d'><B>List subtracks: ", colspan); char javascript[JBUFSIZE]; safef(javascript, sizeof(javascript), "onclick=\"showOrHideSelectedSubtracks(true);\""); cgiMakeOnClickRadioButton("displaySubtracks", "selected", !displayAll,javascript); puts("only selected/visible "); safef(javascript, sizeof(javascript), "onclick=\"showOrHideSelectedSubtracks(false);\""); cgiMakeOnClickRadioButton("displaySubtracks", "all", displayAll,javascript); printf("all</B>"); if (slCount(subtrackRefList) > 5) printf(" (<FONT class='subCBcount'></font>)"); puts("</TD>"); -columnCount++; + columnCount = colspan; + } // Add column headers which are sort button links if (sortOrder != NULL) { - puts("<TD colspan=5> </TD></TR>"); - printf("<TR id=\"subtracksHeader\" class='nodrop nodrag sortable'>\n"); printf("<TH> <INPUT TYPE=HIDDEN NAME='%s' class='sortOrder' VALUE='%s'></TH>\n", sortOrder->htmlId, sortOrder->sortOrder); // keeing track of sortOrder + columnCount++; // Columns in tdb order (unchanging), sort in cart order (changed by user action) int sIx=0; for(sIx=0;sIx<sortOrder->count;sIx++) { #ifdef SORT_ON_TRACK_NAME if (sameString(SORT_ON_TRACK_NAME,sortOrder->column[sIx])) break; // All wrangler requested sort orders have been done. #endif///def SORT_ON_TRACK_NAME #ifdef SORT_ON_RESTRICTED if (sameString(SORT_ON_RESTRICTED,sortOrder->column[sIx])) break; // All wrangler requested sort orders have been done. #endif///def SORT_ON_RESTRICTED printf("<TH id='%s' class='sortable%s sort%d' abbr='use' onclick='tableSortAtButtonPress(this);'>%s", sortOrder->column[sIx],(sortOrder->forward[sIx]?"":" sortRev"),sortOrder->order[sIx],sortOrder->title[sIx]); printf("<sup>%s",(sortOrder->forward[sIx]?"↓":"↑")); @@ -4184,30 +4209,31 @@ puts("</TBODY><TFOOT>"); printf("<TR valign='top'><TD colspan=%d> ",columnCount-1); // Count of subtracks is filled in by javascript. if (slCount(subtrackRefList) > 5) printf("<span class='subCBcount'></span>\n"); // Restruction policy needs a link #ifdef SORT_ON_RESTRICTED if (restrictions && sortOrder != NULL) printf("</TD><TH><A HREF='%s' TARGET=BLANK style='font-size:.9em;'>Restriction Policy</A>", ENCODE_DATA_RELEASE_POLICY); #endif///def SORT_ON_RESTRICTED printf("</TD></TR>\n"); puts("</TFOOT></TABLE>"); +if (sortOrder == NULL) printf("</td></tr></table>"); puts("<P>"); // Tying subtracks with matrix and subtrack cfgs with views requires javascript help puts("<script type='text/javascript'>matInitializeMatrix();</script>"); #ifndef SUBTRACK_CFG_POPUP if (dependentCfgsNeedBinding) cfgLinkToDependentCfgs(cart,parentTdb,parentTdb->track); #endif//ndef SUBTRACK_CFG_POPUP // Finally we are free of all this membersForAllSubGroupsFree(parentTdb,&membersForAll); dyStringFree(&dyHtml) sortOrderFree(&sortOrder);