efba7e00a3e2c79d5714f693eda1a81f23eb479b
angie
Fri Aug 3 09:11:21 2012 -0700
Code Review #8673 - thanks Tim!
diff --git src/hg/hgTrackUi/hgTrackUi.c src/hg/hgTrackUi/hgTrackUi.c
index 289fd70..0470829 100644
--- src/hg/hgTrackUi/hgTrackUi.c
+++ src/hg/hgTrackUi/hgTrackUi.c
@@ -218,71 +218,72 @@
safef(cartVar, sizeof(cartVar), "%s.include_%s", track, attributeVar);
jsMakeCheckboxGroupSetClearButton(cartVar, TRUE);
puts(" ");
jsMakeCheckboxGroupSetClearButton(cartVar, FALSE);
printf("\n
\n");
boolean foundInCart = FALSE;
struct slName *selectedAttributes = snp125FilterFromCart(cart, track, attributeVar, &foundInCart);
// Include all by default:
if (! foundInCart)
selectedAttributes = slNameListFromStringArray(values, menuSize);
cgiMakeCheckboxGroupWithVals(cartVar, labels, values, menuSize, selectedAttributes,
SNP125_FILTER_COLUMNS);
printf(" |
\n");
}
-static char *getSetFieldValStr(struct sqlFieldInfo *fi, char *table)
-/* Destructively prepare fi->type for chopCommas, making sure it looks like a set() def. */
+static char *commaSepFromSqlSetTypeDecl(struct sqlFieldInfo *fi, char *table)
+/* Destructively prepare fi->type for chopCommas: strip initial "set(" and final ")",
+ * informatively errAborting if not found, and strip the single-quote characters
+ * that mysql puts around each field. */
{
if (!startsWith("set(", fi->type))
errAbort("Expected %s.%s's type to begin with 'set(' but got '%s'",
table, fi->field, fi->type);
char *vals = fi->type + strlen("set(");
char *rightParen = strrchr(vals, ')');
if (rightParen == NULL || rightParen[1] != '\0')
errAbort("Expected %s.%s's type to end with ')' but got '%s'",
table, fi->field, fi->type);
else
*rightParen = '\0';
stripChar(vals, '\'');
return vals;
}
static void snp137PrintFunctionFilterControls(struct trackDb *tdb)
/* As of snp137, show func filter choices based on sql field set
* values and Sequence Ontology (SO) terms so we won't have to
* hardcode menus as new functional categories are added. */
{
struct sqlConnection *conn = hAllocConn(database);
struct sqlFieldInfo *fi, *fiList = sqlFieldInfoGet(conn, tdb->table);
hFreeConn(&conn);
for (fi = fiList; fi != NULL; fi = fi->next)
{
if (sameString(fi->field, "func"))
{
- char *vals = getSetFieldValStr(fi, tdb->table);
- char *values[128];
+ char *vals = commaSepFromSqlSetTypeDecl(fi, tdb->table);
+ char *values[128]; // 22 values as of snp137
int valCount = chopCommas(vals, values);
char *labels[valCount];
int i;
for (i = 0; i < valCount; i++)
{
- char *val = values[i];
- if (sameString(val, "unknown"))
+ if (sameString(values[i], "unknown"))
labels[i] = "Unknown";
else
- labels[i] = snpMisoLinkFromFunc(val);
+ labels[i] = snpMisoLinkFromFunc(values[i]);
}
snp125PrintFilterControls(tdb->track, "Function", "func", labels, values, valCount);
return;;
}
}
errAbort("Didn't find definition of func field in %s", tdb->table);
}
static void snp125PrintFilterControlSection(struct trackDb *tdb, int version)
/* Print a collapsible section of filtering controls on SNP properties, first numeric
* and then enum/set. */
{
char cartVar[512];
printf(" |
\n");
jsBeginCollapsibleSection(cart, tdb->track, "filterByAttribute", "Filtering Options", FALSE);