src/hg/lib/hui.c 1.193

1.193 2009/05/11 21:56:31 tdreszer
Added API for hgTrackUi and hgc to show schemaLink, Downlaods link and metadata
Index: src/hg/lib/hui.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/lib/hui.c,v
retrieving revision 1.192
retrieving revision 1.193
diff -b -B -U 4 -r1.192 -r1.193
--- src/hg/lib/hui.c	6 May 2009 00:24:07 -0000	1.192
+++ src/hg/lib/hui.c	11 May 2009 21:56:31 -0000	1.193
@@ -43,9 +43,9 @@
 {
 // Downloads directory if this is ENCODE
 if(trackDbSetting(tdb, "wgEncode") != NULL)
     {
-    printf("<P><A HREF=\"http://%s/goldenPath/%s/%s/%s/\" TARGET=ucscDownloads>%s</A></P>\n",
+    printf("<A HREF=\"http://%s/goldenPath/%s/%s/%s/\" title='Open dowloads directory in a new window' TARGET=ucscDownloads>%s</A>",
             cfgOptionDefault("downloads.server", "hgdownload.cse.ucsc.edu"),
             trackDbSettingOrDefault(tdb, "origAssembly","hg18"),
             ENCODE_DCC_DOWNLOADS,
             tdb->tableName,name);
@@ -62,19 +62,17 @@
 
 boolean makeSchemaLink(char *db,struct trackDb *tdb,char *label)
 // Make a table schema link (if appropriate and then returns TRUE)
 {
-#define SCHEMA_LINKED "<A HREF=\"../cgi-bin/hgTables?db=%s&hgta_group=%s&hgta_track=%s&hgta_table=%s&hgta_doSchema=describe+table+schema\" TARGET=ucscSchema%s>%s</A>\n"
+#define SCHEMA_LINKED "<A HREF=\"../cgi-bin/hgTables?db=%s&hgta_group=%s&hgta_track=%s&hgta_table=%s&hgta_doSchema=describe+table+schema\" TARGET=ucscSchema%s>%s</A>"
 if (hTableOrSplitExists(db, tdb->tableName))
     {
 	char *tableName  = tdb->tableName;
 	if (sameString(tableName, "mrna"))
 	    tableName = "all_mrna";
     char *hint = " title='Open table schema in new window'";
     if( label == NULL)
         label = " View table schema";
-    else
-        hint = " title='View table schema'";
 
     if(tdbIsCompositeChild(tdb))
         printf(SCHEMA_LINKED, db, tdb->parent->grp, tdb->parent->tableName,tableName,hint,label);
     else
@@ -84,8 +82,78 @@
     }
 return FALSE;
 }
 
+boolean metadataToggle(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)
+    {
+    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);
+    int ix = (sameString(metadata->values[0],"wgEncode")?1:0); // first should be project.
+    for(;ix<metadata->count;ix++)
+        {
+        if(sameString(metadata->tags[ix],"fileName"))
+            {
+            printf("<tr onmouseover=\"this.style.cursor='text';\"><td align=right><i>%s:</i></td><td nowrap>",metadata->tags[ix]);
+            makeNamedDownloadsLink(tdb->parent != NULL? tdb->parent :tdb ,metadata->values[ix]);
+            printf("</td></tr>");
+            }
+        else
+            if(!sameString(metadata->tags[ix],"subId")
+                && !sameString(metadata->tags[ix],"composite"))
+            printf("<tr onmouseover=\"this.style.cursor='text';\"><td align=right><i>%s:</i></td><td nowrap>%s</td></tr>",metadata->tags[ix],metadata->values[ix]);
+        }
+    printf("</table>--></div>");
+    metadataFree(&metadata);
+    return TRUE;
+    }
+return FALSE;
+}
+
+void extraUiLinks(char *db,struct trackDb *tdb)
+/* Show downlaods, schema and metadata links where appropriate */
+{
+boolean schemaLink = (isCustomTrack(tdb->tableName) == FALSE)
+                  && (hTableOrSplitExists(db, tdb->tableName));
+boolean metadataLink = (!tdbIsComposite(tdb))
+                  && trackDbSetting(tdb, "metadata");
+boolean downloadLink = (trackDbSetting(tdb, "wgEncode") != NULL);
+boolean moreThanOne = (schemaLink && metadataLink)
+                   || (schemaLink && downloadLink)
+                   || (downloadLink && metadataLink);
+
+printf("<P>");
+if(moreThanOne)
+    printf("<table><tr><td nowrap>View table: ");
+
+if(schemaLink)
+    {
+    makeSchemaLink(db,tdb,(moreThanOne ? "schema":"View table schema"));
+    if(downloadLink || metadataLink)
+        printf(", ");
+    }
+if(downloadLink)
+    {
+    makeNamedDownloadsLink(tdb,(moreThanOne ? "downloads":"Downloads"));
+    if(metadataLink)
+        printf(",");
+    }
+if (metadataLink)
+    metadataToggle(tdb,"metadata", TRUE, TRUE);
+
+if(moreThanOne)
+    printf("</td></tr></table>");
+puts("</P>");
+}
+
+
 char *hUserCookie()
 /* Return our cookie name. */
 {
 if (hIsMgcServer())
@@ -2790,41 +2858,8 @@
     }
 return date;
 }
 
-boolean metadataToggle(struct trackDb *tdb,char *title,boolean embeddedInText)
-/* If metadata exists, create a link that will allow toggling it's display */
-{
-metadata_t *metadata = metadataSettingGet(tdb);
-if(metadata != NULL)
-    {
-    printf("%s<A HREF='#a_meta_%s' onclick='return metadataShowHide(\"%s\");' title='Show metadata details...'>%s</A>\n",
-           (embeddedInText?"&nbsp;":"<P>"),tdb->tableName,tdb->tableName, title);
-    printf("<DIV id='div_%s_meta' style='display:none;'><!--<table>",tdb->tableName);
-    if(!embeddedInText)
-        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);
-    int ix = (sameString(metadata->values[0],"wgEncode")?1:0); // first should be project.
-    for(;ix<metadata->count;ix++)
-        {
-        if(sameString(metadata->tags[ix],"fileName"))
-            {
-            printf("<tr onmouseover=\"this.style.cursor='text';\"><td align=right><i>%s:</i></td><td nowrap>",metadata->tags[ix]);
-            makeNamedDownloadsLink(tdb->parent != NULL? tdb->parent :tdb ,metadata->values[ix]);
-            printf("</td></tr>");
-            }
-        else
-            if(!sameString(metadata->tags[ix],"subId")
-                && !sameString(metadata->tags[ix],"composite"))
-            printf("<tr onmouseover=\"this.style.cursor='text';\"><td align=right><i>%s:</i></td><td nowrap>%s</td></tr>",metadata->tags[ix],metadata->values[ix]);
-        }
-    printf("</table>--></div>\n");
-    metadataFree(&metadata);
-    return TRUE;
-    }
-return FALSE;
-}
-
 static void compositeUiSubtracks(char *db, struct cart *cart, struct trackDb *parentTdb,
                  boolean selectedOnly, char *primarySubtrack)
 /* Show checkboxes for subtracks. */
 {
@@ -3063,9 +3098,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);
+            metadataToggle(subtrack,"...",TRUE,FALSE);
             printf("</div>");
 
             if(cType != cfgNone)
                 {
@@ -4297,8 +4332,10 @@
             *visibility = cloneString(words[ix] + strlen(view) + 1);
         break;
         }
     }
+// At this point we need to search the cart to see if any others are already expanded.
+// cart var of style "wgEncodeYaleChIPseq.Peaks.showCfg" {parentTable}.{view}.showCfg value='on'
 freeMem(target);
 return expanded;
 }
 
@@ -4380,8 +4417,9 @@
         //    puts("</tr><tr><td>&nbsp;</td></tr><tr>");
         }
     }
 puts("<TD><A HREF=\"../../goldenPath/help/multiView.html\" TARGET=_BLANK>Help on views</A></TD>");
+// Need to do the same for ENCODE Gencode 'filterBy's
 puts("</TR>");
 if(makeCfgRows)
     {
     puts("</TABLE><TABLE>");