5199438a1019eff8b60a3f9bc404b6494ed800c2
braney
  Tue May 9 07:41:33 2017 -0700
Add menus to do sorting on custom composites.

diff --git src/hg/hgComposite/hgComposite.c src/hg/hgComposite/hgComposite.c
index d35ac86..f600b4b 100644
--- src/hg/hgComposite/hgComposite.c
+++ src/hg/hgComposite/hgComposite.c
@@ -145,58 +145,62 @@
 jsDropDownCarryOver(dy, "clade");
 jsDropDownCarryOver(dy, "db");
 return jsOnChangeEnd(&dy);
 }
 
 INLINE void printOption(char *val, char *selectedVal, char *label)
 /* For rolling our own select without having to build conditional arrays/lists. */
 {
 printf("<OPTION VALUE='%s'%s>%s\n", val, (sameString(selectedVal, val) ? " SELECTED" : ""), label);
 }
 
 
 static struct composite *getCompositeList(char *db, char *hubName, struct hash *nameHash)
 {
 struct composite *compositeList = NULL;
+FILE *f;
 
-if (hubName != NULL)
+if ((hubName != NULL) && ((f = fopen(hubName, "r")) != NULL))
     {
+    fclose(f);
     // read hub to find names of composites and add them to compositeList
     struct trackDb *tdbList = trackDbFromRa(hubName, NULL);
     struct trackDb *tdb, *tdbNext;
     struct composite *composite = NULL;
     struct track *track = NULL;
 
     for(tdb = tdbList; tdb; tdb = tdbNext)
         {
         hashAdd(nameHash, tdb->track, tdb);
         tdbNext = tdb->next;
         trackDbFieldsFromSettings(tdb);
         if (trackDbSetting(tdb, "compositeTrack"))
             {
             AllocVar(composite);
             slAddHead(&compositeList, composite);
             composite->name = tdb->track;
             composite->shortLabel = tdb->shortLabel;
+            composite->longLabel = tdb->shortLabel;
             }
         else
             {
             if (composite == NULL)
                 errAbort("track not in composite");
             AllocVar(track);
             track->name = tdb->track;
             track->shortLabel = tdb->shortLabel;
+            track->longLabel = tdb->shortLabel;
             slAddHead(&composite->trackList, track);
             }
         }
     }
 
 return compositeList;
 }
 
 static char *getSqlBigWig(char *db, struct trackDb *tdb)
 {
 struct sqlConnection *conn = hAllocConn(db);
 
 char buffer[4096];
 
 safef(buffer, sizeof buffer, "NOSQLINJ select fileName from %s", tdb->table);
@@ -235,31 +239,30 @@
 fprintf(f, "\tcolor %d,%d,%d\n", (color >> 16) & 0xff,(color >> 8) & 0xff,color & 0xff);
 fprintf(f, "\n");
 }
 
 static void outComposite(FILE *f, struct composite *composite)
 {
 char *parent = composite->name;
 char *shortLabel = composite->shortLabel;
 char *longLabel = composite->longLabel;
 fprintf(f,"track %s\n\
 shortLabel %s\n\
 compositeTrack on\n\
 aggregate none\n\
 longLabel %s\n\
 %s on\n\
-#container multiWig\n\
 type wig \n\
 visibility full\n\n", parent, shortLabel, longLabel, CUSTOM_COMPOSITE_SETTING);
 }
 
 static struct trackDb *findTrack(char *name, struct trackDb *fullTrackList)
 {
 struct trackDb *tdb;
 for (tdb = fullTrackList; tdb != NULL; tdb = tdb->next)
     {
     if (sameString(name, tdb->track))
         return tdb;            
     }
 errAbort("cannot find track");
 return NULL;
 }