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;
23 'cmd_close_window' : function() { obj.w.close(); },
24 'cmd_new_window' : function() {
25 obj.window.open('/xul/server/main/menu_frame.xul','test' +
26 obj.window.appshell_name_increment++ ,'chrome');
28 'cmd_new_tab' : function() { obj.new_tab(true); },
29 'cmd_close_tab' : function() { obj.close_tab(); },
30 'cmd_broken' : function() { alert('Not Yet Implemented'); }
33 for (var i in cmd_map) {
34 var cmd = this.w.document.getElementById(i);
36 cmd.addEventListener('command',cmd_map[i],false);
37 cmd.addEventListener('keypress',cmd_map[i],false);
44 'close_tab' : function () {
45 var idx = this.tabs.selectedIndex;
48 this.tabs.advanceSelectedTab(+1);
50 this.error.sdump('D_TAB','failed tabs.advanceSelectedTab(+1):'+js2JSON(E) + '\n');
52 this.tabs.advanceSelectedTab(-1);
54 this.error.sdump('D_TAB','failed again tabs.advanceSelectedTab(-1):'+
60 this.tabs.advanceSelectedTab(-1);
62 this.error.sdump('D_TAB','failed tabs.advanceSelectedTab(-1):'+js2JSON(E) + '\n');
64 this.tabs.advanceSelectedTab(+1);
66 this.error.sdump('D_TAB','failed again tabs.advanceSelectedTab(+1):'+
73 this.error.sdump('D_TAB','\tnew tabbox.selectedIndex = ' + this.tabbox.selectedIndex + '\n');
75 this.tabs.childNodes[ idx ].hidden = true;
76 this.error.sdump('D_TAB','tabs.childNodes[ ' + idx + ' ].hidden = true;\n');
78 // Make sure we keep at least one tab open.
80 for (var i = 0; i < this.tabs.childNodes.length; i++) {
81 var tab = this.tabs.childNodes[i];
85 if (tab_flag) this.new_tab();
88 'find_free_tab' : function() {
89 var last_not_hidden = -1;
90 for (var i = 0; i<this.tabs.childNodes.length; i++) {
91 var tab = this.tabs.childNodes[i];
95 if (last_not_hidden == this.tabs.childNodes.length - 1)
97 // If the one next to last_not_hidden is hidden, we want it.
98 // Basically, we fill in tabs after existing tabs for as
100 var idx = last_not_hidden + 1;
101 var candidate = this.tabs.childNodes[ idx ];
102 if (candidate.hidden)
104 // Alright, find the first hidden then
105 for (var i = 0; i<this.tabs.childNodes.length; i++) {
106 var tab = this.tabs.childNodes[i];
113 'new_tab' : function(focus) {
114 var tc = this.find_free_tab();
115 if (tc == -1) { return null; } // 9 tabs max
116 var tab = this.tabs.childNodes[ tc ];
117 //tab.setAttribute('label','Tab ' + (tc + 1) );
120 if (focus) this.tabs.selectedIndex = tc;
121 this.set_tab('data:text/html,<h1>Hello World</h1>',tc);
123 this.error.sdump('D_ERROR',E);
127 'set_tab' : function(url,idx) {
128 if (!idx) idx = this.tabs.selectedIndex;
129 var tab = this.tabs.childNodes[ idx ];
130 var panel = this.panels.childNodes[ idx ];
131 while ( panel.lastChild ) panel.removeChild( panel.lastChild );
132 var frame = this.w.document.createElement('iframe');
133 frame.setAttribute('flex','1');
134 frame.setAttribute('src',url);
135 panel.appendChild(frame);
140 dump('exiting main/menu.js\n');