75d98e0605289c832753618a335ccffccce9fc60
kate
  Thu Jan 30 22:21:45 2014 -0800
Add multi-select filter for factors to factorSource config page
diff --git src/hg/hgTrackUi/hgTrackUi.c src/hg/hgTrackUi/hgTrackUi.c
index 21157f4..e1296c5 100644
--- src/hg/hgTrackUi/hgTrackUi.c
+++ src/hg/hgTrackUi/hgTrackUi.c
@@ -2483,30 +2483,38 @@
 jsMakeCheckboxGroupSetClearButton(cartVarName, TRUE);
 jsMakeCheckboxGroupSetClearButton(cartVarName, FALSE);
 cgiMakeCheckboxGroupWithVals(cartVarName, labelArr, valueArr, refCount, checked, 4);
 hFreeConn(&conn);
 }
 
 static void factorSourceUi(char *db, struct trackDb *tdb)
 {
 if (trackDbSetting(tdb, "motifTable") != NULL)
     {
     char varName[64];
     printf("<BR><B>Highlight motifs: </B> ");
     safef(varName, sizeof(varName), "%s.highlightMotifs", tdb->track);
     cartMakeCheckBox(cart, varName, trackDbSettingClosestToHomeOn(tdb, "motifDrawDefault"));
     }
+// Multi-select filter on factors
+// NOTE: doesn't currently support track type in composites
+filterBy_t *filters = filterBySetGet(tdb, cart, tdb->track);
+if (filters == NULL)
+    return;
+puts("<p>");
+filterBySetCfgUi(cart, tdb, filters, TRUE);
+filterBySetFree(&filters);
 }
 
 #ifdef UNUSED
 static boolean isInTrackList(struct trackDb *tdbList, struct trackDb *target)
 /* Return TRUE if target is in tdbList. */
 {
 struct trackDb *tdb;
 for (tdb = tdbList; tdb != NULL; tdb = tdb->next)
     if (tdb == target)
         return TRUE;
 return FALSE;
 }
 #endif /* UNUSED */
 
 void superTrackUi(struct trackDb *superTdb, struct trackDb *tdbList)