d0306b151fe7bc779daa4a00f4cf5d4c3896d90f
giardine
  Mon Oct 4 09:17:12 2010 -0700
Edits based on code review, and fix for pgSnp custom tracks
diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c
index 78745ef..51963f5 100644
--- src/hg/hgTracks/simpleTracks.c
+++ src/hg/hgTracks/simpleTracks.c
@@ -9502,21 +9502,16 @@
 /* Load up pgSnp (personal genome SNP) type tracks */
 {
 char query[256];
-struct sqlConnection *conn = hAllocConn(database);
-safef(query, sizeof(query), "select * from %s where chrom = '%s' and chromStart < %d and chromEnd > %d", tg->table, chromName, winEnd, winStart);
-tg->items = pgSnpLoadByQuery(conn, query);
-/* base coloring/display decision on count of items */
-tg->customInt = slCount(tg->items);
-hFreeConn(&conn);
-}
-
-void loadPgSnpCt(struct track *tg)
-/* Load up pgSnp (personal genome SNP) type custom tracks */
-{
-char query[256];
-struct sqlConnection *conn = hAllocConn(CUSTOM_TRASH);
 struct customTrack *ct = tg->customPt;
-char *table = ct->dbTableName;
+char *table = tg->table;
+struct sqlConnection *conn; 
+if (ct == NULL) 
+    conn = hAllocConn(database);
+else 
+    {
+    conn = hAllocConn(CUSTOM_TRASH);
+    table = ct->dbTableName;
+    }
 safef(query, sizeof(query), "select * from %s where chrom = '%s' and chromStart < %d and chromEnd > %d", table, chromName, winEnd, winStart);
 tg->items = pgSnpLoadByQuery(conn, query);
 /* base coloring/display decision on count of items */
@@ -10444,29 +10439,6 @@
 return bedLoadN(row+rowOffset, fieldCount);
 }
 
-void loadBedDetailCtSimple(struct track *tg)
-/* Load bedDetails custom track as bed 4-7, other fields are for hgc clicks */
-{
-struct bed *list = NULL, *el;
-struct sqlResult *sr;
-char **row;
-int rowOffset = 0;
-struct sqlConnection *conn = hAllocConn(CUSTOM_TRASH);
-struct customTrack *ct = tg->customPt;
-char *table = ct->dbTableName;
-int fieldCount = ct->fieldCount - 2; /* field count of bed part */
-sr = hRangeQuery(conn, table, chromName, winStart, winEnd, NULL, &rowOffset);
-while ((row = sqlNextRow(sr)) != NULL)
-    {
-    el = bedDetailLoadAsBed(row, rowOffset, fieldCount);
-    slAddHead(&list, el);
-    }
-slReverse(&list);
-sqlFreeResult(&sr);
-tg->items = list;
-tg->bedSize = fieldCount;
-}
-
 void loadBedDetailSimple(struct track *tg)
 /* Load bedDetails track as bed 4-7, other fields are for hgc clicks */
 {
@@ -10474,42 +10446,28 @@
 struct sqlResult *sr;
 char **row;
 int rowOffset = 0;
-struct sqlConnection *conn = hAllocConn(database);
+struct customTrack *ct = tg->customPt;
+struct sqlConnection *conn; 
 char *table = tg->table;
 int bedSize = tg->bedSize; /* count of fields in bed part */
-sr = hRangeQuery(conn, table, chromName, winStart, winEnd, NULL, &rowOffset);
-while ((row = sqlNextRow(sr)) != NULL)
-    {
-    el = bedDetailLoadAsBed(row, rowOffset, bedSize);
-    slAddHead(&list, el);
-    }
-slReverse(&list);
-sqlFreeResult(&sr);
-tg->items = list;
-}
 
-void loadBedDetailCt(struct track *tg) 
-/* Load bedDetails type track as linked features, other fields are for hgc clicks */
+if (ct == NULL)
+    conn = hAllocConn(database);
+else 
 {
-struct linkedFeatures *list = NULL, *el;
-struct sqlResult *sr;
-char **row;
-int rowOffset = 0;
-struct sqlConnection *conn = hAllocConn(CUSTOM_TRASH);
-struct customTrack *ct = tg->customPt;
-char *table = ct->dbTableName;
-int fieldCount = ct->fieldCount - 2; /* field count of bed part */
-boolean useItemRgb = bedItemRgb(ct->tdb);
+    conn = hAllocConn(CUSTOM_TRASH);
+    table = ct->dbTableName;
+    tg->bedSize = ct->fieldCount - 2; /* field count of bed part */
+    }
 sr = hRangeQuery(conn, table, chromName, winStart, winEnd, NULL, &rowOffset);
 while ((row = sqlNextRow(sr)) != NULL)
     {
-    el = bedDetailLoadAsLf(row, rowOffset, fieldCount, useItemRgb);
+    el = bedDetailLoadAsBed(row, rowOffset, bedSize);
     slAddHead(&list, el);
     }
 slReverse(&list);
 sqlFreeResult(&sr);
 tg->items = list;
-//tg->bedSize = fieldCount;
 }
 
 void loadBedDetail(struct track *tg)
@@ -10519,10 +10477,21 @@
 struct sqlResult *sr;
 char **row;
 int rowOffset = 0;
-struct sqlConnection *conn = hAllocConn(database);
+struct sqlConnection *conn; // = hAllocConn(database);
 char *table = tg->table;
 int bedSize = tg->bedSize; /* field count of bed part */
 boolean useItemRgb = bedItemRgb(tg->tdb);
+struct customTrack *ct = tg->customPt;
+
+if (ct == NULL)
+    conn = hAllocConn(database);
+else 
+    {
+    conn = hAllocConn(CUSTOM_TRASH);
+    table = ct->dbTableName;
+    bedSize = ct->fieldCount - 2;
+    useItemRgb = bedItemRgb(ct->tdb);
+    }
 sr = hRangeQuery(conn, table, chromName, winStart, winEnd, NULL, &rowOffset);
 while ((row = sqlNextRow(sr)) != NULL)
     {
@@ -10603,9 +10572,9 @@
 char *itemName = myItem->name;
 static char buf[256];
 if (strlen(itemName) > 0)
-  sprintf(buf, "%s %s", ctFileName, itemName);
+  safef(buf, sizeof(buf), "%s %s", ctFileName, itemName);
 else
-  sprintf(buf, "%s NoItemName", ctFileName);
+  safef(buf, sizeof(buf), "%s NoItemName", ctFileName);
 return buf;
 }
 
@@ -10615,12 +10584,12 @@
 if (ct != NULL && ct->fieldCount >= (9+2)) /* at least bed9 */
     {
     linkedFeaturesMethods(tg);
-    tg->loadItems = loadBedDetailCt;
+    tg->loadItems = loadBedDetail;
     }
 else  /* when in doubt set up as simple bed */
     { 
     bedMethods(tg);
-    tg->loadItems = loadBedDetailCtSimple;
+    tg->loadItems = loadBedDetailSimple;
     }
 tg->nextItemButtonable = TRUE;
 tg->customPt = ct;
@@ -10632,8 +10601,6 @@
 {
 /* start with the pgSnp methods */
 pgSnpMethods(tg);
-/* loader must access CUSTOM_TRASH */
-tg->loadItems = loadPgSnpCt;
 tg->mapItemName = pgSnpCtMapItemName;
 tg->canPack = TRUE;
 }