+ onShow : function()\r
+ {\r
+ var selection = this.editor.getSelection();\r
+\r
+ // Selection will be unavailable after menu shows up\r
+ // in IE, lock it now.\r
+ if ( CKEDITOR.env.ie )\r
+ selection && selection.lock();\r
+\r
+ var element = selection && selection.getStartElement(),\r
+ listeners = this._.listeners,\r
+ includedItems = [];\r
+\r
+ this.removeAll();\r
+ // Call all listeners, filling the list of items to be displayed.\r
+ for ( var i = 0 ; i < listeners.length ; i++ )\r
+ {\r
+ var listenerItems = listeners[ i ]( element, selection );\r
+\r
+ if ( listenerItems )\r
+ {\r
+ for ( var itemName in listenerItems )\r
+ {\r
+ var item = this.editor.getMenuItem( itemName );\r
+\r
+ if ( item )\r
+ {\r
+ item.state = listenerItems[ itemName ];\r
+ this.add( item );\r
+ }\r
+ }\r
+ }\r
+ }\r
+ },\r
+\r
+ onClick : function( item )\r
+ {\r
+ this.hide();\r
+\r
+ if ( item.onClick )\r
+ item.onClick();\r
+ else if ( item.command )\r
+ this.editor.execCommand( item.command );\r
+ },\r
+\r
+ onEscape : function( keystroke )\r
+ {\r
+ var parent = this.parent;\r
+ // 1. If it's sub-menu, restore the last focused item\r
+ // of upper level menu.\r
+ // 2. In case of a top-menu, close it.\r
+ if ( parent )\r
+ {\r
+ parent._.panel.hideChild();\r
+ // Restore parent block item focus.\r
+ var parentBlock = parent._.panel._.panel._.currentBlock,\r
+ parentFocusIndex = parentBlock._.focusIndex;\r
+ parentBlock._.markItem( parentFocusIndex );\r
+ }\r
+ else if ( keystroke == 27 )\r
+ {\r
+ this.hide();\r
+ this.editor.focus();\r
+ }\r
+ return false;\r
+ },\r
+\r
+ onHide : function()\r
+ {\r
+ if ( CKEDITOR.env.ie )\r
+ {\r
+ var selection = this.editor.getSelection();\r
+ selection && selection.unlock();\r
+ }\r
+\r
+ this.onHide && this.onHide();\r
+ },\r
+\r