85bd10da37f403d155c4434d90edcd146e682948 braney Mon May 15 13:03:32 2017 -0700 add sorting to composite wiggles. diff --git src/hg/hgTracks/imageV2.c src/hg/hgTracks/imageV2.c index 3f85fdc..c9a2631 100644 --- src/hg/hgTracks/imageV2.c +++ src/hg/hgTracks/imageV2.c @@ -13,50 +13,53 @@ #include "imageV2.h" #include "hgTracks.h" #include "hgConfig.h" #include "regexHelper.h" #include "customComposite.h" // Note: when right-click View image (or pdf output) then theImgBox==NULL, so it will be rendered as a single simple image struct imgBox *theImgBox = NULL; // Make this global for now to avoid huge rewrite struct imgTrack *curImgTrack = NULL; // Make this global for now to avoid huge rewrite ///////////////////////// // FLAT TRACKS // A simplistic way of flattening the track list before building the image // NOTE: Strategy is NOT to use imgBox->imgTracks, since this should be independednt of imageV2 ///////////////////////// -void flatTracksAdd(struct flatTracks **flatTracks,struct track *track,struct cart *cart) +void flatTracksAdd(struct flatTracks **flatTracks,struct track *track,struct cart *cart, struct slName *orderedWiggles) // Adds one track into the flatTracks list { struct flatTracks *flatTrack; AllocVar(flatTrack); flatTrack->track = track; char var[256]; // The whole reason to do this is to reorder tracks/subtracks in the image! safef(var,sizeof(var),"%s_%s",track->tdb->track,IMG_ORDER_VAR); flatTrack->order = cartUsualInt(cart, var,IMG_ANYORDER); if (flatTrack->order >= IMG_ORDERTOP) { cartRemove(cart,var); flatTrack->order = IMG_ANYORDER; } static int topOrder = IMG_ORDERTOP; // keep track of the order added to top of image static int lastOrder = IMG_ORDEREND; // keep track of the order added and beyond end if ( flatTrack->order == IMG_ANYORDER) { if (track->customTrack) flatTrack->order = ++topOrder; // Custom tracks go to top + int index; + if ((orderedWiggles != NULL) && ((index = slNameFindIx(orderedWiggles, track->track)) != -1)) + flatTrack->order = topOrder + index + 1; else flatTrack->order = ++lastOrder; } slAddHead(flatTracks,flatTrack); } int flatTracksCmp(const void *va, const void *vb) // Compare to sort on flatTrack->order { const struct flatTracks *a = *((struct flatTracks **)va); const struct flatTracks *b = *((struct flatTracks **)vb); if (a->order == b->order) return tgCmpPriority(&(a->track),&(b->track)); return (a->order - b->order);