4 * Copyright, Moxiecode Systems AB
5 * Released under LGPL License.
7 * License: http://www.tinymce.com/license
8 * Contributing: http://www.tinymce.com/contributing
15 * @class tinymce.ui.Menu
16 * @extends tinymce.ui.FloatPanel
18 define("tinymce/ui/Menu", [
19 "tinymce/ui/FloatPanel",
20 "tinymce/ui/KeyboardNavigation",
21 "tinymce/ui/MenuItem",
23 ], function(FloatPanel, KeyboardNavigation, MenuItem, Tools) {
26 var Menu = FloatPanel.extend({
28 defaultType: 'menuitem',
35 * Constructs a instance with the specified settings.
38 * @param {Object} settings Name/value object with settings.
40 init: function(settings) {
43 settings.autohide = true;
44 settings.constrainToViewport = true;
46 if (settings.itemDefaults) {
47 var items = settings.items, i = items.length;
50 items[i] = Tools.extend({}, settings.itemDefaults, items[i]);
54 self._super(settings);
55 self.addClass('menu');
57 self.keyNav = new KeyboardNavigation({
60 enableLeftRight: true,
62 leftAction: function() {
63 if (self.parent() instanceof MenuItem) {
68 onCancel: function() {
69 self.fire('cancel', {}, false);
76 * Repaints the control after a layout operation.
81 this.toggleClass('menu-align', true);
85 this.getEl().style.height = '';
86 this.getEl('body').style.height = '';
92 * Hides/closes the menu.
105 * Hide menu and all sub menus.
109 hideAll: function() {
112 this.find('menuitem').exec('hideMenu');
114 return self._super();
118 * Invoked before the menu is rendered.
122 preRender: function() {
125 self.items().each(function(ctrl) {
126 var settings = ctrl.settings;
128 if (settings.icon || settings.selectable) {
129 self._hasIcons = true;
134 return self._super();