summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/menu_controller.h
diff options
context:
space:
mode:
authorpinkerton@chromium.org <pinkerton@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-12-09 19:56:30 +0000
committerpinkerton@chromium.org <pinkerton@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-12-09 19:56:30 +0000
commit273865aa130f61f321d3eeafc0ea5a2a6dc9adf8 (patch)
tree05b9f5275ef0a0c63592f9b1102235aead02b59d /chrome/browser/cocoa/menu_controller.h
parent12c7b1eaa34937a72c8b81de17fdb5c72d842431 (diff)
downloadchromium_src-273865aa130f61f321d3eeafc0ea5a2a6dc9adf8.zip
chromium_src-273865aa130f61f321d3eeafc0ea5a2a6dc9adf8.tar.gz
chromium_src-273865aa130f61f321d3eeafc0ea5a2a6dc9adf8.tar.bz2
Share the code that builds the page menu in a common model, make Mac and Win use it. Implement a mac menu controller that takes this model and generates an NSMenu. Remove the Page Menu NSMenu from Toolbar.xib since it's now created in code.
BUG=22646 TEST=page menu should work as before Review URL: http://codereview.chromium.org/465130 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@34179 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/cocoa/menu_controller.h')
-rw-r--r--chrome/browser/cocoa/menu_controller.h49
1 files changed, 49 insertions, 0 deletions
diff --git a/chrome/browser/cocoa/menu_controller.h b/chrome/browser/cocoa/menu_controller.h
new file mode 100644
index 0000000..d0a085f
--- /dev/null
+++ b/chrome/browser/cocoa/menu_controller.h
@@ -0,0 +1,49 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
+// source code is governed by a BSD-style license that can be found in the
+// LICENSE file.
+
+#ifndef CHROME_BROWSER_COCOA_MENU_CONTROLLER_H_
+#define CHROME_BROWSER_COCOA_MENU_CONTROLLER_H_
+
+#import <Cocoa/Cocoa.h>
+
+#include "base/scoped_nsobject.h"
+#include "base/scoped_ptr.h"
+
+namespace menus {
+class MenuModel;
+}
+
+// A controller for the cross-platform menu model. The menu that's created
+// has the tag and represented object set for each menu item. The object is a
+// NSValue holding a pointer to the model for that level of the menu (to
+// allow for hierarchical menus). The tag is the index into that model for
+// that particular item. It is important that the model outlives this object
+// as it only maintains weak references.
+// TODO(pinkerton): Handle changes to the model. SimpleMenuModel doesn't yet
+// notify when changes are made.
+@interface MenuController : NSObject {
+ @private
+ scoped_nsobject<NSMenu> menu_;
+ BOOL useWithPopUpButtonCell_; // If YES, 0th item is blank
+}
+
+// Builds a NSMenu from the pre-built model (must not be nil). Changes made
+// to the contents of the model after calling this will not be noticed. If
+// the menu will be displayed by a NSPopUpButtonCell, it needs to be of a
+// slightly different form (0th item is empty). Note this attribute of the menu
+// cannot be changed after it has been created.
+- (id)initWithModel:(menus::MenuModel*)model
+ useWithPopUpButtonCell:(BOOL)useWithCell;
+
+// Access to the constructed menu.
+- (NSMenu*)menu;
+
+@end
+
+// Exposed only for unit testing, do not call directly.
+@interface MenuController(PrivateExposedForTesting)
+- (BOOL)validateUserInterfaceItem:(id<NSValidatedUserInterfaceItem>)item;
+@end
+
+#endif // CHROME_BROWSER_COCOA_MENU_CONTROLLER_H_