15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cr.define('cr.ui', function() { 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** @const */ var Command = cr.ui.Command; 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Creates a new menu item element. 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Object=} opt_propertyBag Optional properties. 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @constructor 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @extends {HTMLDivElement} 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var MenuItem = cr.ui.define('div'); 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Creates a new menu separator element. 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {cr.ui.MenuItem} The new separator element. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MenuItem.createSeparator = function() { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var el = cr.doc.createElement('hr'); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MenuItem.decorate(el); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return el; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MenuItem.prototype = { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) __proto__: HTMLButtonElement.prototype, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Initializes the menu item. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decorate: function() { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var commandId; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((commandId = this.getAttribute('command'))) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.command = commandId; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.addEventListener('mouseup', this.handleMouseUp_); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adding the 'custom-appearance' class prevents widgets.css from changing 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the appearance of this element. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.classList.add('custom-appearance'); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 43bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // Enable Text to Speech on the menu. Additionaly, ID has to be set, since 44bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // it is used in element's aria-activedescendant attribute. 45bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch if (!this.isSeparator()) 46bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch this.setAttribute('role', 'menuitem'); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var iconUrl; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((iconUrl = this.getAttribute('icon'))) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.iconUrl = iconUrl; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The command associated with this menu item. If this is set to a string 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * of the form "#element-id" then the element is looked up in the document 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * of the command. 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {cr.ui.Command} 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_: null, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get command() { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.command_; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set command(command) { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.command_) { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.command_.removeEventListener('labelChange', this); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.command_.removeEventListener('disabledChange', this); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.command_.removeEventListener('hiddenChange', this); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.command_.removeEventListener('checkedChange', this); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (typeof command == 'string' && command[0] == '#') { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command = this.ownerDocument.getElementById(command.slice(1)); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cr.ui.decorate(command, Command); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.command_ = command; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (command) { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (command.id) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.setAttribute('command', '#' + command.id); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 81868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (typeof command.label === 'string') 82868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) this.label = command.label; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.disabled = command.disabled; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.hidden = command.hidden; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.command_.addEventListener('labelChange', this); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.command_.addEventListener('disabledChange', this); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.command_.addEventListener('hiddenChange', this); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.command_.addEventListener('checkedChange', this); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.updateShortcut_(); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The text label. 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {string} 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get label() { 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.textContent; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set label(label) { 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.textContent = label; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Menu icon. 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {string} 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get iconUrl() { 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.style.backgroundImage; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set iconUrl(url) { 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.style.backgroundImage = 'url(' + url + ')'; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {boolean} Whether the menu item is a separator. 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) isSeparator: function() { 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.tagName == 'HR'; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Updates shortcut text according to associated command. If command has 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * multiple shortcuts, only first one is displayed. 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateShortcut_: function() { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.removeAttribute('shortcutText'); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!(this.command_ && this.command_.shortcut)) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var shortcuts = this.command_.shortcut.split(/\s+/); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (shortcuts.length == 0) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var shortcut = shortcuts[0]; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var mods = {}; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var ident = ''; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shortcut.split('-').forEach(function(part) { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var partUc = part.toUpperCase(); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (partUc) { 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 'CTRL': 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 'ALT': 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 'SHIFT': 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 'META': 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mods[partUc] = true; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) console.assert(!ident, 'Shortcut has two non-modifier keys'); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ident = part; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var shortcutText = ''; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(zvorygin): if more cornercases appear - optimize following 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // code. Currently 'Enter' keystroke is passed as 'Enter', and 'Space' 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is passed as 'U+0020' 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ident == 'U+0020') 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ident = 'Space'; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ['CTRL', 'ALT', 'SHIFT', 'META'].forEach(function(mod) { 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (mods[mod]) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shortcutText += loadTimeData.getString('SHORTCUT_' + mod) + '+'; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ident.indexOf('U+') != 0) { 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shortcutText += 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadTimeData.getString('SHORTCUT_' + ident.toUpperCase()); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shortcutText += 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) String.fromCharCode(parseInt(ident.substring(2), 16)); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.setAttribute('shortcutText', shortcutText); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Handles mouseup events. This dispatches an activate event; if there is an 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * associated command, that command is executed. 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Event} e The mouseup event object. 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handleMouseUp_: function(e) { 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Only dispatch an activate event for left or middle click. 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (e.button > 1) 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!this.disabled && !this.isSeparator() && this.selected) { 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Store |contextElement| since it'll be removed by {Menu} on handling 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 'activate' event. 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var contextElement = this.parentNode.contextElement; 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var activationEvent = cr.doc.createEvent('Event'); 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) activationEvent.initEvent('activate', true, true); 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) activationEvent.originalEvent = e; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Dispatch command event followed by executing the command object. 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (this.dispatchEvent(activationEvent)) { 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var command = this.command; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (command) { 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command.execute(contextElement); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cr.ui.swallowDoubleClick(e); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Updates command according to the node on which this menu was invoked. 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Node=} opt_node Node on which menu was opened. 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateCommand: function(opt_node) { 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.command_) { 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.command_.canExecuteChange(opt_node); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Handles changes to the associated command. 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Event} e The event object. 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handleEvent: function(e) { 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (e.type) { 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 'disabledChange': 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.disabled = this.command.disabled; 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 'hiddenChange': 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.hidden = this.command.hidden; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 'labelChange': 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.label = this.command.label; 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 'checkedChange': 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.checked = this.command.checked; 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Whether the menu item is disabled or not. 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {boolean} 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cr.defineProperty(MenuItem, 'disabled', cr.PropertyKind.BOOL_ATTR); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Whether the menu item is hidden or not. 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {boolean} 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cr.defineProperty(MenuItem, 'hidden', cr.PropertyKind.BOOL_ATTR); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Whether the menu item is selected or not. 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {boolean} 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cr.defineProperty(MenuItem, 'selected', cr.PropertyKind.BOOL_ATTR); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Whether the menu item is checked or not. 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {boolean} 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cr.defineProperty(MenuItem, 'checked', cr.PropertyKind.BOOL_ATTR); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Whether the menu item is checkable or not. 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @type {boolean} 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cr.defineProperty(MenuItem, 'checkable', cr.PropertyKind.BOOL_ATTR); 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Export 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return { 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MenuItem: MenuItem 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}); 277