src/hg/lib/customFactory.c 1.96

1.96 2009/02/10 22:12:08 kent
Creating bigBed type custom tracks.
Index: src/hg/lib/customFactory.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/lib/customFactory.c,v
retrieving revision 1.95
retrieving revision 1.96
diff -b -B -U 4 -r1.95 -r1.96
--- src/hg/lib/customFactory.c	9 Feb 2009 19:12:35 -0000	1.95
+++ src/hg/lib/customFactory.c	10 Feb 2009 22:12:08 -0000	1.96
@@ -1508,8 +1508,41 @@
     bigWigRecognizer,
     bigWigLoader,
     };
 
+/*** Big Bed Factory - for big client-side BED tracks ***/
+
+static boolean bigBedRecognizer(struct customFactory *fac,
+	struct customPp *cpp, char *type, 
+    	struct customTrack *track)
+/* Return TRUE if looks like we're handling a wig track */
+{
+return (sameType(type, "bigBed"));
+}
+
+static struct customTrack *bigBedLoader(struct customFactory *fac,  
+	struct hash *chromHash,
+    	struct customPp *cpp, struct customTrack *track, boolean dbRequested)
+/* Load up big bed data until get next track line. */
+{
+/* Not much to this.  A bigBed has nothing here but a track line. */
+struct hash *settings = track->tdb->settingsHash;
+char *dataUrl = hashFindVal(settings, "dataUrl");
+if (dataUrl == NULL)
+    errAbort("Missing dataUrl setting from track of type=bigBed");
+return track;
+}
+
+static struct customFactory bigBedFactory = 
+/* Factory for bigBed tracks */
+    {
+    NULL,
+    "bigBed",
+    bigBedRecognizer,
+    bigBedLoader,
+    };
+
+
 /*** Framework for custom factories. ***/
 
 static struct customFactory *factoryList;
 
@@ -1528,8 +1561,9 @@
     slAddTail(&factoryList, &pslFactory);
     slAddTail(&factoryList, &gtfFactory);
     slAddTail(&factoryList, &gffFactory);
     slAddTail(&factoryList, &bedFactory);
+    slAddTail(&factoryList, &bigBedFactory);
     slAddTail(&factoryList, &bedGraphFactory);
     slAddTail(&factoryList, &microarrayFactory);
     slAddTail(&factoryList, &coloredExonFactory);
     slAddTail(&factoryList, &encodePeakFactory);