b9f1b8057e8f1ad16db30df1acf67cd6ee2cbeb2 tdreszer Thu Dec 22 10:30:38 2011 -0800 Removed some old ifdefs. No functional change here. diff --git src/hg/lib/hui.c src/hg/lib/hui.c index 8bab64b..70da773 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -189,45 +189,40 @@ // Get the hash of mdb and cv term types struct hash *cvTermTypes = (struct hash *)cvTermTypeHash(); struct mdbObj *mdbObj = mdbObjClone(safeObj); // Important if we are going to remove vars! mdbObjRemoveVars(mdbObj,MDB_OBJ_TYPE_COMPOSITE " " MDB_VAR_PROJECT " " MDB_OBJ_TYPE " " MDB_VAR_MD5SUM); // Don't bother showing these (NOTE: composite,objType should be added to cv.ra typeOfTerms as hidden) mdbObjRemoveHiddenVars(mdbObj); mdbObjReorderByCv(mdbObj,FALSE);// Use cv defined order for visible vars struct mdbVar *mdbVar; for (mdbVar=mdbObj->vars;mdbVar!=NULL;mdbVar=mdbVar->next) { if ((sameString(mdbVar->var,MDB_VAR_FILENAME) || sameString(mdbVar->var,MDB_VAR_FILEINDEX) ) && trackDbSettingClosestToHome(tdb,MDB_VAL_ENCODE_PROJECT) != NULL) { dyStringPrintf(dyTable,"<tr valign='top'><td align='right' nowrap><i>%s:</i></td><td nowrap>",mdbVar->var); -//#define NO_FILENAME_LISTS -#ifdef NO_FILENAME_LISTS - dyStringAppend(dyTable,htmlStringForDownloadsLink(db, tdb, mdbVar->val, TRUE, trackHash)); -#else///ifndef NO_FILENAME_LISTS struct slName *fileSet = slNameListFromComma(mdbVar->val); while (fileSet != NULL) { struct slName *file = slPopHead(&fileSet); dyStringAppend(dyTable,htmlStringForDownloadsLink(db, tdb, file->name, TRUE, trackHash)); if (fileSet != NULL) dyStringAppend(dyTable,"<BR>"); slNameFree(&file); } -#endif///ndef NO_FILENAME_LISTS dyStringAppend(dyTable,"</td></tr>"); } else { if (cvTermTypes && differentString(mdbVar->var,MDB_VAR_TABLENAME)) // Don't bother with tableName { struct hash *cvTerm = hashFindVal(cvTermTypes,mdbVar->var); if (cvTerm != NULL) // even if cvTerm isn't used, it proves that it exists and a link is desirable { if(!cvTermIsHidden(mdbVar->var)) { char *label = (char *)cvLabel(NULL,mdbVar->var); char *linkOfType = controlledVocabLink(NULL,CV_TYPE,mdbVar->var,label,label,NULL); if (cvTermIsCvDefined(mdbVar->var)) { @@ -2291,57 +2286,51 @@ static char *tagEncode(char *name) // Turns out css classes cannot begin with a number. So prepend 'A' // If this were more widely used, could move to cheapcgi.c. { if (!isdigit(*name)) return name; char *newName = needMem(strlen(name)+1); *newName = 'A'; strcpy(newName+1,name); return newName; } #define SUBGROUP_MAX 9 -#define FILTER_COMPOSITE_ONLYONE -#ifdef FILTER_COMPOSITE_ONLYONE -// FIXME: do we even support anything but multi??? If not, this is a boolean enum filterCompositeType -/* How to look at a track. */ +// Filter composites are drop-down checkbix-lists for selecting subtracks (eg hg19::HAIB TFBS) { fctNone=0, // do not offer filter for this dimension fctOne=1, // filter composite by one or all fctOneOnly=2, // filter composite by only one fctMulti=3, // filter composite by multiselect: all, one or many }; -#endif///def FILTER_COMPOSITE_ONLYONE typedef struct _members { int count; char * groupTag; char * groupTitle; char **tags; char **titles; boolean *selected; char * setting; int *subtrackCount; // count of subtracks int *currentlyVisible; // count of visible subtracks struct slRef **subtrackList; // set of subtracks belonging to each subgroup member -#ifdef FILTER_COMPOSITE_ONLYONE enum filterCompositeType fcType; // fctNone,fctOne,fctMulti -#endif///def FILTER_COMPOSITE_ONLYONE } members_t; int subgroupCount(struct trackDb *parentTdb) /* How many subGroup setting does this parent have? */ { int ix; int count = 0; for(ix=1;ix<=SUBGROUP_MAX;ix++) { char subGrp[16]; safef(subGrp, ArraySize(subGrp), "subGroup%d",ix); if(trackDbSetting(parentTdb, subGrp) != NULL) count++; } return count; @@ -2706,58 +2695,56 @@ } } } membersForAll->abcCount = membersForAll->dimMax - dimA; membersForAll = membersForAllSubGroupsWeedOutEmpties(parentTdb, membersForAll, cart); // NOTE: Dimensions must be defined for filterComposite. Filter dimensioms are all and only ABCs. Use dimensionAchecked to define selected char *filtering = trackDbSettingOrDefault(parentTdb,"filterComposite",NULL); if(filtering && !sameWord(filtering,"off")) { if(membersForAll->dimensions == NULL) errAbort("If 'filterComposite' defined, must define 'dimensions' also."); membersForAll->filters = TRUE; -#ifdef FILTER_COMPOSITE_ONLYONE // Default all to multi for(ix=dimA;ix<membersForAll->dimMax;ix++) { if(membersForAll->members[ix] != NULL) membersForAll->members[ix]->fcType = fctMulti; } if(!sameWord(filtering,"on")) { // Example tdb setting: "filterComposite on" OR "filterComposite dimA=one dimB=multi dimC=onlyOne" // FIXME: do we even support anything but multi??? char *filterGroups[27]; int count = chopLine(filtering,filterGroups); for(ix=0;ix<count;ix++) { char *dim = cloneNextWordByDelimiter(&filterGroups[ix],'='); char letter = lastChar(dim); int abcIx = dimA; for (;abcIx < membersForAll->dimMax && membersForAll->letters[abcIx] != letter;abcIx++) ; // Advance to correct letter if (abcIx >= membersForAll->dimMax) errAbort("Invalid 'filterComposite' trackDb setting. Dimension '%s' not found.",dim); if (sameWord(filterGroups[ix],"one")) membersForAll->members[abcIx]->fcType = fctOne; else if (sameWord(filterGroups[ix],"onlyOne") || sameWord(filterGroups[ix],"oneOnly")) membersForAll->members[abcIx]->fcType = fctOneOnly; } } -#endif///def FILTER_COMPOSITE_ONLYONE } if(cart != NULL) // Only save this if it is fully populated! tdbExtrasMembersForAllSet(parentTdb,membersForAll); return membersForAll; } static int membersForAllFindSubGroupIx(membersForAll_t* membersForAll, char *tag) { // Returns the index of the subgroups member struct within membersForAll (or -1) int ix = 0; for(ix=0;ix<membersForAll->dimMax;ix++) { if (membersForAll->members[ix] != NULL && sameString(membersForAll->members[ix]->groupTag,tag)) return ix; @@ -5360,51 +5347,39 @@ else if(minLimit != NO_VALUE) safef(limits, sizeof(limits), "violates lower limit (%d)", minLimit); else //if(maxLimit != NO_VALUE) safef(limits, sizeof(limits), "violates uppper limit (%d)", maxLimit); warn("invalid filter by %s: %s %s for track %s", field, value, limits, tdb->track); } } // else no default limits! if(invalid) { safef(filterLimitName, sizeof(filterLimitName), "%s%s", filter, (max!=NO_VALUE?_MIN:"")); cartRemoveVariableClosestToHome(cart,tdb,FALSE,filterLimitName); safef(filterLimitName, sizeof(filterLimitName), "%s%s", filter, _MAX); cartRemoveVariableClosestToHome(cart,tdb,FALSE,filterLimitName); } -//#define FILTER_ASSUMES_RANGE_AT_LIMITS_IS_VALID_FILTER -#ifdef FILTER_ASSUMES_RANGE_AT_LIMITS_IS_VALID_FILTER - else if((min != 0 && (int)min != NO_VALUE) || (int)max != NO_VALUE) // Assumes min==0 is no filter! - { - if((min != 0 && min != NO_VALUE) && max != NO_VALUE) - dyStringPrintf(extraWhere, "%s(%s BETWEEN %d and %d)", (*and?" and ":""),field,min,max); // both min and max - else if(min != 0 && min != NO_VALUE) - dyStringPrintf(extraWhere, "%s(%s >= %d)", (*and?" and ":""),field,min); // min only - else //if(max != NO_VALUE) - dyStringPrintf(extraWhere, "%s(%s <= %d)", (*and?" and ":""),field,max); // max only -#else//ifndef FILTER_ASSUMES_RANGE_AT_LIMITS_IS_VALID_FILTER else if((min != NO_VALUE && (minLimit == NO_VALUE || minLimit != min)) // Assumes min==NO_VALUE or min==minLimit is no filter || (max != NO_VALUE && (maxLimit == NO_VALUE || maxLimit != max))) // Assumes max==NO_VALUE or max==maxLimit is no filter! { if(max == NO_VALUE || (maxLimit != NO_VALUE && maxLimit == max)) dyStringPrintf(extraWhere, "%s(%s >= %d)", (*and?" and ":""),field,min); // min only else if(min == NO_VALUE || (minLimit != NO_VALUE && minLimit == min)) dyStringPrintf(extraWhere, "%s(%s <= %d)", (*and?" and ":""),field,max); // max only else dyStringPrintf(extraWhere, "%s(%s BETWEEN %d and %d)", (*and?" and ":""),field,min,max); // both min and max -#endif//ndef FILTER_ASSUMES_RANGE_AT_LIMITS_IS_VALID_FILTER *and=TRUE; } } //if(dyStringLen(extraWhere)) warn("SELECT FROM %s WHERE %s",tdb->table,dyStringContents(extraWhere)); return extraWhere; } struct dyString *dyAddFilterAsDouble(struct cart *cart, struct trackDb *tdb, struct dyString *extraWhere,char *filter,char *defaultLimits, char*field, boolean *and) /* creates the where clause condition to support numeric double filters. Filters are expected to follow {fiterName}: trackDb min or min:max - default value(s); {filterName}Min or {filterName}: min (user supplied) cart variable; {filterName}Max: max (user supplied) cart variable; {filterName}Limits: trackDb allowed range "0.0:10.0" Optional @@ -5440,50 +5415,39 @@ else if((int)minLimit != NO_VALUE) safef(limits, sizeof(limits), "violates lower limit (%g)", minLimit); else //if((int)maxLimit != NO_VALUE) safef(limits, sizeof(limits), "violates uppper limit (%g)", maxLimit); warn("invalid filter by %s: %s %s for track %s", field, value, limits, tdb->track); } } if(invalid) { char filterLimitName[64]; safef(filterLimitName, sizeof(filterLimitName), "%s%s", filter, _MIN); cartRemoveVariableClosestToHome(cart,tdb,FALSE,filterLimitName); safef(filterLimitName, sizeof(filterLimitName), "%s%s", filter, _MAX); cartRemoveVariableClosestToHome(cart,tdb,FALSE,filterLimitName); } -#ifdef FILTER_ASSUMES_RANGE_AT_LIMITS_IS_VALID_FILTER - else if((min != 0 && (int)min != NO_VALUE) || (int)max != NO_VALUE) // Assumes min==0 is no filter! - { - if((min != 0 && (int)min != NO_VALUE) && (int)max != NO_VALUE) - dyStringPrintf(extraWhere, "%s(%s BETWEEN %g and %g)", (*and?" and ":""),field,min,max); // both min and max - else if(min != 0 && (int)min != NO_VALUE) - dyStringPrintf(extraWhere, "%s(%s >= %g)", (*and?" and ":""),field,min); // min only - else //if((int)max != NO_VALUE) - dyStringPrintf(extraWhere, "%s(%s <= %g)", (*and?" and ":""),field,max); // max only -#else//ifndef FILTER_ASSUMES_RANGE_AT_LIMITS_IS_VALID_FILTER else if(((int)min != NO_VALUE && ((int)minLimit == NO_VALUE || minLimit != min)) // Assumes min==NO_VALUE or min==minLimit is no filter || ((int)max != NO_VALUE && ((int)maxLimit == NO_VALUE || maxLimit != max))) // Assumes max==NO_VALUE or max==maxLimit is no filter! { if((int)max == NO_VALUE || ((int)maxLimit != NO_VALUE && maxLimit == max)) dyStringPrintf(extraWhere, "%s(%s >= %g)", (*and?" and ":""),field,min); // min only else if((int)min == NO_VALUE || ((int)minLimit != NO_VALUE && minLimit == min)) dyStringPrintf(extraWhere, "%s(%s <= %g)", (*and?" and ":""),field,max); // max only else dyStringPrintf(extraWhere, "%s(%s BETWEEN %g and %g)", (*and?" and ":""),field,min,max); // both min and max -#endif//ndef FILTER_ASSUMES_RANGE_AT_LIMITS_IS_VALID_FILTER *and=TRUE; } } //if(dyStringLen(extraWhere)) warn("SELECT FROM %s WHERE %s",tdb->table,dyStringContents(extraWhere)); return extraWhere; } struct dyString *dyAddAllScoreFilters(struct cart *cart, struct trackDb *tdb, struct dyString *extraWhere,boolean *and) /* creates the where clause condition to gather together all random double filters Filters are expected to follow {fiterName}: trackDb min or min:max - default value(s); {filterName}Min or {filterName}: min (user supplied) cart variable; {filterName}Max: max (user supplied) cart variable; {filterName}Limits: trackDb allowed range "0.0:10.0" Optional uses: defaultLimits: function param if no tdb limits settings found) @@ -6426,133 +6390,115 @@ { #ifdef BUTTONS_BY_CSS printf(BUTTON_MAT, "true", ",'", class, "'", '+'); if (vertical) puts("<BR>"); printf(BUTTON_MAT, "false", ",'", class, "'", '-'); #else///ifndef BUTTONS_BY_CSS printf(PM_BUTTON_UC, "true", ",'", class, "'", "", "", name, "add_sm.gif"); if (vertical) puts("<BR>"); printf(PM_BUTTON_UC, "false", ",'", class, "'", "", "", name, "remove_sm.gif"); #endif///def BUTTONS_BY_CSS } #define MATRIX_SQUEEZE 10 -#ifdef MATRIX_SQUEEZE static boolean matrixSqueeze(membersForAll_t* membersForAll) // Returns non-zero if the matrix will be squeezed. Non-zero is actually squeezedLabelHeight { char *browserVersion; if (btIE == cgiClientBrowser(&browserVersion, NULL, NULL) && *browserVersion < '9') return 0; members_t *dimensionX = membersForAll->members[dimX]; members_t *dimensionY = membersForAll->members[dimY]; if(dimensionX && dimensionY) { if(dimensionX->count>MATRIX_SQUEEZE) { int ixX,cntX=0; for (ixX = 0; ixX < dimensionX->count; ixX++) { if(dimensionX->subtrackList && dimensionX->subtrackList[ixX] && dimensionX->subtrackList[ixX]->val) cntX++; } if(cntX>MATRIX_SQUEEZE) return TRUE; } } return FALSE; } -#else///ifndef MATRIX_SQUEEZE -#define matrixSqueeze(membersForAll) FALSE -#endif///ndef MATRIX_SQUEEZE static void matrixXheadingsRow1(char *db,struct trackDb *parentTdb,boolean squeeze, membersForAll_t* membersForAll,boolean top) /* prints the top row of a matrix: 'All' buttons; X titles; buttons 'All' */ { members_t *dimensionX = membersForAll->members[dimX]; members_t *dimensionY = membersForAll->members[dimY]; -#ifdef MATRIX_SQUEEZE printf("<TR ALIGN=CENTER valign=%s>\n",top?"BOTTOM":"TOP"); -#else///ifndef MATRIX_SQUEEZE -printf("<TR ALIGN=CENTER BGCOLOR='%s' valign=%s>\n",COLOR_BG_ALTDEFAULT,top?"BOTTOM":"TOP"); -#endif///ndef MATRIX_SQUEEZE if(dimensionX && dimensionY) { printf("<TH ALIGN=LEFT valign=%s>",top?"TOP":"BOTTOM"); //printf("<TH ALIGN=LEFT valign=%s>",(top == squeeze)?"BOTTOM":"TOP");//"TOP":"BOTTOM"); buttonsForAll(); puts(" All</TH>"); } // If there is an X dimension, then titles go across the top if(dimensionX) { int ixX,cntX=0; if(dimensionY) { - #ifdef MATRIX_SQUEEZE if(squeeze) printf("<TH align=RIGHT><div class='%s'><B><EM>%s</EM></B></div></TH>", (top?"up45":"dn45"), dimensionX->groupTitle); else - #endif///def MATRIX_SQUEEZE printf("<TH align=RIGHT><B><EM>%s</EM></B></TH>", dimensionX->groupTitle); } else printf("<TH ALIGN=RIGHT valign=%s> <B><EM>%s</EM></B></TH>",(top?"TOP":"BOTTOM"), dimensionX->groupTitle); for (ixX = 0; ixX < dimensionX->count; ixX++) { if(dimensionX->subtrackList && dimensionX->subtrackList[ixX] && dimensionX->subtrackList[ixX]->val) { - #ifdef MATRIX_SQUEEZE if(dimensionY && squeeze) { strSwapStrs(dimensionX->titles[ixX],strlen(dimensionX->titles[ixX]),"<BR>"," "); // Breaks must be removed! printf("<TH nowrap='' class='%s'><div class='%s'>%s</div></TH>\n",dimensionX->tags[ixX],(top?"up45":"dn45"), compositeLabelWithVocabLink(db,parentTdb,dimensionX->subtrackList[ixX]->val,dimensionX->groupTag,dimensionX->titles[ixX])); } else - #endif///def MATRIX_SQUEEZE { char *label =replaceChars(dimensionX->titles[ixX]," (","<BR>("); - #ifdef MATRIX_SQUEEZE printf("<TH WIDTH='60' class='matCell %s all'> %s </TH>",dimensionX->tags[ixX], - #else///ifndef MATRIX_SQUEEZE - printf("<TH WIDTH='60'> %s </TH>", - #endif///ndef MATRIX_SQUEEZE compositeLabelWithVocabLink(db,parentTdb,dimensionX->subtrackList[ixX]->val,dimensionX->groupTag,label)); freeMem(label); } cntX++; } } // If dimension is big enough, then add Y buttons to right as well if(cntX>MATRIX_RIGHT_BUTTONS_AFTER) { if(dimensionY) { - #ifdef MATRIX_SQUEEZE if(squeeze) printf("<TH align=LEFT><div class='%s'><B><EM>%s</EM></B></div></TH>", (top?"up45":"dn45"), dimensionX->groupTitle); else - #endif///def MATRIX_SQUEEZE printf("<TH align=LEFT><B><EM>%s</EM></B></TH>", dimensionX->groupTitle); printf("<TH ALIGN=RIGHT valign=%s>All ",top?"TOP":"BOTTOM"); //printf("<TH ALIGN=RIGHT valign=%s>All ",(top == squeeze)?"BOTTOM":"TOP");//"TOP":"BOTTOM"); buttonsForAll(); puts("</TH>"); } else printf("<TH ALIGN=LEFT valign=%s><B><EM>%s</EM></B> </TH>",top?"TOP":"BOTTOM", dimensionX->groupTitle); } } else if(dimensionY) { printf("<TH ALIGN=RIGHT WIDTH=100 nowrap>"); printf("<B><EM>%s</EM></B>", dimensionY->groupTitle); printf("</TH><TH ALIGN=CENTER WIDTH=60>"); @@ -6560,45 +6506,37 @@ puts("</TH>"); } puts("</TR>\n"); } static void matrixXheadingsRow2(struct trackDb *parentTdb, boolean squeeze, membersForAll_t* membersForAll) /* prints the 2nd row of a matrix: Y title; X buttons; title Y */ { members_t *dimensionX = membersForAll->members[dimX]; members_t *dimensionY = membersForAll->members[dimY]; // If there are both X and Y dimensions, then there is a row of buttons in X if(dimensionX && dimensionY) { int ixX,cntX=0; - #ifdef MATRIX_SQUEEZE printf("<TR ALIGN=CENTER><TH ALIGN=CENTER colspan=2><B><EM>%s</EM></B></TH>",dimensionY->groupTitle); - #else///ifndef MATRIX_SQUEEZE - printf("<TR ALIGN=CENTER BGCOLOR=\"%s\"><TH ALIGN=CENTER colspan=2><B><EM>%s</EM></B></TH>",COLOR_BG_ALTDEFAULT, dimensionY->groupTitle); - #endif///ndef MATRIX_SQUEEZE for (ixX = 0; ixX < dimensionX->count; ixX++) // Special row of +- +- +- { if(dimensionX->subtrackList && dimensionX->subtrackList[ixX] && dimensionX->subtrackList[ixX]->val) { char objName[SMALLBUF]; - #ifdef MATRIX_SQUEEZE printf("<TD nowrap class='matCell %s all'>\n",dimensionX->tags[ixX]); - #else///ifndef MATRIX_SQUEEZE - puts("<TD>"); - #endif///ndef MATRIX_SQUEEZE safef(objName, sizeof(objName), "plus_%s_all", dimensionX->tags[ixX]); buttonsForOne( objName, dimensionX->tags[ixX], squeeze ); puts("</TD>"); cntX++; } } // If dimension is big enough, then add Y buttons to right as well if(cntX>MATRIX_RIGHT_BUTTONS_AFTER) printf("<TH ALIGN=CENTER colspan=2><B><EM>%s</EM></B></TH>", dimensionY->groupTitle); puts("</TR>\n"); } } static boolean matrixXheadings(char *db,struct trackDb *parentTdb, membersForAll_t* membersForAll,boolean top) /* UI for X headings in matrix */ @@ -6617,56 +6555,48 @@ } static void matrixYheadings(char *db,struct trackDb *parentTdb, membersForAll_t* membersForAll,int ixY,boolean left) /* prints the column of Y labels and buttons */ { members_t *dimensionX = membersForAll->members[dimX]; members_t *dimensionY = membersForAll->members[dimY]; struct trackDb *childTdb = NULL; if(dimensionY && dimensionY->subtrackList && dimensionY->subtrackList[ixY] && dimensionY->subtrackList[ixY]->val) childTdb = dimensionY->subtrackList[ixY]->val; if(dimensionX && dimensionY && childTdb != NULL) // Both X and Y, then column of buttons { char objName[SMALLBUF]; - #ifdef MATRIX_SQUEEZE printf("<TH class='matCell all %s' ALIGN=%s nowrap colspan=2>",dimensionY->tags[ixY],left?"RIGHT":"LEFT"); - #else///ifndef MATRIX_SQUEEZE - printf("<TH ALIGN=%s nowrap colspan=2>",left?"RIGHT":"LEFT"); - #endif///ndef MATRIX_SQUEEZE if(left) printf("%s ",compositeLabelWithVocabLink(db,parentTdb,childTdb,dimensionY->groupTag,dimensionY->titles[ixY])); safef(objName, sizeof(objName), "plus_all_%s", dimensionY->tags[ixY]); buttonsForOne( objName, dimensionY->tags[ixY], FALSE ); if(!left) printf(" %s",compositeLabelWithVocabLink(db,parentTdb,childTdb,dimensionY->groupTag,dimensionY->titles[ixY])); puts("</TH>"); } else if (dimensionX) { printf("<TH ALIGN=%s>",left?"RIGHT":"LEFT"); buttonsForAll(); puts("</TH>"); } else if (left && dimensionY && childTdb != NULL) - #ifdef MATRIX_SQUEEZE printf("<TH class='matCell all %s' ALIGN=RIGHT nowrap>%s</TH>\n",dimensionY->tags[ixY], compositeLabelWithVocabLink(db,parentTdb,childTdb,dimensionY->groupTag,dimensionY->titles[ixY])); - #else///ifndef MATRIX_SQUEEZE - printf("<TH ALIGN=RIGHT nowrap>%s</TH>\n",compositeLabelWithVocabLink(db,parentTdb,childTdb,dimensionY->groupTag,dimensionY->titles[ixY])); - #endif///ndef MATRIX_SQUEEZE } static int displayABCdimensions(char *db,struct cart *cart, struct trackDb *parentTdb, struct slRef *subtrackRefList, membersForAll_t* membersForAll) /* This will walk through all declared nonX&Y dimensions (X and Y is the 2D matrix of CBs. NOTE: ABC dims are only supported if there are X & Y both. Also expected number should be passed in */ { int count=0,ix; for(ix=dimA;ix<membersForAll->dimMax;ix++) { if(membersForAll->members[ix]==NULL) continue; if(membersForAll->members[ix]->count<1) continue; count++; @@ -6809,60 +6739,48 @@ #else///ifndef BUTTONS_BY_CSS #define PM_BUTTON_FILTER_COMP "<input type='button' class='inOutButton' onclick=\"waitOnFunction(filterCompositeSet,this,%s); return false;\" id='btn_%s' value='%c'>" printf(PM_BUTTON_FILTER_COMP,"true", "plus_fc",'+'); printf(PM_BUTTON_FILTER_COMP,"false","minus_fc",'-'); #endif///ndef BUTTONS_BY_CSS printf("</TD>\n"); } // Now make a filterComp box for each ABC dimension int dimIx=dimA; for(dimIx=dimA;dimIx<membersForAll->dimMax;dimIx++) { //printf("<TD align='right'><B>%s:</B></TD><TD align='left'>\n",labelWithVocabLinkForMultiples(db,parentTdb,membersForAll->members[dimIx])); printf("<TD align='left'><B>%s:</B><BR>\n",labelWithVocabLinkForMultiples(db,parentTdb,membersForAll->members[dimIx])); - #ifdef FILTER_COMPOSITE_OPEN_SIZE - int fullSize = membersForAll->members[dimIx]->count; - #ifdef FILTER_COMPOSITE_ONLYONE - if(membersForAll->members[dimIx]->fcType != fctOneOnly) - #endif///def FILTER_COMPOSITE_ONLYONE - fullSize++; // Room for "All" - #endif///def FILTER_COMPOSITE_OPEN_SIZE - #define FILTER_COMPOSITE_FORMAT "<SELECT id='fc%d' name='%s.filterComp.%s' %s onchange='filterCompositeSelectionChanged(this);' style='display: none; font-size:.8em;' class='filterComp'><BR>\n" printf(FILTER_COMPOSITE_FORMAT,dimIx,parentTdb->track,membersForAll->members[dimIx]->groupTag,"multiple"); - #ifdef FILTER_COMPOSITE_ONLYONE // DO we support anything besides multi? (membersForAll->members[dimIx]->fcType == fctMulti?"multiple ":"")); if(membersForAll->members[dimIx]->fcType != fctOneOnly) - #endif///def FILTER_COMPOSITE_ONLYONE printf("<OPTION%s>All</OPTION>\n",(sameWord("All",membersForAll->checkedTags[dimIx])?" SELECTED":"") ); int ix=0; for(ix=0;ix<membersForAll->members[dimIx]->count; ix++) { boolean alreadySet = membersForAll->members[dimIx]->selected[ix]; printf("<OPTION%s value=%s>%s</OPTION>\n",(alreadySet?" SELECTED":""), membersForAll->members[dimIx]->tags[ix],membersForAll->members[dimIx]->titles[ix]); } printf("</SELECT>"); - #ifdef FILTER_COMPOSITE_ONLYONE if(membersForAll->members[dimIx]->fcType == fctOneOnly) printf(" (select only one)"); - #endif///def FILTER_COMPOSITE_ONLYONE printf("</TD><TD width='20'></TD>\n"); } printf("</TR></TABLE>\n"); puts("<BR>\n"); return TRUE; } static boolean compositeUiByMatrix(char *db, struct cart *cart, struct trackDb *parentTdb, char *formName) /* UI for composite tracks: matrix of checkboxes. */ { //int ix; char objName[SMALLBUF]; @@ -6945,51 +6863,43 @@ puts(strLower(javascript)); if(!subgroupingExists(parentTdb,"view")) puts("(<A HREF=\"../goldenPath/help/multiView.html\" title='Help on subtrack selection' TARGET=_BLANK>help</A>)\n"); puts("<BR>\n"); if(membersForAll->abcCount > 0 && membersForAll->filters == FALSE) { displayABCdimensions(db,cart,parentTdb,subtrackRefList,membersForAll); } if(dimensionX == NULL && dimensionY == NULL) // Could have been just filterComposite. Must be an X or Y dimension return FALSE; -#ifdef MATRIX_SQUEEZE printf("<TABLE class='greenBox matrix' cellspacing=0 style='background-color:%s;'>\n",COLOR_BG_ALTDEFAULT); -#else///ifndef MATRIX_SQUEEZE -printf("<TABLE class='greenBox' style='background-color:%s;'>\n",COLOR_BG_DEFAULT); -#endif///ndef MATRIX_SQUEEZE (void)matrixXheadings(db,parentTdb,membersForAll,TRUE); // Now the Y by X matrix int cntX=0,cntY=0; for (ixY = 0; ixY < sizeOfY; ixY++) { if(dimensionY == NULL || (dimensionY->tags[ixY])) { cntY++; assert(!dimensionY || ixY < dimensionY->count); - #ifdef MATRIX_SQUEEZE printf("<TR ALIGN=CENTER>"); - #else///ifndef MATRIX_SQUEEZE - printf("<TR ALIGN=CENTER BGCOLOR='%s'>",COLOR_BG_ALTDEFAULT); - #endif///ndef MATRIX_SQUEEZE matrixYheadings(db,parentTdb, membersForAll,ixY,TRUE); #define MAT_CB_SETUP "<INPUT TYPE=CHECKBOX NAME='%s' VALUE=on %s>" #define MAT_CB(name,js) printf(MAT_CB_SETUP,(name),(js)); for (ixX = 0; ixX < sizeOfX; ixX++) { if(dimensionX == NULL || (dimensionX->tags[ixX])) { assert(!dimensionX || ixX < dimensionX->count); if(cntY==1) // Only do this on the first good Y cntX++; if(dimensionX && ixX == dimensionX->count) @@ -7009,72 +6919,56 @@ stripString(ttlY,"</i>"); } if(cells[ixX][ixY] > 0) { boolean halfChecked = (chked[ixX][ixY] > 0 && chked[ixX][ixY] < enabd[ixX][ixY]); struct dyString *dyJS = dyStringCreate("onclick='matCbClick(this);'"); if(dimensionX && dimensionY) { safef(objName, sizeof(objName), "mat_%s_%s_cb", dimensionX->tags[ixX],dimensionY->tags[ixY]); } else { safef(objName, sizeof(objName), "mat_%s_cb", (dimensionX ? dimensionX->tags[ixX] : dimensionY->tags[ixY])); } - //printf("<TD title='subCBs:%d checked:%d enabled:%d'>\n",cells[ixX][ixY],chked[ixX][ixY],enabd[ixX][ixY]); - #ifdef MATRIX_SQUEEZE if(ttlX && ttlY) printf("<TD class='matCell %s %s'>\n",dimensionX->tags[ixX],dimensionY->tags[ixY]); else printf("<TD class='matCell %s'>\n", (dimensionX ? dimensionX->tags[ixX] : dimensionY->tags[ixY])); - #else///ifndef MATRIX_SQUEEZE - if(ttlX && ttlY) - printf("<TD title='%s and %s'>\n",ttlX,ttlY); - else - printf("<TD title='%s'>\n",(ttlX ? ttlX : ttlY)); - #endif///ndef MATRIX_SQUEEZE dyStringPrintf(dyJS, " class=\"matCB"); if(halfChecked) dyStringPrintf(dyJS, " disabled"); // appears disabled but still clickable! if(dimensionX) dyStringPrintf(dyJS, " %s",dimensionX->tags[ixX]); if(dimensionY) dyStringPrintf(dyJS, " %s",dimensionY->tags[ixY]); dyStringAppendC(dyJS,'"'); if(chked[ixX][ixY] > 0) dyStringAppend(dyJS," CHECKED"); if(halfChecked) dyStringAppend(dyJS," title='Not all associated subtracks have been selected'"); MAT_CB(objName,dyStringCannibalize(&dyJS)); // X&Y are set by javascript page load puts("</TD>"); } else { - #ifdef MATRIX_SQUEEZE if(ttlX && ttlY) printf("<TD class='matCell %s %s'></TD>\n",dimensionX->tags[ixX],dimensionY->tags[ixY]); else printf("<TD class='matCell %s'></TD>\n", (dimensionX ? dimensionX->tags[ixX] : dimensionY->tags[ixY])); - #else///ifndef MATRIX_SQUEEZE - if(ttlX && ttlY) - printf("<TD title='%s and %s'></TD>\n",ttlX,ttlY); - else - printf("<TD title='%s'></TD>\n",(ttlX ? ttlX : ttlY)); - #endif///ndef MATRIX_SQUEEZE - //puts("<TD> </TD>"); } } } if(dimensionX && cntX>MATRIX_RIGHT_BUTTONS_AFTER) matrixYheadings(db,parentTdb, membersForAll,ixY,FALSE); puts("</TR>\n"); } } if(dimensionY && cntY>MATRIX_BOTTOM_BUTTONS_AFTER) matrixXheadings(db,parentTdb,membersForAll,FALSE); puts("</TD></TR></TABLE>"); // If any filter additional filter composites, they can be added at the end. compositeUiByFilter(db, cart, parentTdb, formName); @@ -7274,33 +7168,30 @@ char *primarySubtrack, char *fakeSubmit, char *formName, struct hash *trackHash) /* UI for composite tracks: subtrack selection. If primarySubtrack is * non-NULL, don't allow it to be cleared and only offer subtracks * that have the same type. If fakeSubmit is non-NULL, add a hidden * var with that name so it looks like it was pressed. */ { bool hasSubgroups = (trackDbSetting(tdb, "subGroup1") != NULL); boolean isMatrix = dimensionsExist(tdb); boolean viewsOnly = FALSE; if (primarySubtrack == NULL && !cartVarExists(cart, "ajax")) { if(trackDbSetting(tdb, "dragAndDrop") != NULL) jsIncludeFile("jquery.tablednd.js", NULL); jsIncludeFile("ajax.js",NULL); - #ifdef TABLE_SCROLL - jsIncludeFile("jquery.fixedtable.js",NULL); - #endif//def TABLE_SCROLL jsIncludeFile("hui.js",NULL); #ifdef SUBTRACK_CFG jsIncludeFile("subCfg.js",NULL); #endif///ndef SUBTRACK_CFG } cgiDown(0.7); if (trackDbCountDescendantLeaves(tdb) < MANY_SUBTRACKS && !hasSubgroups) { if(primarySubtrack) compositeUiSubtracksMatchingPrimary(db, cart, tdb,primarySubtrack); else compositeUiSubtracks(db, cart, tdb, trackHash); return; }