menu_button.h revision 3f50c38dc070f4bb515c1b64450dae14f316474e
1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_UI_COCOA_MENU_BUTTON_H_ 6#define CHROME_BROWSER_UI_COCOA_MENU_BUTTON_H_ 7#pragma once 8 9#import <Cocoa/Cocoa.h> 10 11#include "base/scoped_nsobject.h" 12 13// This a button which displays a user-provided menu "attached" below it upon 14// being clicked or dragged (or clicked and held). It expects a 15// |ClickHoldButtonCell| as cell. 16// 17// There are two different behaviors of this button depending on the value of 18// the |openMenuOnClick| property. If YES, the target-action mechanism will be 19// handled internally to always show the menu when clicked. This behavior is 20// used for the Wrench menu, for example. When the property is NO, the button 21// can have a separate target-action but will open the menu when clicked and 22// held. This is used for the toolbar back/forward buttons, which have a 23// primary action and the menu as a secondary click-hold action. The default 24// value is NO so that custom actions can be hooked up in Interface Builder. 25@interface MenuButton : NSButton { 26 @private 27 scoped_nsobject<NSMenu> attachedMenu_; 28 BOOL attachedMenuEnabled_; 29 BOOL openMenuOnClick_; 30 scoped_nsobject<NSPopUpButtonCell> popUpCell_; 31} 32 33// The menu to display. Note that it should have no (i.e., a blank) title and 34// that the 0-th entry should be blank (and won't be displayed). (This is 35// because we use a pulldown list, for which Cocoa uses the 0-th item as "title" 36// in the button. This might change if we ever switch to a pop-up. Our direct 37// use of the given NSMenu object means that the one can set and use NSMenu's 38// delegate as usual.) 39@property (retain, nonatomic) IBOutlet NSMenu* attachedMenu; 40 41// Whether or not to open the menu when the button is clicked. Otherwise, the 42// menu will only be opened when clicked and held. 43@property (assign, nonatomic) BOOL openMenuOnClick; 44 45@end // @interface MenuButton 46 47// Available for subclasses. 48@interface MenuButton (Protected) 49- (void)configureCell; 50@end 51 52#endif // CHROME_BROWSER_UI_COCOA_MENU_BUTTON_H_ 53