src/hg/lib/hui.c 1.265

1.265 2010/03/19 21:23:51 tdreszer
Added support for hgTrackUi to support metadata from metaTbl instead of trackDb
Index: src/hg/lib/hui.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/lib/hui.c,v
retrieving revision 1.264
retrieving revision 1.265
diff -b -B -U 4 -r1.264 -r1.265
--- src/hg/lib/hui.c	3 Mar 2010 19:30:02 -0000	1.264
+++ src/hg/lib/hui.c	19 Mar 2010 21:23:51 -0000	1.265
@@ -21,8 +21,9 @@
 #include "hgMaf.h"
 #include "udc.h"
 #include "customTrack.h"
 #include "encode/encodePeak.h"
+#include "metaTbl.h"
 
 static char const rcsid[] = "$Id$";
 
 #define SMALLBUF 128
@@ -86,9 +87,9 @@
     }
 return FALSE;
 }
 
-boolean metadataToggle(struct trackDb *tdb,char *title,boolean embeddedInText,boolean showLongLabel)
+static boolean metadataInTdbToggle(struct trackDb *tdb,char *title,boolean embeddedInText,boolean showLongLabel)
 /* If metadata exists, create a link that will allow toggling it's display */
 {
 metadata_t *metadata = metadataSettingGet(tdb);
 if(metadata != NULL)
@@ -126,8 +127,53 @@
     }
 return FALSE;
 }
 
+static boolean metadataToggle(char *db,struct trackDb *tdb,char *title,boolean embeddedInText,boolean showLongLabel)
+/* If metadata from metaTbl if it exists, create a link that will allow toggling it's display */
+{
+struct metaObj *metaObj = metaObjQueryByObj(db,NULL,tdb->tableName,NULL);
+if(metaObj != NULL && metaObj->vars != NULL)
+    {
+    printf("%s<A HREF='#a_meta_%s' onclick='return metadataShowHide(\"%s\");' title='Show metadata details...'>%s</A>",
+           (embeddedInText?"&nbsp;":"<P>"),tdb->tableName,tdb->tableName, title);
+    printf("<DIV id='div_%s_meta' style='display:none;'><!--<table>",tdb->tableName);
+    if(showLongLabel)
+        printf("<tr onmouseover=\"this.style.cursor='text';\"><td colspan=2>%s</td></tr>",tdb->longLabel);
+    printf("<tr onmouseover=\"this.style.cursor='text';\"><td align=right><i>shortLabel:</i></td><td nowrap>%s</td></tr>",tdb->shortLabel);
+
+    metaObjRemoveVars(metaObj,"composite project tableName"); // Don't bother showing these (suggest: "composite project dataType view tableName")
+    // FIXME: Leaving tableName out as s clear difference between netaTbl and trackDb setting.  Could add back in if desired.
+    metaObjReorderVars(metaObj,"grant lab dataType cell treatment antibody protocol input view",FALSE); // Bring to front
+    metaObjReorderVars(metaObj,"subId submittedDataVersion dateSubmitted dateResubmitted dateUnrestricted dataVersion tableName fileName",TRUE); // Send to back
+    struct metaVar *metaVar;
+    for(metaVar=metaObj->vars;metaVar!=NULL;metaVar=metaVar->next)
+        {
+        if(sameString(metaVar->var,"fileName"))
+            {
+            printf("<tr onmouseover=\"this.style.cursor='text';\"><td align=right><i>%s:</i></td><td nowrap>",metaVar->var);
+            makeNamedDownloadsLink(trackDbTopLevelSelfOrParent(tdb), metaVar->val);
+            printf("</td></tr>");
+            }
+        else
+            {
+            // If antibody and metadata contains input={sameValue} then just print input
+            if(sameString(metaVar->var,"antibody") && metaObjContains(metaObj,"input",metaVar->val))
+                continue;
+
+            printf("<tr onmouseover=\"this.style.cursor='text';\"><td align=right><i>%s:</i></td><td nowrap>%s</td></tr>",metaVar->var,metaVar->val);
+            }
+        }
+    printf("</table>--></div>");
+    metaObjsFree(&metaObj);
+    return TRUE;
+    }
+else
+    return metadataInTdbToggle(tdb,title,embeddedInText,showLongLabel); // FIXME: This should be removed when all metadata is in metaTbl!!!
+
+return FALSE;
+}
+
 void extraUiLinks(char *db,struct trackDb *tdb)
 /* Show downlaods, schema and metadata links where appropriate */
 {
 boolean schemaLink = (isCustomTrack(tdb->tableName) == FALSE)
@@ -156,9 +202,9 @@
     if(metadataLink)
         printf(",");
     }
 if (metadataLink)
-    metadataToggle(tdb,"metadata", TRUE, TRUE);
+    metadataToggle(db,tdb,"metadata", TRUE, TRUE);
 
 if(moreThanOne)
     printf("</td></tr></table>");
 puts("</P>");
@@ -3431,9 +3477,9 @@
                 }
             printf ("<TD nowrap='true' title='select to copy' onmouseover=\"this.style.cursor='text';\"><div>&nbsp;%s", subtrack->longLabel);
             if(trackDbSetting(parentTdb, "wgEncode") && trackDbSetting(subtrack, "accession"))
                 printf (" [GEO:%s]", trackDbSetting(subtrack, "accession"));
-            metadataToggle(subtrack,"...",TRUE,FALSE);
+            metadataToggle(db,subtrack,"...",TRUE,FALSE);
             printf("</div>");
 
             if(cType != cfgNone)
                 {