src/hg/hgTrackUi/hgTrackUi.c 1.504

1.504 2009/10/16 00:34:30 angie
Added enhanced coloring options (user-requested) to hgTrackUi and implemented 3 out of 5 in hgTracks.
Index: src/hg/hgTrackUi/hgTrackUi.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTrackUi/hgTrackUi.c,v
retrieving revision 1.503
retrieving revision 1.504
diff -b -B -U 4 -r1.503 -r1.504
--- src/hg/hgTrackUi/hgTrackUi.c	28 Sep 2009 21:51:10 -0000	1.503
+++ src/hg/hgTrackUi/hgTrackUi.c	16 Oct 2009 00:34:30 -0000	1.504
@@ -2143,25 +2143,80 @@
 hFreeConn(&conn);
 }
 
 #ifdef USE_BAM
+static char *grayLabels[] =
+    { "alignment quality",
+      "NOT IMPL'D: base qualities",
+      "unpaired ends",
+    };
+static char *grayValues[] =
+    { BAM_GRAY_MODE_ALI_QUAL,
+      BAM_GRAY_MODE_BASE_QUAL,
+      BAM_GRAY_MODE_UNPAIRED,
+    };
+
+// When a child input of a radio set is changed, click its radio button:
+#define UPDATE_RADIO_FORMAT "%s=\"\
+    var inputs = document.getElementsByName('%s'); \
+    if (inputs) { \
+      for (var i=0; i < inputs.length; i++) { \
+        if (inputs[i].type == 'radio') { \
+          inputs[i].checked = (inputs[i].value == '%s'); \
+        } \
+      } \
+    }\""
+
 void bamUi(struct trackDb *tdb)
 /* BAM: short-read-oriented alignment file format. */
 {
-char cartVarName[512];
+char cartVarName[1024];
+boolean canPair = (trackDbSetting(tdb, BAM_PAIR_ENDS_BY_NAME) != NULL);
 puts("<BR>");
-if (trackDbSetting(tdb, "pairEndsByName") != NULL)
+if (canPair)
     {
     printf("<B>Attempt to join paired end reads by name:</B>\n");
-    safef(cartVarName, sizeof(cartVarName), "%s_pairEndsByName", tdb->tableName);
+    safef(cartVarName, sizeof(cartVarName), "%s_" BAM_PAIR_ENDS_BY_NAME, tdb->tableName);
     cartMakeCheckBox(cart, cartVarName, TRUE);
     puts("<BR>");
     }
 printf("<B>Minimum alignment quality:</B>\n");
-safef(cartVarName, sizeof(cartVarName), "%s_minAliQual", tdb->tableName);
-cartMakeIntVar(cart, cartVarName, 0, 4);
+safef(cartVarName, sizeof(cartVarName), "%s_" BAM_MIN_ALI_QUAL, tdb->tableName);
+cartMakeIntVar(cart, cartVarName,
+	       atoi(trackDbSettingOrDefault(tdb, BAM_MIN_ALI_QUAL, BAM_MIN_ALI_QUAL_DEFAULT)), 4);
 puts("<BR>");
 baseColorDrawOptDropDown(cart, tdb);
+printf("<BR>\n");
+printf("<B>Additional coloring modes:</B><BR>\n");
+safef(cartVarName, sizeof(cartVarName), "%s_" BAM_COLOR_MODE, tdb->tableName);
+char *selected = cartUsualString(cart, cartVarName,
+				 trackDbSettingOrDefault(tdb, BAM_COLOR_MODE, BAM_COLOR_MODE_DEFAULT));
+cgiMakeRadioButton(cartVarName, BAM_COLOR_MODE_STRAND, sameString(selected, BAM_COLOR_MODE_STRAND));
+printf("Color by strand (blue for +, red for -)<BR>\n");
+cgiMakeRadioButton(cartVarName, BAM_COLOR_MODE_GRAY, sameString(selected, BAM_COLOR_MODE_GRAY));
+printf("Use gray for\n");
+char cartVarName2[1024];
+safef(cartVarName2, sizeof(cartVarName2), "%s_" BAM_GRAY_MODE, tdb->tableName);
+int grayMenuSize = canPair ? ArraySize(grayLabels) : ArraySize(grayLabels)-1;
+char *sel2 = cartUsualString(cart, cartVarName2,
+			     trackDbSettingOrDefault(tdb, BAM_GRAY_MODE, BAM_GRAY_MODE_DEFAULT));
+char onChange[2048];
+safef(onChange, sizeof(onChange), UPDATE_RADIO_FORMAT,
+      "onChange", cartVarName, BAM_COLOR_MODE_GRAY);
+cgiMakeDropListFull(cartVarName2, grayLabels, grayValues, grayMenuSize, sel2, onChange);
+printf("<BR>\n");
+cgiMakeRadioButton(cartVarName, BAM_COLOR_MODE_TAG, sameString(selected, BAM_COLOR_MODE_TAG));
+printf("NOT IMPL'D: Use R,G,B colors specified in user-defined tag ");
+safef(cartVarName2, sizeof(cartVarName2), "%s_" BAM_COLOR_TAG, tdb->tableName);
+sel2 = cartUsualString(cart, cartVarName2,
+		       trackDbSettingOrDefault(tdb, BAM_COLOR_TAG, BAM_COLOR_TAG_DEFAULT));
+safef(onChange, sizeof(onChange), UPDATE_RADIO_FORMAT,
+      "onkeypress", cartVarName, BAM_COLOR_MODE_TAG);
+cgiMakeTextVarWithExtraHtml(cartVarName2, sel2, 30, onChange);
+printf("<BR>\n");
+cgiMakeRadioButton(cartVarName, BAM_COLOR_MODE_OFF, sameString(selected, BAM_COLOR_MODE_OFF));
+printf("No additional coloring<BR>\n");
+
 //TODO: include / exclude flags
 }
 #endif//def USE_BAM