src/hg/hgTracks/bamTrack.c 1.32
1.32 2010/05/27 21:13:24 angie
When building without USE_BAM=1, install a dummy track handler for bam that prints a message in place of track items, so we don't pop up an annoying 'No track handler' warnbox.
Index: src/hg/hgTracks/bamTrack.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTracks/bamTrack.c,v
retrieving revision 1.31
retrieving revision 1.32
diff -b -B -U 4 -r1.31 -r1.32
--- src/hg/hgTracks/bamTrack.c 11 May 2010 01:43:26 -0000 1.31
+++ src/hg/hgTracks/bamTrack.c 27 May 2010 21:13:24 -0000 1.32
@@ -689,5 +689,63 @@
track->nextPrevExon = NULL;
track->colorShades = shadesOfGray;
}
-#endif /* USE_BAM */
+#else /* no USE_BAM */
+
+#include "common.h"
+#include "hgTracks.h"
+// If code was not built with USE_BAM=1, but there are bam tracks, display a message
+// in place of the tracks (instead of annoying "No track handler" warning messages).
+
+void drawUseBamWarning(struct track *tg, int seqStart, int seqEnd, struct hvGfx *hvg,
+ int xOff, int yOff, int width, MgFont *font, Color color,
+ enum trackVisibility vis)
+/* Draw a message saying that the code needs to be built with USE_BAM=1. */
+{
+char message[512];
+safef(message, sizeof(message),
+ "Get samtools(.sourceforge.net) and recompile kent/src with USE_BAM=1");
+Color yellow = hvGfxFindRgb(hvg, &undefinedYellowColor);
+hvGfxBox(hvg, xOff, yOff, width, tg->heightPer, yellow);
+hvGfxTextCentered(hvg, xOff, yOff, width, tg->heightPer, MG_BLACK, font, message);
+}
+
+static void dontLoadItems(struct track *tg)
+/* Don't load anything, just draw warning. */
+{
+return;
+}
+
+void bamMethods(struct track *track)
+/* Methods for BAM alignment files. */
+{
+linkedFeaturesMethods(track);
+track->loadItems = dontLoadItems;
+track->drawItems = drawUseBamWarning;
+// Following few lines taken from hgTracks.c getTrackList, because this is called earlier
+// but needs to know track vis from tdb+cart:
+char *s = cartOptionalString(cart, track->track);
+if (cgiOptionalString("hideTracks"))
+ {
+ s = cgiOptionalString(track->track);
+ if (s != NULL && (hTvFromString(s) != track->tdb->visibility))
+ {
+ cartSetString(cart, track->track, s);
+ }
+ }
+// end stuff copied from hgTracks.c
+enum trackVisibility trackVis = track->tdb->visibility;
+if (s != NULL)
+ trackVis = hTvFromString(s);
+if (trackVis != tvHide)
+ {
+ track->visibility = tvDense;
+ track->limitedVis = tvDense;
+ track->limitedVisSet = TRUE;
+ }
+track->nextItemButtonable = track->nextExonButtonable = FALSE;
+track->nextPrevItem = NULL;
+track->nextPrevExon = NULL;
+}
+
+#endif /* no USE_BAM */