75ffe3b6a127bec72fdb44290af9b98a14eb79dc kate Fri Jan 11 15:27:03 2019 -0800 Partial implementation of 'centerLabelsPack' setting, to suppress center labels in pack mode (when setting is 'off'). This checkin suppresses center labels but doesn't show left labels. refs #22739 diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c index 5b44bb9..fe966f8 100644 --- src/hg/hgTracks/simpleTracks.c +++ src/hg/hgTracks/simpleTracks.c @@ -911,61 +911,84 @@ vis = tvFull; else vis = tvPack; } else if (vis == tvFull || vis == tvPack || vis == tvSquish) vis = tvDense; dyStringPrintf(dy, "&%s=%s", encodedMapName, hStringFromTv(vis)); freeMem(encodedMapName); } } return dy; } boolean isWithCenterLabels(struct track *track) /* Cases: only TRUE when global withCenterLabels is TRUE - * If track->tdb has a centerLabelDense setting, go with it. -// * If composite child then no center labels in dense mode. */ + * If track has a centerLabelDense setting 'on', then composite child has + * center labels in dense mode. + * If track has centerLabelsPack setting 'off', then composite child has no + * center labels in pack mode (instead, has left short label. + * NOTE: if there are labels, then this should be used with labelOnFeature setting. + */ { +if (!track) + return FALSE; if (!withCenterLabels) - { return FALSE; - } -if (track != NULL) - { + +/* NOTE: this feature may be broken. Only used in affyTxnPhase2 track */ char *centerLabelsDense = trackDbSetting(track->tdb, "centerLabelsDense"); - if (centerLabelsDense) - { - return sameWord(centerLabelsDense, "on"); - } - } -return withCenterLabels; +if (centerLabelsDense && sameWord(centerLabelsDense, "on")) + return TRUE; + +char *centerLabelsPack = trackDbSetting(track->tdb, "centerLabelsPack"); +if (centerLabelsPack && sameWord(centerLabelsPack, "off")) + return FALSE; +return TRUE; } boolean isCenterLabelConditionallySeen(struct track *track) // returns FALSE if track and prevTrack have same parent, and are both dense subtracks { if (isCenterLabelConditional(track)) { if (track->prevTrack && track->parent == track->prevTrack->parent && isCenterLabelConditional(track->prevTrack)) return FALSE; } return isWithCenterLabels(track); } +boolean isCenterLabelConditional(struct track *track) +/* Dense subtracks and pack subtracks (when centerLabelsPack off set) have + * show center labels depending on vis of previous track */ +{ +if (!tdbIsCompositeChild((track)->tdb)) + return FALSE; +enum trackVisibility vis = limitVisibility(track); +if (vis == tvFull) + return FALSE; +if (vis == tvDense) + return TRUE; +/* pack or squish */ +char *centerLabelsPack = trackDbSetting(track->tdb, "centerLabelsPack"); +if (centerLabelsPack) + return !sameWord(centerLabelsPack, "off"); +return FALSE; +} + void mapStatusMessage(char *format, ...) /* Write out stuff that will cause a status message to * appear when the mouse is over this box. */ { va_list(args); va_start(args, format); hPrintf(" TITLE=\""); hvPrintf(format, args); hPutc('"'); va_end(args); } void mapBoxReinvoke(struct hvGfx *hvg, int x, int y, int width, int height, struct track *track, boolean toggle, char *chrom, long start, long end, char *message, char *extra)