src/hg/lib/hui.c 1.236

1.236 2009/09/08 21:09:23 tdreszer
Fixed configurable subtracks to not depend upon subgroup/view membership
Index: src/hg/lib/hui.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/lib/hui.c,v
retrieving revision 1.235
retrieving revision 1.236
diff -b -B -U 4 -r1.235 -r1.236
--- src/hg/lib/hui.c	4 Sep 2009 23:42:37 -0000	1.235
+++ src/hg/lib/hui.c	8 Sep 2009 21:09:23 -0000	1.236
@@ -2687,9 +2687,9 @@
             printf("<OPTION%s>%s</OPTION>\n",(filterBy->slChoices != NULL && slNameInList(filterBy->slChoices,slValue->name)?" SELECTED":""),slValue->name);
         }
     }
     // The following is needed to make msie scroll to selected option.
-    printf("<script type='text/javascript'>onload=function(){ $( 'select[name^=%s.filterBy.]' ).children('option[selected]').each( function(i) { this.selected=true; }); }</script>\n",tdb->tableName);
+    printf("<script type='text/javascript'>onload=function(){ if( $.browser.msie ) { $(\"select[name^='%s.filterBy.']\").children('option[selected]').each( function(i) { $(this).attr('selected',true); }); }}</script>\n",tdb->tableName);
 puts("</TR></TABLE>");
 
 return;
 }
@@ -2955,8 +2955,15 @@
     }
 return date;
 }
 
+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 compositeUiSubtracks(char *db, struct cart *cart, struct trackDb *parentTdb,
                  boolean selectedOnly, char *primarySubtrack)
 /* Show checkboxes for subtracks. */
 {
@@ -2967,8 +2974,9 @@
 char *words[5];
 char *colors[2]   = { COLOR_BG_DEFAULT,
                       COLOR_BG_ALTDEFAULT };
 int colorIx = COLOR_BG_DEFAULT_IX; // Start with non-default allows alternation
+boolean dependentCfgsNeedBinding = FALSE;
 
 // Look for dividers, heirarchy, dimensions, sort and dragAndDrop!
 char **lastDivide = NULL;
 dividers_t *dividers = dividersSettingGet(parentTdb);
@@ -3201,15 +3209,22 @@
             printf("</div>");
 
             if(cType != cfgNone)
                 {
+                dependentCfgsNeedBinding = TRUE; // configurable subtrack needs to be bound to composite settings
+                if(membership)
                 ix = stringArrayIx("view", membership->subgroups, membership->count);
+                else
+                    ix = -1;
 #define CFG_SUBTRACK_DIV "<DIV id='div_%s_cfg'%s><INPUT TYPE=HIDDEN NAME='%s' value='%s'>\n"
 #define MAKE_CFG_SUBTRACK_DIV(table,cfgVar,open) printf(CFG_SUBTRACK_DIV,(table),((open)?"":" style='display:none'"),(cfgVar),((open)?"on":"off"))
                 safef(htmlIdentifier,sizeof(htmlIdentifier),"%s.childShowCfg",subtrack->tableName);
                 boolean open = cartUsualBoolean(cart, htmlIdentifier,FALSE);
                 MAKE_CFG_SUBTRACK_DIV(subtrack->tableName,htmlIdentifier,open);
+                if(ix >= 0)
                 safef(htmlIdentifier,sizeof(htmlIdentifier),"%s.%s",subtrack->tableName,membership->membership[ix]);
+                else
+                    safef(htmlIdentifier,sizeof(htmlIdentifier),"%s",subtrack->tableName);
                 cfgByCfgType(cType,db,cart,subtrack,htmlIdentifier,"Subtrack",TRUE);
                 puts("</DIV>\n");
                 }
             printf("<TD nowrap>&nbsp;");
@@ -3232,8 +3247,10 @@
 //if (!preSorted && sortOrder != NULL)  // No longer need to do this since hgTrackDb should sort composites with sortOrder and set priorities
 //    puts("<script type='text/javascript'>tableSortAtStartup();</script>");
 if (!primarySubtrack)
     puts("<script type='text/javascript'>matInitializeMatrix();</script>");
+if(dependentCfgsNeedBinding)
+    cfgLinkToDependentCfgs(parentTdb,parentTdb->tableName);
 for(di=dimX;di<dimMax;di++)
     subgroupMembersFree(&dimensions[di]);
 dyStringFree(&dyHtml)
 sortOrderFree(&sortOrder);
@@ -3293,15 +3310,8 @@
     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)
@@ -5388,11 +5398,9 @@
     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 (primarySubtrack == NULL)  // primarySubtrack is set for tableBrowser but not hgTrackUi
     {
         if (slCount(tdb->subtracks) > 5)
         {
         cgiMakeButton("Submit", "Submit");