1 dump('entering main/menu.js\n');
3 if (typeof main == 'undefined') main = {};
4 main.menu = function () {
6 JSAN.use('util.error'); this.error = new util.error();
7 JSAN.use('main.window'); this.window = new main.window();
12 main.menu.prototype = {
18 obj.tabbox = obj.w.document.getElementById('main_tabbox');
19 obj.tabs = obj.tabbox.firstChild;
20 obj.panels = obj.tabbox.lastChild;
22 var cmd_close_window = this.w.document.getElementById('cmd_close_window');
23 if (cmd_close_window) {
24 var f = function() { obj.w.close(); };
25 cmd_close_window.addEventListener('command', f, false);
26 cmd_close_window.addEventListener('keypress', f, false);
29 var cmd_new_window = this.w.document.getElementById('cmd_new_window');
32 obj.window.open('/xul/server/main/menu_frame.xul','test' + obj.window.appshell_name_increment++ ,'chrome');
34 cmd_new_window.addEventListener('command', f, false );
35 cmd_new_window.addEventListener('keypress', f, false );
38 var cmd_new_tab = this.w.document.getElementById('cmd_new_tab');
40 var f = function(ev) {
43 cmd_new_tab.addEventListener('command', f, false );
44 cmd_new_tab.addEventListener('keypress', f, true );
47 var cmd_close_tab = this.w.document.getElementById('cmd_close_tab');
49 var f = function(ev) { obj.close_tab(); };
50 cmd_close_tab.addEventListener('command', f, false );
51 cmd_close_tab.addEventListener('keypress', f, false );
54 var cmd_broken = this.w.document.getElementById('cmd_broken');
56 var f = function() { alert('Not Yet Implemented'); };
57 cmd_broken.addEventListener('command', f, false);
58 cmd_broken.addEventListener('keypress', f, false);
64 'close_tab' : function () {
65 var idx = this.tabs.selectedIndex;
68 this.tabs.advanceSelectedTab(+1);
70 this.error.sdump('D_TAB','failed tabs.advanceSelectedTab(+1):'+js2JSON(E) + '\n');
72 this.tabs.advanceSelectedTab(-1);
74 this.error.sdump('D_TAB','failed again tabs.advanceSelectedTab(-1):'+js2JSON(E) + '\n');
79 this.tabs.advanceSelectedTab(-1);
81 this.error.sdump('D_TAB','failed tabs.advanceSelectedTab(-1):'+js2JSON(E) + '\n');
83 this.tabs.advanceSelectedTab(+1);
85 this.error.sdump('D_TAB','failed again tabs.advanceSelectedTab(+1):'+js2JSON(E) + '\n');
91 this.error.sdump('D_TAB','\tnew tabbox.selectedIndex = ' + this.tabbox.selectedIndex + '\n');
93 this.tabs.childNodes[ idx ].hidden = true;
94 this.error.sdump('D_TAB','tabs.childNodes[ ' + idx + ' ].hidden = true;\n');
96 // Make sure we keep at least one tab open.
98 for (var i = 0; i < this.tabs.childNodes.length; i++) {
99 var tab = this.tabs.childNodes[i];
103 if (tab_flag) this.new_tab();
106 'find_free_tab' : function() {
107 var last_not_hidden = -1;
108 for (var i = 0; i<this.tabs.childNodes.length; i++) {
109 var tab = this.tabs.childNodes[i];
113 if (last_not_hidden == this.tabs.childNodes.length - 1)
114 last_not_hidden = -1;
115 // If the one next to last_not_hidden is hidden, we want it.
116 // Basically, we fill in tabs after existing tabs for as
118 var idx = last_not_hidden + 1;
119 var candidate = this.tabs.childNodes[ idx ];
120 if (candidate.hidden)
122 // Alright, find the first hidden then
123 for (var i = 0; i<this.tabs.childNodes.length; i++) {
124 var tab = this.tabs.childNodes[i];
131 'new_tab' : function() {
132 var tc = this.find_free_tab();
133 if (tc == -1) { return null; } // 9 tabs max
134 var tab = this.tabs.childNodes[ tc ];
135 //tab.setAttribute('label','Tab ' + (tc + 1) );
138 this.tabs.selectedIndex = tc;
139 //this.replace_tab(tc,'about:blank');
141 this.error.sdump('D_ERROR',E);
147 dump('exiting main/menu.js\n');