8a6bf192d6c474938510f746fb924393ce236295
braney
Wed Sep 13 17:58:23 2017 -0700
make visible tracks in hgCollection follow imgOrd in cart. Put
collections information in AJAX
diff --git src/hg/hgCollection/hgCollection.c src/hg/hgCollection/hgCollection.c
index 4ab61dd..9b4b37b 100644
--- src/hg/hgCollection/hgCollection.c
+++ src/hg/hgCollection/hgCollection.c
@@ -35,30 +35,37 @@
char *excludeVars[] = {"Submit", "submit", "hgva_startQuery", "jsonp", NULL,};
struct track
{
struct track *next;
struct track *trackList;
struct trackDb *tdb;
char *name;
char *shortLabel;
char *longLabel;
char *visibility;
unsigned long color;
char *viewFunc;
};
+struct trackDbRef
+{
+struct trackDbRef *next;
+struct trackDb *tdb;
+int order;
+};
+
char *getString(char **input)
// grab a quoted string out of text blob
{
char *ptr = *input;
if (*ptr != '"')
errAbort("string must start with \"");
ptr++;
char *ret = ptr;
for(; *ptr != '"'; ptr++)
;
*ptr = 0;
ptr++;
if (*ptr == ',')
@@ -231,44 +238,83 @@
return FALSE;
char *cartVis = cartOptionalString(cart, tdb->parent->track);
boolean vis;
if (cartVis != NULL)
vis = differentString(cartVis, "hide");
else if (tdbIsSuperTrack(tdb->parent))
vis = tdb->parent->isShow;
else
vis = tdb->parent->visibility != tvHide;
return vis;
}
-void addVisibleTracks()
-// add the visible tracks table rows
+void checkForVisible(struct trackDbRef **list, struct trackDb *tdb)
+/* Walk the trackDb hierarchy looking for visible leaf tracks. */
{
-jsInlineF("
");
-jsInlineF("- %s", "visibile", "Visible Tracks");
-jsInlineF("
");
-struct trackDb *tdb;
-for(tdb = fullTrackList; tdb; tdb = tdb->next)
+struct trackDb *subTdb;
+char buffer[4096];
+
+if (tdb->subtracks)
+ {
+ for(subTdb = tdb->subtracks; subTdb; subTdb = subTdb->next)
+ checkForVisible(list, subTdb);
+ }
+else
{
if (isParentVisible(tdb) && isSubtrackVisible(tdb))
{
- printGroup("visible", tdb, FALSE, FALSE);
+ struct trackDbRef *tdbRef;
+ AllocVar(tdbRef);
+ tdbRef->tdb = tdb;
+ slAddHead(list, tdbRef);
+ safef(buffer, sizeof buffer, "%s_imgOrd", tdb->track);
+
+ tdbRef->order = cartUsualInt(cart, buffer, 0);
+ }
+ }
}
+
+int tdbRefCompare (const void *va, const void *vb)
+// Compare to sort on imgTrack->order.
+{
+const struct trackDbRef *a = *((struct trackDbRef **)va);
+const struct trackDbRef *b = *((struct trackDbRef **)vb);
+return (a->order - b->order);
+}
+
+void addVisibleTracks()
+// add the visible tracks table rows.
+{
+struct trackDb *tdb;
+struct trackDbRef *tdbRefList = NULL, *tdbRef;
+//checkForVisible(fullTrackList);
+for(tdb = fullTrackList; tdb; tdb = tdb->next)
+ {
+ checkForVisible(&tdbRefList, tdb);
}
+
+slSort(&tdbRefList, tdbRefCompare);
+
+jsInlineF("");
+jsInlineF("- %s", "visibile", "Visible Tracks");
+jsInlineF("
");
+for(tdbRef = tdbRefList; tdbRef; tdbRef = tdbRef->next)
+ printGroup("visible", tdbRef->tdb, FALSE, FALSE);
+
jsInlineF("
");
jsInlineF(" ");
jsInlineF("
");
}
void doTable()
// output the tree table
{
char *hubName = hubNameFromUrl(getHubName(database));
struct grp *curGroup;
for(curGroup = fullGroupList; curGroup; curGroup = curGroup->next)
{
if ((hubName != NULL) && sameString(curGroup->name, hubName))
break;
}