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; }