77dc06c4bdc5e10f5d2705a51300ec028a7d785f tdreszer Fri Oct 1 10:51:48 2010 -0700 FindTracks now finds superTracks (Advanced only) and hgTrackUi now does superTrack reshaping when children have vis changed diff --git src/hg/hgTracks/imageV2.c src/hg/hgTracks/imageV2.c index 64471d2..9543b2f 100644 --- src/hg/hgTracks/imageV2.c +++ src/hg/hgTracks/imageV2.c @@ -103,6 +103,47 @@ } } +// TODO: Move to trackDb.h and trackDbCustom.c +enum kindOfParent { + kopChildless = 0, + kopFolder = 1, + kopComposite = 2, + kopMultiTrack = 3, + kopCompositeView = 4 +}; +enum kindOfChild { + kocOrphan = 0, + kocFolderContent = 1, + kocCompositeChild = 2, + kocMultiTrackChild = 3 +}; + +enum kindOfParent tdbKindOfParent(struct trackDb *tdb) +{ +enum kindOfParent kindOfParent = kopChildless; +if (tdbIsFolder(tdb)) + kindOfParent = kopFolder; +else if (tdbIsComposite(tdb)) + kindOfParent = kopComposite; +else if (tdbIsMultiTrack(tdb)) + kindOfParent = kopMultiTrack; +else if (tdbIsCompositeView(tdb)) // NOTE: This should not be needed in js + kindOfParent = kopCompositeView; +return kindOfParent; +} + +enum kindOfChild tdbKindOfChild(struct trackDb *tdb) +{ +enum kindOfChild kindOfChild = kocOrphan; +if (tdbIsFolderContent(tdb)) + kindOfChild = kocFolderContent; +else if (tdbIsCompositeChild(tdb)) + kindOfChild = kocCompositeChild; +else if (tdbIsMultiTrackChild(tdb)) + kindOfChild = kocMultiTrackChild; +return kindOfChild; +} + ///////////////////////// // JSON support. Eventually the whole imgTbl could be written out as JSON void jsonTdbSettingsBuild(struct dyString **jsonTdbSettingsString, struct track *track) @@ -116,30 +157,38 @@ } else dyStringAppend(*jsonTdbSettingsString, ",\n"); + +// track name and type dyStringPrintf(*jsonTdbSettingsString, "\t%s: {", track->track); -if (tdbIsSuperTrackChild(track->tdb)) - { - dyStringPrintf(*jsonTdbSettingsString, "\n\t\tparentTrack: '%s',", track->tdb->parent->track); - dyStringPrintf(*jsonTdbSettingsString, "\n\t\tparentLabel: '%s',", track->tdb->parent->shortLabel); - } -else if (tdbIsContainerChild(track->tdb)) +dyStringPrintf(*jsonTdbSettingsString, "\n\t\ttype: '%s',", track->tdb->type); + +// Tell which kind of parent and which kind of child +enum kindOfParent kindOfParent = tdbKindOfParent(track->tdb); +enum kindOfChild kindOfChild = tdbKindOfChild(track->tdb); +dyStringPrintf(*jsonTdbSettingsString, "\n\t\tkindOfParent: %d,\n\t\tkindOfChild: %d,",kindOfParent,kindOfChild); + +// Tell something about the parent and/or children +if (kindOfChild != kocOrphan) { - struct trackDb *parentTdb = tdbGetContainer(track->tdb); - dyStringPrintf(*jsonTdbSettingsString, "\n\t\tparentTrack: '%s',", parentTdb->track); - dyStringPrintf(*jsonTdbSettingsString, "\n\t\tparentLabel: '%s',", parentTdb->shortLabel); - if (!track->canPack) + struct trackDb *parentTdb = (kindOfChild == kocFolderContent ? track->tdb->parent :tdbGetContainer(track->tdb)); + + dyStringPrintf(*jsonTdbSettingsString, "\n\t\tparentTrack: '%s',\n\t\tparentLabel: '%s',", + parentTdb->track, parentTdb->shortLabel); + if (kindOfChild != kocFolderContent && !track->canPack) { dyStringPrintf(*jsonTdbSettingsString, "\n\t\tshouldPack: 0,"); // default vis is full, but pack is an option track->canPack = parentTdb->canPack; } } -dyStringPrintf(*jsonTdbSettingsString, "\n\t\tisSubtrack: %d,",tdbIsContainerChild(track->tdb)?1:0); dyStringPrintf(*jsonTdbSettingsString, "\n\t\thasChildren: %d,", slCount(track->tdb->subtracks)); -dyStringPrintf(*jsonTdbSettingsString, "\n\t\ttype: '%s',", track->tdb->type); + +// Now some miscellaneous tidbids if (sameString(trackDbSettingClosestToHomeOrDefault(track->tdb, "configureByPopup", "on"), "off")) dyStringPrintf(*jsonTdbSettingsString, "\n\t\tconfigureByPopup: false,"); if (sameWord(track->tdb->type, "remote") && trackDbSetting(track->tdb, "url") != NULL) dyStringPrintf(*jsonTdbSettingsString, "\n\t\turl: '%s',", trackDbSetting(track->tdb, "url")); + +// Close with some standard vars dyStringPrintf(*jsonTdbSettingsString, "\n\t\tshortLabel: '%s',\n\t\tlongLabel: '%s',\n\t\tcanPack: %d,\n\t\tvisibility: %d\n\t}", javaScriptLiteralEncode(track->shortLabel), javaScriptLiteralEncode(track->longLabel), track->canPack, track->limitedVis); }