Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1836)

Unified Diff: chrome/browser/cocoa/back_forward_menu_controller.mm

Issue 160496: Implement back/forward toolbar menus on Mac.... (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 11 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/cocoa/back_forward_menu_controller.mm
===================================================================
--- chrome/browser/cocoa/back_forward_menu_controller.mm (revision 0)
+++ chrome/browser/cocoa/back_forward_menu_controller.mm (revision 0)
@@ -0,0 +1,100 @@
+// 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.
+
+#import "chrome/browser/cocoa/back_forward_menu_controller.h"
+
+#include "base/logging.h"
+#include "base/scoped_ptr.h"
+#include "base/sys_string_conversions.h"
+#include "chrome/browser/back_forward_menu_model.h"
+#import "chrome/browser/cocoa/delayedmenu_button.h"
+#include "skia/ext/skia_utils_mac.h"
+
+using base::SysUTF16ToNSString;
+using gfx::SkBitmapToNSImage;
+
+@implementation BackForwardMenuController
+
+// Accessors and mutators:
+
+@synthesize type = type_;
+
+// Own methods:
+
+- (id)initWithBrowser:(Browser*)browser
+ modelType:(BackForwardMenuType)type
+ button:(DelayedMenuButton*)button {
+ if ((self = [super init])) {
+ type_ = type;
+ button_ = button;
+ model_.reset(new BackForwardMenuModel(browser, type_));
+ DCHECK(model_.get());
+ menu_.reset([[NSMenu alloc] initWithTitle:@""]);
+ DCHECK(menu_.get());
+ [menu_ setDelegate:self];
+
+ [button_ setMenu:menu_];
+ [button_ setMenuEnabled:YES];
+ }
+ return self;
+}
+
+// Methods as delegate:
+
+// Called by menu_ just before tracking begins.
+//TODO(viettrungluu@gmail.com): do anything for chapter stops (see model)?
+- (void)menuNeedsUpdate:(NSMenu*)menu {
+ DCHECK(menu == menu_);
+
+ // Remove old menu items (backwards order is as good as any).
+ for (NSInteger i = [menu_ numberOfItems]; i > 0; i--)
+ [menu_ removeItemAtIndex:(i-1)];
+
+ // 0-th item must be blank. (This is because we use a pulldown list, for which
+ // Cocoa uses the 0-th item as "title" in the button.)
+ [menu_ insertItemWithTitle:@""
+ action:nil
+ keyEquivalent:@""
+ atIndex:0];
+ for (int menuID = 1; menuID <= model_->GetTotalItemCount(); menuID++) {
+ if (model_->IsSeparator(menuID)) {
+ [menu_ insertItem:[NSMenuItem separatorItem]
+ atIndex:menuID];
+ } else {
+ // Create a menu item with the right label.
+ NSMenuItem* menuItem = [[NSMenuItem alloc]
+ initWithTitle:SysUTF16ToNSString(model_->GetItemLabel(menuID))
+ action:nil
+ keyEquivalent:@""];
+ [menuItem autorelease];
+
+ // Only enable it if it's supposed to do something.
+ [menuItem setEnabled:(model_->ItemHasCommand(menuID) ? YES : NO)];
+
+ // Icon (if it has one).
+ if (model_->ItemHasIcon(menuID))
+ [menuItem setImage:SkBitmapToNSImage(model_->GetItemIcon(menuID))];
+
+ // This will make it call our |-executeMenuItem:| method. We store the
+ // |menuID| (or |menu_id|) in the tag.
+ [menuItem setTag:menuID];
+ [menuItem setTarget:self];
+ [menuItem setAction:@selector(executeMenuItem:)];
+
+ // Put it in the menu!
+ [menu_ insertItem:menuItem
+ atIndex:menuID];
+ }
+ }
+}
+
+// Action methods:
+
+- (void)executeMenuItem:(id)sender {
+ DCHECK([sender isKindOfClass:[NSMenuItem class]]);
+ int menuID = [sender tag];
+ model_->ExecuteCommandById(menuID);
+}
+
+@end // @implementation BackForwardMenuController
Property changes on: chrome/browser/cocoa/back_forward_menu_controller.mm
___________________________________________________________________
Name: svn:eol-style
+ LF
« no previous file with comments | « chrome/browser/cocoa/back_forward_menu_controller.h ('k') | chrome/browser/cocoa/browser_window_controller.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698