f059c823c500cb98784e9ab20ced74a2d0df3de7 tdreszer Wed Jan 11 14:03:48 2012 -0800 Adding an ectra column to subtrack list so that drag and drop works with subVis. 4665 diff --git src/hg/lib/hui.c src/hg/lib/hui.c index 70da773..58d9434 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -3837,41 +3837,30 @@ 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;didimMax;di++) { if (membersForAll->members[di]) dimCount++; } sortOrder_t* sortOrder = sortOrderGet(cart,parentTdb); boolean preSorted = FALSE; boolean useDragAndDrop = sameOk("subTracks",trackDbSetting(parentTdb, "dragAndDrop")); -#ifdef SUBTRACK_CFG -if (useDragAndDrop) // IE9 & Chrom fail on subVisDD when dragAndDrop ! - { - char *browserVersion; - enum browserType browserType = cgiClientBrowser(&browserVersion, NULL, NULL); - if ( browserType == btChrome - || browserType == btSafari - || (browserType == btIE && *browserVersion > '8')) - useDragAndDrop = FALSE; - } -#endif///def SUBTRACK_CFG char buffer[SMALLBUF]; char *displaySubs = NULL; int subCount = slCount(subtrackRefList); #define LARGE_COMPOSITE_CUTOFF 30 if (subCount > LARGE_COMPOSITE_CUTOFF) { safef(buffer,SMALLBUF,"%s.displaySubtracks",parentTdb->track); displaySubs = cartUsualString(cart, buffer,"some"); // track specific defaults to only selected } else { displaySubs = cartUsualString(cart, "displaySubtracks", "all"); // browser wide defaults to all } boolean displayAll = sameString(displaySubs, "all"); @@ -3931,30 +3920,34 @@ printf(" class='subtracks"); if (dyStringLen(dyHtml) > 0) { printf(" bglevel1 %s'",dyStringContents(dyHtml)); colorIx = COLOR_BG_ALTDEFAULT_IX; } if (sortOrder != NULL) puts("'>"); else puts("'>"); boolean doColorPatch = trackDbSettingOn(parentTdb, "showSubtrackColorOnUi"); int colspan = 3; if (sortOrder != NULL) colspan = sortOrder->count+2; +#ifdef SUBTRACK_CFG +else if (!tdbIsMultiTrack(parentTdb)) // An extra column for subVis/wrench so dragAndDrop works + colspan++; +#endif///def SUBTRACK_CFG if (doColorPatch) colspan += 1; 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);'"); if (subCount > LARGE_COMPOSITE_CUTOFF) @@ -3965,30 +3958,37 @@ puts("only selected/visible   "); safef(javascript, sizeof(javascript), "class='allOrOnly' onclick='showOrHideSelectedSubtracks(false);'"); cgiMakeOnClickRadioButton(buffer, "all", displayAll,javascript); printf("all"); if (slCount(subtrackRefList) > 5) printf("    ()"); puts(""); columnCount = colspan; } // Add column headers which are sort button links if (sortOrder != NULL) { printf(" \n", sortOrder->htmlId, sortOrder->sortOrder); // keeing track of sortOrder columnCount++; +#ifdef SUBTRACK_CFG + if (!tdbIsMultiTrack(parentTdb)) // An extra column for subVis/wrench so dragAndDrop works + { + printf("\n"); + columnCount++; + } +#endif///def SUBTRACK_CFG // Columns in tdb order (unchanging), sort in cart order (changed by user action) int sIx=0; for(sIx=0;sIxcount;sIx++) { if (sameString(SORT_ON_TRACK_NAME,sortOrder->column[sIx])) break; // All wrangler requested sort orders have been done. if (sameString(SORT_ON_RESTRICTED,sortOrder->column[sIx])) break; // All wrangler requested sort orders have been done. printf("%s", sortOrder->column[sIx],(sortOrder->forward[sIx]?"":" sortRev"),sortOrder->order[sIx],sortOrder->title[sIx]); printf("%s",(sortOrder->forward[sIx]?"↓":"↑")); if (sortOrder->count > 1) printf ("%d",sortOrder->order[sIx]); printf(""); puts (""); @@ -4128,47 +4128,49 @@ #ifdef SUBTRACK_CFG if (!enabledCB) { dyStringAppend(dyHtml, " disabled"); cgiMakeCheckBoxFourWay(buffer,checkedCB,enabledCB,id,dyStringContents(dyHtml),"onclick='matSubCbClick(this);' style='cursor:pointer' title='view is hidden'"); } else #endif///def SUBTRACK_CFG cgiMakeCheckBoxFourWay(buffer,checkedCB,enabledCB,id,dyStringContents(dyHtml),"onclick='matSubCbClick(this);' style='cursor:pointer'"); if (useDragAndDrop) printf(" "); #ifdef SUBTRACK_CFG if (!tdbIsMultiTrack(parentTdb)) // MultiTracks never have independent vis { + printf(""); // An extra column for subVis/wrench so dragAndDrop works enum trackVisibility vis = tdbVisLimitedByAncestors(cart,subtrack,FALSE,FALSE); char *view = NULL; if (membersForAll->members[dimV] && -1 != (ix = stringArrayIx(membersForAll->members[dimV]->groupTag, membership->subgroups, membership->count))) view = membership->membership[ix]; char classList[256]; if (view != NULL) safef(classList,sizeof(classList),"clickable fauxInput%s subVisDD %s",(visibleCB ? "":" disabled"),view); // view should be last! else safef(classList,sizeof(classList),"clickable fauxInput%s subVisDD",(visibleCB ? "":" disabled")); #define SUBTRACK_CFG_VIS "
%s
\n" printf(SUBTRACK_CFG_VIS,subtrack->track,classList,subtrack->track,hStringFromTv(vis)); if (cType != cfgNone) // make a wrench { #define SUBTRACK_CFG_WRENCH "\n" printf(SUBTRACK_CFG_WRENCH,(visibleCB ? "":" disabled"),subtrack->track); } + printf(""); } #endif///def SUBTRACK_CFG // A hidden field to keep track of subtrack order if it could change if (sortOrder != NULL || useDragAndDrop) { safef(buffer, sizeof(buffer), "%s.priority", subtrack->track); float priority = (float)cartUsualDouble(cart, buffer, subtrack->priority); printf("", buffer, priority); // keeing track of priority } // A color patch which helps distinguish subtracks in some types of composites if (doColorPatch) { printf("    ", @@ -4263,40 +4265,44 @@ printf("\n %s ", dateDisplay); else printf("\n %s ", dateDisplay); } } // End of row and free ourselves of this subtrack puts("\n"); checkBoxIdFree(&id); } // End of the table puts(""); if (slCount(subtrackRefList) > 5 || (restrictions && sortOrder != NULL)) { - printf("    ", - COLOR_BG_DEFAULT_DARKER,columnCount-1); + printf("", COLOR_BG_DEFAULT_DARKER); + if (restrictions && sortOrder != NULL) + printf("    ",columnCount-1); + else + printf("    ",columnCount); // Count of subtracks is filled in by javascript. if (slCount(subtrackRefList) > 5) printf("\n"); - // Restruction policy needs a link + // Restriction policy needs a link if (restrictions && sortOrder != NULL) - printf("Restriction Policy", ENCODE_DATA_RELEASE_POLICY); + printf("Restriction Policy", + ENCODE_DATA_RELEASE_POLICY); printf("\n"); } puts(""); if (sortOrder == NULL) printf(""); #ifndef SUBTRACK_CFG if (dependentCfgsNeedBinding) cfgLinkToDependentCfgs(cart,parentTdb,parentTdb->track); #endif//ndef SUBTRACK_CFG // Finally we are free of all this membersForAllSubGroupsFree(parentTdb,&membersForAll); dyStringFree(&dyHtml)