diff options
author | pinkerton@chromium.org <pinkerton@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-09 19:56:30 +0000 |
---|---|---|
committer | pinkerton@chromium.org <pinkerton@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-09 19:56:30 +0000 |
commit | 273865aa130f61f321d3eeafc0ea5a2a6dc9adf8 (patch) | |
tree | 05b9f5275ef0a0c63592f9b1102235aead02b59d /chrome/browser/cocoa/menu_controller.h | |
parent | 12c7b1eaa34937a72c8b81de17fdb5c72d842431 (diff) | |
download | chromium_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.h | 49 |
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_ |