Upgrade to ExtJS 3.0.0 - Released 07/06/2009
[extjs.git] / docs / source / SystemMenu.html
1 <html>\r
2 <head>\r
3   <title>The source code</title>\r
4     <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />\r
5     <script type="text/javascript" src="../resources/prettify/prettify.js"></script>\r
6 </head>\r
7 <body  onload="prettyPrint();">\r
8     <pre class="prettyprint lang-js"><div id="cls-Ext.air.SystemMenu"></div>/**\r
9  * @class Ext.air.SystemMenu\r
10  * \r
11  * Provides platform independent handling of adding item to the application menu, creating the menu or \r
12  * items as needed. <br/><br/>\r
13  * \r
14  * This class also provides the ability to bind standard Ext.Action instances with NativeMenuItems\r
15  * \r
16  * @singleton\r
17  */\r
18 Ext.air.SystemMenu = function(){\r
19         var menu;\r
20         // windows\r
21         if(air.NativeWindow.supportsMenu && nativeWindow.systemChrome != air.NativeWindowSystemChrome.NONE) {\r
22         menu = new air.NativeMenu();\r
23         nativeWindow.menu = menu;\r
24     }\r
25     \r
26         // mac\r
27     if(air.NativeApplication.supportsMenu) {\r
28                 menu = air.NativeApplication.nativeApplication.menu;\r
29     }\r
30 \r
31     function find(menu, text){\r
32         for(var i = 0, len = menu.items.length; i < len; i++){\r
33             if(menu.items[i]['label'] == text){\r
34                 return menu.items[i];\r
35             }\r
36         }\r
37         return null;\r
38     }\r
39 \r
40     return {\r
41                 <div id="method-Ext.air.SystemMenu-add"></div>/**\r
42                  * Add items to one of the application menus\r
43                  * @param {String} text The application menu to add the actions to (e.g. 'File' or 'Edit').\r
44                  * @param {Array} actions An array of Ext.Action objects or menu item configs\r
45                  * @param {Number} mindex The index of the character in "text" which should be used for \r
46                  * keyboard access\r
47                  * @return air.NativeMenu The raw submenu\r
48                  */\r
49                 add: function(text, actions, mindex){\r
50 \r
51             var item = find(menu, text);\r
52             if(!item){\r
53                 item = menu.addItem(new air.NativeMenuItem(text));\r
54                 item.mnemonicIndex = mindex || 0;\r
55 \r
56                 item.submenu = new air.NativeMenu();\r
57                         }\r
58                         for (var i = 0, len = actions.length; i < len; i++) {\r
59                                 item.submenu.addItem(actions[i] == '-' ? new air.NativeMenuItem("", true) : Ext.air.MenuItem(actions[i]));\r
60                         }\r
61             return item.submenu;\r
62         },\r
63                 \r
64                 <div id="method-Ext.air.SystemMenu-get"></div>/**\r
65                  * Returns the application menu\r
66                  */\r
67                 get : function(){\r
68                         return menu;\r
69                 }\r
70         };      \r
71 }();\r
72 \r
73 // ability to bind native menu items to an Ext.Action\r
74 Ext.air.MenuItem = function(action){\r
75         if(!action.isAction){\r
76                 action = new Ext.Action(action);\r
77         }\r
78         var cfg = action.initialConfig;\r
79         var nativeItem = new air.NativeMenuItem(cfg.itemText || cfg.text);\r
80         \r
81         nativeItem.enabled = !cfg.disabled;\r
82 \r
83     if(!Ext.isEmpty(cfg.checked)){\r
84         nativeItem.checked = cfg.checked;\r
85     }\r
86 \r
87     var handler = cfg.handler;\r
88         var scope = cfg.scope;\r
89         \r
90         nativeItem.addEventListener(air.Event.SELECT, function(){\r
91                 handler.call(scope || window, cfg);\r
92         });\r
93         \r
94         action.addComponent({\r
95                 setDisabled : function(v){\r
96                         nativeItem.enabled = !v;\r
97                 },\r
98                 \r
99                 setText : function(v){\r
100                         nativeItem.label = v;\r
101                 },\r
102                 \r
103                 setVisible : function(v){\r
104                         // could not find way to hide in air so disable?\r
105                         nativeItem.enabled = !v;\r
106                 },\r
107                 \r
108                 setHandler : function(newHandler, newScope){\r
109                         handler = newHandler;\r
110                         scope = newScope;\r
111                 },\r
112                 // empty function\r
113                 on : function(){}\r
114         });\r
115         \r
116         return nativeItem;\r
117 }\r
118 </pre>    \r
119 </body>\r
120 </html>