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' +
33 obj.window.appshell_name_increment++ ,'chrome');
35 cmd_new_window.addEventListener('command', f, false );
36 cmd_new_window.addEventListener('keypress', f, false );
39 var cmd_new_tab = this.w.document.getElementById('cmd_new_tab');
41 var f = function(ev) {
44 cmd_new_tab.addEventListener('command', f, false );
45 cmd_new_tab.addEventListener('keypress', f, true );
48 var cmd_close_tab = this.w.document.getElementById('cmd_close_tab');
50 var f = function(ev) { obj.close_tab(); };
51 cmd_close_tab.addEventListener('command', f, false );
52 cmd_close_tab.addEventListener('keypress', f, false );
55 var cmd_broken = this.w.document.getElementById('cmd_broken');
57 var f = function() { alert('Not Yet Implemented'); };
58 cmd_broken.addEventListener('command', f, false);
59 cmd_broken.addEventListener('keypress', f, false);
65 'close_tab' : function () {
66 var idx = this.tabs.selectedIndex;
69 this.tabs.advanceSelectedTab(+1);
71 this.error.sdump('D_TAB','failed tabs.advanceSelectedTab(+1):'+js2JSON(E) + '\n');
73 this.tabs.advanceSelectedTab(-1);
75 this.error.sdump('D_TAB','failed again tabs.advanceSelectedTab(-1):'+
81 this.tabs.advanceSelectedTab(-1);
83 this.error.sdump('D_TAB','failed tabs.advanceSelectedTab(-1):'+js2JSON(E) + '\n');
85 this.tabs.advanceSelectedTab(+1);
87 this.error.sdump('D_TAB','failed again tabs.advanceSelectedTab(+1):'+
94 this.error.sdump('D_TAB','\tnew tabbox.selectedIndex = ' + this.tabbox.selectedIndex + '\n');
96 this.tabs.childNodes[ idx ].hidden = true;
97 this.error.sdump('D_TAB','tabs.childNodes[ ' + idx + ' ].hidden = true;\n');
99 // Make sure we keep at least one tab open.
101 for (var i = 0; i < this.tabs.childNodes.length; i++) {
102 var tab = this.tabs.childNodes[i];
106 if (tab_flag) this.new_tab();
109 'find_free_tab' : function() {
110 var last_not_hidden = -1;
111 for (var i = 0; i<this.tabs.childNodes.length; i++) {
112 var tab = this.tabs.childNodes[i];
116 if (last_not_hidden == this.tabs.childNodes.length - 1)
117 last_not_hidden = -1;
118 // If the one next to last_not_hidden is hidden, we want it.
119 // Basically, we fill in tabs after existing tabs for as
121 var idx = last_not_hidden + 1;
122 var candidate = this.tabs.childNodes[ idx ];
123 if (candidate.hidden)
125 // Alright, find the first hidden then
126 for (var i = 0; i<this.tabs.childNodes.length; i++) {
127 var tab = this.tabs.childNodes[i];
134 'new_tab' : function(focus) {
135 var tc = this.find_free_tab();
136 if (tc == -1) { return null; } // 9 tabs max
137 var tab = this.tabs.childNodes[ tc ];
138 //tab.setAttribute('label','Tab ' + (tc + 1) );
141 if (focus) this.tabs.selectedIndex = tc;
142 this.set_tab('data:text/html,<h1>Hello World</h1>',tc);
144 this.error.sdump('D_ERROR',E);
148 'set_tab' : function(url,idx) {
149 if (!idx) idx = this.tabs.selectedIndex;
150 var tab = this.tabs.childNodes[ idx ];
151 var panel = this.panels.childNodes[ idx ];
152 while ( panel.lastChild ) panel.removeChild( panel.lastChild );
153 var frame = this.w.document.createElement('iframe');
154 frame.setAttribute('flex','1');
155 frame.setAttribute('src',url);
156 panel.appendChild(frame);
161 dump('exiting main/menu.js\n');