29cda3bb2fb4fa07a300e12de17ba83377706a65
tdreszer
  Fri Jul 29 17:54:52 2011 -0700
More incremental changes before i most switch back to the master brqanch
diff --git src/hg/js/hui.js src/hg/js/hui.js
index b5b43a0..4f274b0 100644
--- src/hg/js/hui.js
+++ src/hg/js/hui.js
@@ -112,37 +112,31 @@
     // When subCBs are clicked, 3-state matCBs may need to be set
     var classes = matViewClasses('hidden');
     classes = classes.concat( matAbcCBclasses(false) );
     var matCB = matCbFindFromSubCb( subCB );
     if( matCB != undefined ) {
         matChkBoxNormalize( matCB, classes );
     }
     //var abcCB = matAbcCbFindFromSubCb( subCB );
     //if( abcCB != undefined ) {
     //    matChkBoxNormalize( abcCB, classes );
     //}
 
     if(subCB.checked)
         exposeAll();  // Unhide composite vis?
 
-    var subtrackName = subCB.name;
-    if (subtrackName == undefined || subtrackName.length == 0)
-        subtrackName = subCB.id;
-    if (subtrackName != undefined && subtrackName.length > 0) {
-        subtrackName = subtrackName.substring(0,subtrackName.length - 4); // '_sel'.length
-        scm.enableCfg(subCB,subtrackName,subCB.checked);
-    }
+    scm.enableCfg(subCB,null,subCB.checked);
 
     matSubCBsSelected();
 }
 
 function matCbClick(matCB)
 {
 // matCB:onclick  When a matrix CB is clicked, the set of subtracks checked may change
 // Also called indirectly by matButton:onclick via matSetMatrixCheckBoxes
 
     var classList = $( matCB ).attr("class").split(" ");
     var isABC = (aryFind(classList,"abc") != -1);
     classList = aryRemove(classList,"matCB","halfVis","abc");
     if(classList.length == 0 )
        matSubCBsCheck(matCB.checked);
     else if(classList.length == 1 )
@@ -287,30 +281,31 @@
             $(this).parent().attr('title','view is hidden');
             $(this).parent().attr('cursor','pointer');
         }
         this.disabled = !state;
         matSubCBsetShadow(this);
         hideOrShowSubtrack(this);
     });
 
     return true;
 }
 
 function matSubCBcheckOne(subCB,state)
 {
 // setting a single subCB may cause it to appear/disappear
     subCB.checked = state;
+    scm.enableCfg(subCB,null,state);
     matSubCBsetShadow(subCB);
     hideOrShowSubtrack(subCB);
 }
 
 function matSubCBsetShadow(subCB)
 {
 // Since CBs only get into cart when enabled/checked, the shadow control enables cart to know other states
     var shadowState = 0;
     if(subCB.checked)
         shadowState = 1;
     if(subCB.disabled)
         shadowState -= 2;
     $("#"+subCB.name+"_4way").val(shadowState);
 }
 
@@ -1431,31 +1426,31 @@
                     }
                 });
             }
         }
         return myParents;
     },
 
     childrenFind: function (parentObj)
     { // returns array of all currently populated child controls related to this parent control
       // parentObj could be composite level or view level
       // parent object could be for vis which has special rules
 
         var isComposite = false;
         var isVis = false;
         var suffix = scm.objSuffixGet(parentObj);
-        isVis = (suffix != undefined && suffix == 'vis');
+        isVis = (suffix != undefined && suffix == 'vis');  // vis inside of subCfg
 
         var viewId = undefined;
         if (isVis) { // This is a view control
 
             isComposite = (suffix == undefined);
             suffix = undefined;
             if (!isComposite) {
                 var classList = $( parentObj ).attr("class").split(" ");
                 classList = aryRemove(classList,"viewDD","normalText");
                 if (classList.length != 1) {
                     warn("Unexpected view vis class list:"+classList);
                     return [];
                 }
                 viewId = classList[0];
             }
@@ -1488,30 +1483,55 @@
                             allChildren = viewChildren;
                         else
                             allChildren = jQuery.merge( allChildren, viewChildren );
                     }
                 }
                 return allChildren;
             } else { // if no views then just get them all
                 return scm.childObjsFind(undefined,suffix);
             }
 
         } else {
             return scm.childObjsFind(viewId,suffix);
         }
     },
 
+    visChildrenFind: function (parentObj)
+    { // returns array of all currently faux and populated vis child controls (which are not in subCfg div)
+      // parentObj could be composite level or view level
+
+        var isVis = false;
+        var suffix = scm.objSuffixGet(parentObj);
+        isVis = (suffix == undefined || suffix == 'vis');
+        var isComposite = (suffix == undefined);
+
+        var subVis = $('.subVisDD');  // select:vis or faux:div
+        if (isComposite) {
+
+            return subVis;
+
+        } else {
+            var classList = $( parentObj ).attr("class").split(" ");
+            classList = aryRemove(classList,"viewDD","normalText");
+            if (classList.length != 1) {
+                warn("Unexpected view vis class list:"+classList);
+                return [];
+            }
+            return $(subVis).filter('.' + classList[0]);
+        }
+    },
+
     propagateSetting: function (parentObj)
     { // propagate composite/view level setting to subtrack children
         var children = scm.childrenFind(parentObj);
         if(parentObj.type.indexOf("checkbox") == 0) {
             var parentChecked = parentObj.checked;
             $(children).each(function (i) {
                 // Note checkbox and boolshad are children.
                 if (this.type != 'hidden')
                     this.checked = parentObj.checked;
                 scm.clearChange(this);
             });
             // deal with hidden boolshads!
             //var parentIdSafe = parentObj.id.replace(/\./g,"\\.");
             //var boolshad = $('input#boolshad\\.'+parentIdSafe);
             var boolshad = $('input#boolshad_-'+parentObj.id);
@@ -1535,59 +1555,100 @@
             var parentVal = $(parentObj).val();
             var updateDdcl = ($(parentObj).hasClass('filterBy') || $(parentObj).hasClass('filterComp'));
             $(children).each(function (i) {
                 $(this).val(parentVal);
                 scm.clearChange(this);
                 if (updateDdcl)
                     ddcl.onComplete(this);
             });
         }
         scm.markChange(parentObj);
     },
 
     propagateViewVis: function (viewObj,compositeVis)
     { // propagate vis from a view limiting with compositeVis
         var limitedVis = Math.min (compositeVis,viewObj.selectedIndex);
-        var children = scm.childrenFind(viewObj);
+        var visText = 'hide';
+        if (limitedVis == 1)
+            visText = 'dense';
+        else if (limitedVis == 2)
+            visText = 'squish';
+        else if (limitedVis == 3)
+            visText = 'pack';
+        else if (limitedVis == 4)
+            visText = 'full';
+        // vis outside of subCfg
+        var children = scm.visChildrenFind(viewObj);
         $(children).each(function (i) {
-            // TODO: only set if selected?
+            if ($(this).hasClass('fauxInput')) {
+                $(this).text(visText);
+            } else {
             $(this).attr('selectedIndex',limitedVis);
             scm.clearChange(this);
+            }
         });
+        // vis inside of subCfg
+        //var children = scm.childrenFind(viewObj);
+        //$(children).each(function (i) {
+        //    // TODO: only set if selected?
+        //    $(this).attr('selectedIndex',limitedVis);
+        //    scm.clearChange(this);
+        //});
     },
+
     propagateVis: function (parentObj,viewId)
     { // propagate vis settings to subtrack children
         if (viewId == null) {
             // Walk through views and set with this
             var parentVis = parentObj.selectedIndex;
             if (scm.viewIds.length > 0) {
-                for (ix=0;ix<scm.viewIds;ix++) {
-                    var viewObj = scm.viewObjFind(viewIds[ix],undefined);
+                for (var ix=0;ix<scm.viewIds.length;ix++) {
+                    var viewObj = scm.viewObjFind(scm.viewIds[ix]);//,undefined);
                     if (viewObj != undefined)
                         scm.propagateViewVis(viewObj,parentVis);
                 }
             } else { // No view so, simple
-                var children = scm.childrenFind(parentObj);
+                // vis outside of subCfg
+                var visText = 'hide';
+                if (parentVis == 1)
+                    visText = 'dense';
+                else if (parentVis == 2)
+                    visText = 'squish';
+                else if (parentVis == 3)
+                    visText = 'pack';
+                else if (parentVis == 4)
+                    visText = 'full';
+                var children = scm.visChildrenFind(parentObj);
                 $(children).each(function (i) {
-                    var subCb = scm.subCbFind(this);
-                    if (subCb != undefined) {
-                        if (subCb.disabled != true && subCb.checked) {  // TODO: Integrate with things that enable/check!
+                    if ($(this).hasClass('fauxInput')) {
+                        $(this).text(visText);
+                    } else {
                             $(this).attr('selectedIndex',parentVis);
                             scm.clearChange(this);
                         }
-                    }
                 });
+                // vis inside of subCfg
+                //var children = scm.childrenFind(parentObj);
+                //$(children).each(function (i) {
+                //    var subCb = scm.subCbFind(this);
+                //    if (subCb != undefined) {
+                //        if (subCb.disabled != true && subCb.checked) {  // TODO: Integrate with things that enable/check!
+                //            $(this).attr('selectedIndex',parentVis);
+                //            scm.clearChange(this);
+                //        }
+                //    }
+                //});
             }
         } else {
             // First get composite vis to limit with
             var compObj = scm.compositeObjFind(undefined);
             if (compObj == undefined) {
                 warn('Could not find composite vis object!');
                 return false;
             }
             scm.propagateViewVis(parentObj,compObj.selectedIndex);
         }
     },
 
     inheritSetting: function (childObj)
     { // update value if parents values override child values.
         var myParents = scm.parentsFind(childObj);
@@ -1779,103 +1840,107 @@
             url: "../cgi-bin/hgTrackUi?ajax=1&g=" + subtrack + "&hgsid=" + getHgsid() + "&db=" + getDb(),
             dataType: "html",
             trueSuccess: scm.cfgFill,
             success: catchErrorOrDispatch,
             error: errorHandler,
             cmd: "cfg",
             cache: false
         });
     },
 
     replaceWithVis: function (obj,subtrack,open)
     { // Replaces the current fauxVis object with a true visibility selector
 
         if ($(obj).hasClass('disabled'))
             return;
-        var selectHtml = "<SELECT id='"+subtrack+"' class='normalText subVisDD' style='width: 70px'>";
+        var classList = $( obj ).attr("class").split(" ");
+        var view = classList[classList.length - 1];
+        var classList = $(obj).attr('class').split(' '); // This relies on view being the last class!!!
+        var selectHtml = "<SELECT id='"+subtrack+"' class='normalText subVisDD "+view+"' style='width: 70px'>";
         var selected = $(obj).text();
         if (selected == 'hide')
             selectHtml += "<OPTION SELECTED>hide</OPTION><OPTION>dense</OPTION><OPTION>squish</OPTION><OPTION>pack</OPTION><OPTION>full</OPTION>";
         else if (selected == 'dense')
             selectHtml += "<OPTION>hide</OPTION><OPTION SELECTED>dense</OPTION><OPTION>squish</OPTION><OPTION>pack</OPTION><OPTION>full</OPTION>";
         else if (selected == 'squish')
             selectHtml += "<OPTION>hide</OPTION><OPTION>dense</OPTION><OPTION SELECTED>squish</OPTION><OPTION>pack</OPTION><OPTION>full</OPTION>";
         else if (selected == 'full')
             selectHtml += "<OPTION>hide</OPTION><OPTION>dense</OPTION><OPTION>squish</OPTION><OPTION>pack</OPTION><OPTION SELECTED>full</OPTION>";
         else
             selectHtml += "<OPTION>hide</OPTION><OPTION>dense</OPTION><OPTION>squish</OPTION><OPTION>pack</OPTION><OPTION>full</OPTION>";
         selectHtml += "</SELECT>";
         $(obj).replaceWith(selectHtml);
         if (open) {
             var newObj = $('select#'+subtrack);
             $(newObj).attr('size',5)
             $(newObj).one('blur',function (e) {
                 $(this).attr('size',1);
                 $(this).unbind()
             });
             $(newObj).one('change',function (e) {
                 $(this).attr('size',1);
             });
             // Doesn't work!
             //$(newObj).parents('td').first().attr('valign','top');
             $(newObj).focus();
         }
     },
 
-    enableCfg: function (cb,subtrack,setTo)
+    enableCfg: function (subCb,subtrack,setTo)
     { // Enables or disables subVis and wrench
-        if (cb == null || cb == undefined) {
+        if (subCb == null || subCb == undefined) {
             if (subtrack == null || subtrack.length == 0) {
                 warn("scm.enableCfg() called without CB or subtrack.");
                 return false;
             }
-            cb = $("input[name='"+subtrack+"'_sel]");
-            if (cb == undefined || cb.length == 0) {
+            subCb = $("input[name='"+subtrack+"'_sel]");
+            if (subCb == undefined || subCb.length == 0) {
                 warn("scm.enableCfg() could not find CB for subtrack: "+subtrack);
                 return false;
             }
         }
-        if (cb.length == 1)
-            cb = cb[0];
+        if (subCb.length == 1)
+            subCb = subCb[0];
 
-        var td = $(cb).parent('td');
+        var td = $(subCb).parent('td');
         if (td == undefined || td.length == 0) {
-            warn("scm.enableCfg() could not TD for CB: "+cb.name);
+            warn("scm.enableCfg() could not find TD for CB: "+subCb.name);
             return false;
         }
         if (td.length == 1)
             td = td[0];
         var subFaux = $(td).find('div.subVisDD');
         if (subFaux != undefined && subFaux.length > 0) {
             if (setTo == true)
                 $(subFaux).removeClass('disabled');
             else
                 $(subFaux).addClass('disabled');
         } else {
             var subVis = $(td).find('select.subVisDD');
             if (subVis != undefined && subVis.length > 0) {
                 $(subVis).attr('disable',!setTo);
             }
         }
         var wrench = $(td).find('span.clickable'); // TODO tighten this
         if (wrench != undefined && wrench.length > 0) {
             if (setTo == true)
                 $(wrench).removeClass('halfVis');
             else
                 $(wrench).addClass('halfVis');
         }
     },
+
     cfgToggle: function (wrench,subtrack)
     { // Opens/closes subtrack cfg dialog, populating if empty
         var cfg = $("div#div_cfg_"+subtrack);
         if (cfg == undefined || cfg.length == 0) {
             warn("Can't find div_cfg_"+subtrack);
             return false;
         }
         if (cfg.length == 1)
             cfg = cfg[0];
 
         if ($(cfg).css('display') == 'none') {
             if ($(wrench).hasClass('halfVis'))
                 return;
             // Don't allow if this composite is not enabled!
             // find the cb