src/hg/hgTrackUi/hgTrackUi.c 1.473

1.473 2009/02/23 22:55:04 angie
Added dgvUi: filter items by publication reference.
Index: src/hg/hgTrackUi/hgTrackUi.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTrackUi/hgTrackUi.c,v
retrieving revision 1.472
retrieving revision 1.473
diff -b -B -U 4 -r1.472 -r1.473
--- src/hg/hgTrackUi/hgTrackUi.c	9 Feb 2009 19:42:22 -0000	1.472
+++ src/hg/hgTrackUi/hgTrackUi.c	23 Feb 2009 22:55:04 -0000	1.473
@@ -31,8 +31,9 @@
 #include "nonCodingUi.h"
 #include "expRecord.h"
 #include "wikiTrack.h"
 #include "pcrResult.h"
+#include "dgv.h"
 #include "transMapStuff.h"
 
 #define MAIN_FORM "mainForm"
 #define WIGGLE_HELP_PAGE  "../goldenPath/help/hgWiggleTrackHelp.html"
@@ -2153,8 +2154,51 @@
     }
 baseColorDrawOptDropDown(cart, tdb);
 }
 
+void dgvUi(struct trackDb *tdb)
+/* Database of Genomic Variants: filter by publication. */
+{
+struct sqlConnection *conn = hAllocConn(database);
+struct sqlResult *sr;
+char **row;
+char query[256];
+safef(query, sizeof(query),
+      "select reference,pubMedId from %s group by pubMedId order by reference;", tdb->tableName);
+sr = sqlGetResult(conn, query);
+printf("<BR><B>Filter by publication reference:</B>\n");
+char cartVarName[256];
+safef (cartVarName, sizeof(cartVarName), "hgt_%s_filterType", tdb->tableName);
+boolean isExclude = sameString("exclude", cartUsualString(cart, cartVarName, "exclude"));
+cgiMakeRadioButton(cartVarName, "exclude", isExclude);
+printf("exclude\n");
+cgiMakeRadioButton(cartVarName, "include", !isExclude);
+printf("include<BR>\n");
+safef (cartVarName, sizeof(cartVarName), "hgt_%s_filterPmId", tdb->tableName);
+struct slName *checked = cartOptionalSlNameList(cart, cartVarName);
+#define MAX_DGV_REFS 128
+char *labelArr[MAX_DGV_REFS], *valueArr[MAX_DGV_REFS];
+int refCount = 0;
+while ((row = sqlNextRow(sr)) != NULL)
+    {
+    char *ref = row[0];
+    char *pmId = row[1];
+    char label[512];
+    safef(label, sizeof(label),
+	  "<A HREF=\"http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=PubMed"
+	  "&list_uids=%s&dopt=Abstract&tool=genome.ucsc.edu\" TARGET=_BLANK>%s</A>", pmId, ref);
+    labelArr[refCount] = cloneString(label);
+    valueArr[refCount++] = cloneString(pmId);
+    if (refCount >= MAX_DGV_REFS)
+	errAbort("dgvUi: %s has too many references (max %d)", tdb->tableName, MAX_DGV_REFS);
+    }
+sqlFreeResult(&sr);
+jsMakeCheckboxGroupSetClearButton(cartVarName, TRUE);
+jsMakeCheckboxGroupSetClearButton(cartVarName, FALSE);
+cgiMakeCheckboxGroupWithVals(cartVarName, labelArr, valueArr, refCount, checked, 4);
+hFreeConn(&conn);
+}
+
 
 void superTrackUi(struct trackDb *superTdb)
 /* List tracks in this collection, with visibility controls and UI links */
 {
@@ -2337,8 +2381,10 @@
 else if (sameString(track, "hapmapSnps"))
     hapmapSnpsUi(tdb);
 else if (sameString(track, "switchDbTss"))
     switchDbScoreUi(tdb);
+else if (sameString(track, "dgv") || (startsWith("dgvV", track) && isdigit(track[4])))
+    dgvUi(tdb);
 else if (tdb->type != NULL)
     {
     /* handle all tracks with type genePred or bed or "psl xeno <otherDb>" */
     char *typeLine = cloneString(tdb->type);