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);
63 'close_tab' : function () {
64 var idx = this.tabs.selectedIndex;
67 this.tabs.advanceSelectedTab(+1);
69 this.error.sdump('D_TAB','failed tabs.advanceSelectedTab(+1):'+js2JSON(E) + '\n');
71 this.tabs.advanceSelectedTab(-1);
73 this.error.sdump('D_TAB','failed again tabs.advanceSelectedTab(-1):'+js2JSON(E) + '\n');
78 this.tabs.advanceSelectedTab(-1);
80 this.error.sdump('D_TAB','failed tabs.advanceSelectedTab(-1):'+js2JSON(E) + '\n');
82 this.tabs.advanceSelectedTab(+1);
84 this.error.sdump('D_TAB','failed again tabs.advanceSelectedTab(+1):'+js2JSON(E) + '\n');
90 this.error.sdump('D_TAB','\tnew tabbox.selectedIndex = ' + this.tabbox.selectedIndex + '\n');
92 this.tabs.childNodes[ idx ].hidden = true;
93 this.error.sdump('D_TAB','tabs.childNodes[ ' + idx + ' ].hidden = true;\n');
95 // Make sure we keep at least one tab open.
97 for (var i = 0; i < this.tabs.childNodes.length; i++) {
98 var tab = this.tabs.childNodes[i];
102 if (tab_flag) this.new_tab();
105 'find_free_tab' : function() {
106 var last_not_hidden = -1;
107 for (var i = 0; i<this.tabs.childNodes.length; i++) {
108 var tab = this.tabs.childNodes[i];
112 if (last_not_hidden == this.tabs.childNodes.length - 1)
113 last_not_hidden = -1;
114 // If the one next to last_not_hidden is hidden, we want it.
115 // Basically, we fill in tabs after existing tabs for as
117 var idx = last_not_hidden + 1;
118 var candidate = this.tabs.childNodes[ idx ];
119 if (candidate.hidden)
121 // Alright, find the first hidden then
122 for (var i = 0; i<this.tabs.childNodes.length; i++) {
123 var tab = this.tabs.childNodes[i];
130 'new_tab' : function() {
131 var tc = this.find_free_tab();
132 if (tc == -1) { return null; } // 9 tabs max
133 var tab = this.tabs.childNodes[ tc ];
134 //tab.setAttribute('label','Tab ' + (tc + 1) );
137 this.tabs.selectedIndex = tc;
138 //this.replace_tab(tc,'about:blank');
140 this.error.sdump('D_ERROR',E);
146 dump('exiting main/menu.js\n');