src/hg/lib/hui.c 1.205
1.205 2009/05/27 21:36:17 tdreszer
Support for composite level controls to update view and subtrack level. Support for blocking view level controls. Fix for single dimension matrix.
Index: src/hg/lib/hui.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/lib/hui.c,v
retrieving revision 1.204
retrieving revision 1.205
diff -b -B -U 4 -r1.204 -r1.205
--- src/hg/lib/hui.c 24 May 2009 09:24:14 -0000 1.204
+++ src/hg/lib/hui.c 27 May 2009 21:36:17 -0000 1.205
@@ -3213,8 +3213,15 @@
printf("<p>");
return boxed;
}
+static void cfgLinkToDependentCfgs(struct trackDb *tdb,char *prefix)
+/* Link composite or view level controls to all associateled lower level controls */
+{
+if(tdbIsComposite(tdb))
+ printf("<script type='text/javascript'>compositeCfgRegisterOnchangeAction(\"%s\")</script>\n",prefix);
+}
+
static void cfgEndBox(boolean boxed)
/* Handle end of box and title for individual track type settings */
{
if (boxed)
@@ -4459,8 +4466,11 @@
char configurable[membersOfView->count];
memset(configurable,cfgNone,sizeof(configurable));
boolean makeCfgRows = FALSE;
struct trackDb **matchedSubtracks = needMem(sizeof(struct trackDb *)*membersOfView->count);
+char *setting = trackDbSetting(parentTdb,"settingsByView");
+boolean blockCfgs = (setting != NULL && (sameWord(setting,"off") || sameWord(setting,"disabled") || sameWord(setting,"false")));
+
for (ix = 0; ix < membersOfView->count; ix++)
{
for (subtrack = parentTdb->subtracks; subtrack != NULL; subtrack = subtrack->next)
{
@@ -4469,12 +4479,14 @@
continue;
if(differentString(stView,membersOfView->names[ix]))
continue;
matchedSubtracks[ix] = subtrack;
+ if(!blockCfgs)
+ {
configurable[ix] = (char)cfgTypeFromTdb(subtrack,TRUE); // Warns if not multi-view compatible
- // Need to find maximum wig range
if(configurable[ix] != cfgNone)
makeCfgRows = TRUE;
+ }
break;
}
}
@@ -4533,9 +4545,9 @@
safef(objName, sizeof(objName), "%s.%s", parentTdb->tableName,membersOfView->names[ix]);
if(configurable[ix] != cfgNone)
{
cfgByCfgType(configurable[ix],db,cart,matchedSubtracks[ix],objName,membersOfView->values[ix],TRUE);
- printf("<script type='text/javascript'>compositeCfgRegisterOnchangeAction(\"%s\")</script>\n",objName);
+ cfgLinkToDependentCfgs(parentTdb,objName);
}
}
}
}
@@ -4696,9 +4708,9 @@
if(dimensionY)
printf("<TH align='right' WIDTH=\"100\"><EM><B>%s</EM></B>:</TH>", dimensionX->title);
for (ixX = 0; ixX < dimensionX->count; ixX++)
{
- if(tdbsX[ixX] != NULL)
+ if(tdbsX[ixX] != NULL || dimensionX == NULL)
{
char *label = replaceChars(dimensionX->values[ixX]," (","<BR>(");//
printf("<TH WIDTH=\"100\">%s</TH>",labelWithVocabLink(parentTdb,tdbsX[ixX],dimensionX->tag,label));
freeMem(label);
@@ -4719,9 +4731,9 @@
{
printf("<TR ALIGN=CENTER BGCOLOR=\"%s\"><TH ALIGN=RIGHT><EM><B>%s</EM></B></TH><TD> </TD>",COLOR_BG_ALTDEFAULT, dimensionY->title);
for (ixX = 0; ixX < dimensionX->count; ixX++) // Special row of +- +- +-
{
- if(tdbsX[ixX] != NULL)
+ if(tdbsX[ixX] != NULL || dimensionX == NULL)
{
puts("<TD>");
safef(objName, sizeof(objName), "plus_%s_all", dimensionX->names[ixX]);
BUTTON_PLUS_ONE( objName,dimensionX->names[ixX]);
@@ -4734,9 +4746,9 @@
// Now the Y by X matrix
for (ixY = 0; ixY < sizeOfY; ixY++)
{
- if(tdbsY[ixY] != NULL)
+ if(tdbsY[ixY] != NULL || dimensionY == NULL)
{
assert(!dimensionY || ixY < dimensionY->count);
printf("<TR ALIGN=CENTER BGCOLOR=\"#FFF9D2\">");
if(dimensionY == NULL) // 'All' buttons go here if no Y dimension
@@ -4760,9 +4772,9 @@
puts("</TD>");
}
for (ixX = 0; ixX < sizeOfX; ixX++)
{
- if(tdbsX[ixX] != NULL)
+ if(tdbsX[ixX] != NULL || dimensionX == NULL)
{
assert(!dimensionX || ixX < dimensionX->count);
if(dimensionX && ixX == dimensionX->count)
break;
@@ -4825,13 +4837,10 @@
puts("</TH>");
cntZ++;
}
}
- while((cntZ % sizeOfX) > 0) // fill in the rest of the row
- {
- printf("<TH> </TH>");
- cntZ++;
- }
+ if((cntZ % sizeOfX) > 0)
+ printf("<TH colspan=%d> </TH>",sizeOfX);
}
puts("</TD></TR></TABLE>");
subgroupMembersFree(&dimensionX);
subgroupMembersFree(&dimensionY);
@@ -5035,8 +5044,10 @@
compositeUiAllSubtracks(db, cart, tdb, primarySubtrack);
else
compositeUiSelectedSubtracks(db, cart, tdb, primarySubtrack);
+cfgLinkToDependentCfgs(tdb,tdb->tableName);
+
if (primarySubtrack == NULL) // This is set for tableBrowser but not hgTrackUi
{
if (slCount(tdb->subtracks) > 5)
{