diff -r aaba47256eea -r d3fff58a7af9 Symbian.org/preview/script/lib/menu.js --- a/Symbian.org/preview/script/lib/menu.js Tue Jul 21 12:22:37 2009 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,497 +0,0 @@ -/** - * widget object constructor - * @param {void} - * widget() - * @return {void} - */ - -if (typeof window.menu == "undefined" || !window.menu) -{ - window.menu = - { - author : 'Nokia WRT Emulation Library', - items : [], - index : null, - isDimmed : false, - - // Event triggers - onShow : null, - onRightSoftKeySelect : null, - }; - - - /* - Function : menu.append() - Argument : MenuItem Object - Returns : Void - Description : Function appends MenuItem to a Menu Object - */ - menu.append = function(MenuItem) - { - if(this.allowedTypeOf(MenuItem)) - { - var i; - var flag = true; - try{ - for(var key in this.items) - { - if(this.items[key].id == MenuItem.id) - { - flag = false; - break; - } - }} catch(e){ } - if(flag) - { - // MenuItem.parent = this; - this.items[MenuItem.id] = MenuItem; - } - } - } - - - /* - Function : menu.remove() - Argument : MenuItem Object - Returns : Void - Description : Function Remove the menuItem and its children from the container options menu. - */ - menu.remove = function(MenuItem) - { - if(!this.allowedTypeOf(MenuItem)) - return false; - - var flag = false; - if (this.items.length) { - for (var key in this.items) { - if (this.items[key].id == MenuItem.id) { - flag = true; - break; - } - } - } - if(flag) - { - this.items.splice(key, 1); - } - } - - /* - Function : menu.clear() - Argument : Void - Returns : Void - Description : Clears (deletes) all the menu items in the menupane. - */ - menu.clear = function() - { - try - { - this.items.splice(0, this.items.length); - }catch(e){} - } - - - /* - Function : Menu.getMenuItemById(id) - Argument : Integer - Returns : MenuItem Object - Description : Function get the MenuItem Object with the reference of id - */ - menu.getMenuItemById = function(id) - { - var menuItemRef = menu.menuItemExhistsById(this, id, 0); - if(this.allowedTypeOf(menuItemRef)) - return menuItemRef; - else - return undefined; - } - - - /* - Function : Menu.getMenuItemByName(name) - Argument : String - Returns : MenuItem Object - Description : Function get the MenuItem Object with the reference of String name - */ - menu.getMenuItemByName = function(name) - { - var menuItemRef = menu.menuItemExhistsById(this, name, 1); - - // if(menuItemRef !=null) - if(this.allowedTypeOf(menuItemRef)) - return menuItemRef; - else - return undefined; - } - - /* - Function : Menu.setRightSoftkeyLabel() - Argument : String, Function - Returns : Void - Description : Set the label of the right soft key to str. This enables the default text - to be changed from exit and a new function assigned by setting a callbackfunction - */ - - menu.setRightSoftkeyLabel = function(label, callback) - { - window.menu = this; - try - { - if(typeof label != '' && !label) - this.setExitToRsk(); - - else if(typeof callback != 'function' && !callback) - this.setExitToRsk(); - - else if (_BRIDGE_REF.nokia.menu.setRsk(callback)) { - _BRIDGE_REF.parent.$("#RskLabel > a")[0].innerHTML = label; - _BRIDGE_REF.nokia.menu.rsk_label = label; - _BRIDGE_REF.nokia.menu.rsk_event = callback; - _BRIDGE_REF.nokia.menu.is_rsk_overridden = true; - } - else - this.setExitToRsk(); - - }catch(e){ - // alert(e); - } - } - - - menu.setExitToRsk = function() - { - this.onRightSoftKeySelect = null; - - _BRIDGE_REF.nokia.menu.is_rsk_overridden = false; - _BRIDGE_REF.nokia.menu.rsk_label = ''; - _BRIDGE_REF.nokia.menu.rsk_event = null; - _BRIDGE_REF.parent.$("#RskLabel > a")[0].innerHTML = 'Exit'; - - _BRIDGE_REF.nokia.menu.setRsk(function(){ - _BRIDGE_REF.nokia.menu.exit(); - }); - } - - /* - Function : Menu.showSoftkeys() - Argument : Void - Returns : Void - Description : Makes the softkeys visible. By default the softkeys are not visible - - */ - menu.showSoftkeys = function() - { - /* - * Shows showSoftkeys - */ - _BRIDGE_REF.nokia.menu.softkeys_visibility = true; - _BRIDGE_REF.nokia.menu.showSoftKeys(); - } - - /* - Function : Menu.hideSoftkeys() - Argument : Void - Returns : Void - Description : Makes the softkeys invisible. By default the softkeys are not visible. - - */ - menu.hideSoftkeys = function() - { - /* - * Hide showSoftkeys - */ - _BRIDGE_REF.nokia.menu.softkeys_visibility = false; - _BRIDGE_REF.nokia.menu.hideSoftKeys(); - } - - - /* - * - * ---------------------------------------------------------------- - * Exta Functionalities which helps to make main functions to work - * ---------------------------------------------------------------- - * - */ - - menu.cancel = function() - { - _BRIDGE_REF.nokia.menu.cancel(); - } - - menu.exit = function() - { - _BRIDGE_REF.nokia.menu.exit(); - } - - - menu.triggeLSKEvent = function() - { - if(typeof(window.menu.onShow) == 'function') - { - window.menu.onShow(); - } - _BRIDGE_REF.parent.$('#softKeysPane').show(); - this.show(); - } - - menu.triggerEvent = function(MenuItemId) - { - try{ - var menuItemRef = this.menuItemExhistsById(this, MenuItemId, 0); - if(menuItemRef != null) - { - if(typeof menuItemRef.onSelect == 'function') - menuItemRef.onSelect(MenuItemId); - - if(_BRIDGE_REF.helper.getElementsLengthInObject(menuItemRef.items)) - this.show(MenuItemId); - else - this.cancel(); - - }else - { - this.show(); - } - } - catch(e) - { - alert('triggeEvent: '+MenuItemId+' >> '+e); - } - } - - menu.hasChild = function(parentId) - { - for(var i in this.items) - { - if(this.items[i].parentId == parentId) - { - return true; - } - } - return false; - } - - - menu.allowedTypeOf = function(MenuItem) - { - try - { - if( (typeof(MenuItem) == 'object') && (MenuItem.type == 'MenuItem')) - return true; - } - catch(e) - { - return false; - } - } - - menu.show = function(parentId) - { - try - { - var menuItemsPane = _BRIDGE_REF.parent.$('#MenuItemsArea') - menuItemsPane = menuItemsPane[0]; - - menuItemsPane.innerHTML = ''; - - var ul = document.createElement('ul'); - var ele = window.menu; - - if(typeof parentId != 'undefined' && typeof parentId == 'object') - { - if (typeof window.menu.onShow != null && typeof window.menu.onShow == 'function') { - window.menu.onShow(); - } - } - - if(typeof parentId == 'number') - { - var tempRef = menu.menuItemExhistsById(ele, parentId, 0); - - if(typeof parentId != 'undefined' && typeof tempRef != 'undefined') - ele = tempRef; - } - - if(_BRIDGE_REF.helper.getElementsLengthInObject(ele.items)) - { - for(var key in ele.items) - { - if(!ele.items[key].isDimmed){ - - try{ - ul.appendChild(menu.create_menuElement(ele.items[key])); - }catch(e){ } - } - } - if(typeof parentId == 'number' && _BRIDGE_REF.helper.getElementsLengthInObject(ele.items)) - { - if(ele.parent) - ul.appendChild(menu.create_normalMenuItem('Back', ele.parent.id)); - else - ul.appendChild(menu.create_normalMenuItem('Back', null)); - } - else - { - ul.appendChild(menu.create_exitMenuItem()); - } - - - if(_BRIDGE_REF.helper.getElementsLengthInObject(ele.items) > 5) - menuItemsPane.style.overflowY = 'scroll'; - else - menuItemsPane.style.overflowY = 'hidden'; - - } - else - { - menuItemsPane.style.overflowY = 'hidden'; - ul.appendChild(menu.create_exitMenuItem()); - } - menuItemsPane.innerHTML = ''; - - _BRIDGE_REF.nokia.menu.show(); - } - catch(e) - { - alert('menu.show: '+e); - } - } - - - -/* -* -* HELPER FUNCTIONS -* -*/ - - menu.menuItemExhistsById = function(menuReference, value, argumentType) - { - var flag = null; - - for(var key in menuReference.items) - { - if(!argumentType) - { - if(menuReference.items[key].id == value) - { - flag = true; - break; - } - } - else - { - if(menuReference.items[key].name == value) - { - flag = true; - break; - } - } - - if(menuReference.items[key].items != undefined && menuReference.items[key].items.length) - { - var temp = this.menuItemExhistsById(menuReference.items[key], value, argumentType); - if(temp) - return temp; - } - } - if(flag) - { - // crate a package and send it - menuReference.items[key].index = key; - return menuReference.items[key]; - } - else - return null; - } - - menu.create_menuElement = function(MenuItem) - { - var listitem = document.createElement('li'); - listitem.id = MenuItem.id; - listitem.setAttribute('onClick', 'javascript:NOKIA.emulator.child.menu.triggerEvent('+MenuItem.id+');'); - - var anchor = document.createElement('a'); - anchor.id = 'subMenuItem_'+MenuItem.id; - anchor.innerHTML = MenuItem.name; - if(_BRIDGE_REF.helper.getElementsLengthInObject(MenuItem.items)) - { - anchor.className = 'subMenuItem'; - anchor.setAttribute('href', 'javascript:NOKIA.emulator.child.menu.show('+MenuItem.id+');'); - } - listitem.appendChild(anchor); - return (listitem); - } - - menu.create_normalMenuItem = function(MenuTitle, index) - { - var listitem = document.createElement('li'); - - var anchor = document.createElement('a'); - anchor.id = 'subMenuItem_BACK'; - anchor.innerHTML = MenuTitle; - - if (MenuTitle == 'Back') { - listitem.className = 'exitOrBackBtn'; - anchor.setAttribute('href', 'javascript:NOKIA.emulator.child.menu.triggerEvent(' + index + ');'); - } - else - anchor.setAttribute('href', 'javascript:NOKIA.emulator.child.menu.triggerEvent(' + index + ');'); - - listitem.appendChild(anchor); - return (listitem); - } - - menu.create_exitMenuItem = function() - { - var listitem = document.createElement('li'); - listitem.className = 'exitOrBackBtn'; - var anchor = document.createElement('a'); - anchor.id = 'subMenuItem_EXIT'; - anchor.innerHTML = 'Exit'; - anchor.setAttribute('href', 'javascript:NOKIA.emulator.child.menu.exit();'); - listitem.setAttribute('onClick', 'javascript:NOKIA.emulator.child.menu.exit();'); - - listitem.appendChild(anchor); - return (listitem); - } - - menu.triggeRSK = function() - { - try { - if (window.menu) { - if (childToParent_Reference.$('softKeysPane').style.display != 'none') { - if (window.menu.onRightSoftKeySelect != null) { - window.menu.onRightSoftKeySelect(); - window.menu.cancel(); - } - else { - window.menu.cancel(); - } - } - } - }catch(e) - { - alert(e); - } - } - - menu.triggeLSK = function() - { - if(window.menu) - { - window.menu.show(); - if(typeof(window.menu.onShow) == 'function') - { - if(window.menu.onShow) - { - window.menu.onShow(); - } - } - } - } - - - // make TRUE menu.js script loaded - window.parent.NOKIA.scriptsLoaded.menu = true; -} \ No newline at end of file