this close_tab seems to be more robust
authorphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 21 Jun 2005 19:09:50 +0000 (19:09 +0000)
committerphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 21 Jun 2005 19:09:50 +0000 (19:09 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@900 dcc99617-32d9-48b4-a31d-7c20da2025e4

Evergreen/staff_client/chrome/content/evergreen/main/app_shell.js
Evergreen/staff_client/chrome/content/evergreen/main/app_shell_overlay.xul

index 87b85af..7a05d0f 100644 (file)
@@ -10,23 +10,32 @@ function app_shell_init(params) {
 
 function close_tab( d, tabbox ) {
        sdump('D_TAB','calling close_tab( ' + d + ',' + tabbox + ');\n');
-       var tbox = d.getElementById(tabbox);
-       var tabs = tbox.firstChild;
-       var panels = tbox.lastChild;
-       if (tabs.childNodes.length == 0) { return 0; }
+       if (typeof(tabbox)!='object')
+               tabbox = d.getElementById(tabbox);
+       if (typeof(tabbox)!='object')
+               throw('Could not find tabbox. d = ' + d + ' tabbox = ' + tabbox + '\n');
        try {
-               var tab = tabs.selectedItem;
-               var panel = tbox.selectedPanel;
-               tab_count[ tab.getAttribute('count') ] = false;
-               tabs.advanceSelectedTab(-1);
-               tabs.removeChild( tab );
-               panels.removeChild( panel );
+               var idx = tabbox.selectedIndex;
+               var tabs = tabbox.firstChild; 
+               var panels = tabbox.lastChild;
+
+               if (idx == 0)
+                       tabs.advanceSelectedTab(+1);
+               else
+                       tabs.advanceSelectedTab(-1);
+
+               if (tabs.childNodes.length > 1 ) {
+                       tabs.removeItemAt( idx );
+                       panels.removeChild( panels.childNodes[ idx ] );
+               } else {
+                       replace_tab(d,tabbox,'Tab','chrome://evergreen/content/main/about.xul');
+               }
+
        } catch(E) {
-               dump(js2JSON(E)+'\n');
-       }
-       if (tabs.childNodes.length == 0) { 
-               new_tab(d,'main_tabbox');
+               dump(E+'\n');
+               throw(E);
        }
+       sdump('D_TAB',' : tabs.childNodes.length = ' + tabs.childNodes.length + '  panels.childNodes.length = ' + panels.childNodes.length + '\n');
 }
 
 function delete_tab_contents( tab, panel ) {
@@ -51,9 +60,12 @@ function first_free_tab_count() {
 
 function new_tab( d, tabbox ) {
        sdump('D_TAB','calling new_tab( ' + d + ',' + tabbox + ');\n');
-       var tbox = d.getElementById(tabbox);
-       var tabs = tbox.firstChild;
-       var panels = tbox.lastChild;
+       if (typeof(tabbox)!='object')
+               tabbox = d.getElementById(tabbox);
+       if (typeof(tabbox)!='object')
+               throw('Could not find tabbox. d = ' + d + ' tabbox = ' + tabbox + '\n');
+       var tabs = tabbox.firstChild;
+       var panels = tabbox.lastChild;
        var tc = first_free_tab_count();
        if (tc == -1) { return; } // let's only have up to 10 tabs
        var panel = d.createElement('tabpanel');
@@ -72,25 +84,29 @@ function new_tab( d, tabbox ) {
                tab.setAttribute('linkedpanel','panel'+tc);
        tabs.appendChild(tab);
        try {
-               tbox.selectedIndex = tc;
+               tabbox.selectedIndex = tc;
                tabs.selectedIndex = tc;
-               //tbox.selectedIndex = tabs.childNodes.length - 1;
+               //tabbox.selectedIndex = tabs.childNodes.length - 1;
                //tabs.selectedIndex = tabs.childNodes.length - 1;
-               replace_tab(d,tabbox,'Tab','chrome://evergreen/content/about.xul');
+               replace_tab(d,tabbox,'Tab','chrome://evergreen/content/main/about.xul');
        } catch(E) {
                dump(js2JSON(E)+'\n');
        }
+       sdump('D_TAB',' : tabs.childNodes.length = ' + tabs.childNodes.length + '  panels.childNodes.length = ' + panels.childNodes.length + '\n');
 }
 
 function replace_tab( d, tabbox, label, chrome, params ) {
        sdump('D_TAB','calling replace_tab( ' + d + ',' + tabbox + ');\n');
-       var tbox = d.getElementById(tabbox);
-       var tabs = tbox.firstChild;
-       var panels = tbox.lastChild;
+       if (typeof(tabbox)!='object')
+               tabbox = d.getElementById(tabbox);
+       if (typeof(tabbox)!='object')
+               throw('Could not find tabbox. d = ' + d + ' tabbox = ' + tabbox + '\n');
+       var tabs = tabbox.firstChild;
+       var panels = tabbox.lastChild;
        if (tabs.childNodes.length == 0) { new_tab(d,tabbox); }
        try {
                var tab = tabs.selectedItem;
-               var panel = tbox.selectedPanel;
+               var panel = tabbox.selectedPanel;
                delete_tab_contents(tab,panel);
 
                tab.setAttribute('label',label + ' ' + tab.getAttribute('count') );
@@ -112,5 +128,6 @@ function replace_tab( d, tabbox, label, chrome, params ) {
        } catch(E) {
                dump(js2JSON(E)+'\n');
        }
+       sdump('D_TAB',' : tabs.childNodes.length = ' + tabs.childNodes.length + '  panels.childNodes.length = ' + panels.childNodes.length + '\n');
 
 }
index d3bd2b1..ad36755 100644 (file)
@@ -62,7 +62,7 @@
 <box id="AppShell_main" flex="1" orient="vertical">
        <toolbox id="main_toolbox"/>
        <tabbox id="main_tabbox" flex="1" eventnode="window" handleCtrlTab="true">
-               <tabs id="main_tabs"/>
+               <tabs id="main_tabs" closebutton="true"/>
                <tabpanels id="main_panels" flex="1"/>
        </tabbox>
        <toolbox id="entity_toolbox"/>