| // Copyright (c) 2011 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_UI_COCOA_EXTENSIONS_BROWSER_ACTIONS_CONTROLLER_H_ |
| #define CHROME_BROWSER_UI_COCOA_EXTENSIONS_BROWSER_ACTIONS_CONTROLLER_H_ |
| |
| #import <Cocoa/Cocoa.h> |
| |
| #import "base/mac/scoped_nsobject.h" |
| #include "base/memory/scoped_ptr.h" |
| |
| class Browser; |
| @class BrowserActionButton; |
| @class BrowserActionsContainerView; |
| @class ExtensionPopupController; |
| class ExtensionServiceObserverBridge; |
| @class MenuButton; |
| class Profile; |
| |
| namespace extensions { |
| class Extension; |
| class ExtensionToolbarModel; |
| } |
| |
| // Sent when the visibility of the Browser Actions changes. |
| extern NSString* const kBrowserActionVisibilityChangedNotification; |
| |
| // Handles state and provides an interface for controlling the Browser Actions |
| // container within the Toolbar. |
| @interface BrowserActionsController : NSObject<NSMenuDelegate> { |
| @private |
| // Reference to the current browser. Weak. |
| Browser* browser_; |
| |
| // The view from Toolbar.xib we'll be rendering our browser actions in. Weak. |
| BrowserActionsContainerView* containerView_; |
| |
| // The current profile. Weak. |
| Profile* profile_; |
| |
| // The model that tracks the order of the toolbar icons. Weak. |
| extensions::ExtensionToolbarModel* toolbarModel_; |
| |
| // The observer for the ExtensionService we're getting events from. |
| scoped_ptr<ExtensionServiceObserverBridge> observer_; |
| |
| // A dictionary of Extension ID -> BrowserActionButton pairs representing the |
| // buttons present in the container view. The ID is a string unique to each |
| // extension. |
| base::scoped_nsobject<NSMutableDictionary> buttons_; |
| |
| // Array of hidden buttons in the correct order in which the user specified. |
| base::scoped_nsobject<NSMutableArray> hiddenButtons_; |
| |
| // The currently running chevron animation (fade in/out). |
| base::scoped_nsobject<NSViewAnimation> chevronAnimation_; |
| |
| // The chevron button used when Browser Actions are hidden. |
| base::scoped_nsobject<MenuButton> chevronMenuButton_; |
| |
| // The Browser Actions overflow menu. |
| base::scoped_nsobject<NSMenu> overflowMenu_; |
| } |
| |
| @property(readonly, nonatomic) BrowserActionsContainerView* containerView; |
| |
| // Initializes the controller given the current browser and container view that |
| // will hold the browser action buttons. |
| - (id)initWithBrowser:(Browser*)browser |
| containerView:(BrowserActionsContainerView*)container; |
| |
| // Update the display of all buttons. |
| - (void)update; |
| |
| // Returns the current number of browser action buttons within the container, |
| // whether or not they are displayed. |
| - (NSUInteger)buttonCount; |
| |
| // Returns the current number of browser action buttons displayed in the |
| // container. |
| - (NSUInteger)visibleButtonCount; |
| |
| // Resizes the container given the number of visible buttons, taking into |
| // account the size of the grippy. Also updates the persistent width preference. |
| - (void)resizeContainerAndAnimate:(BOOL)animate; |
| |
| // Returns the NSView for the action button associated with an extension. |
| - (NSView*)browserActionViewForExtension:( |
| const extensions::Extension*)extension; |
| |
| // Returns the saved width determined by the number of shown Browser Actions |
| // preference property. If no preference is found, then the width for the |
| // container is returned as if all buttons are shown. |
| - (CGFloat)savedWidth; |
| |
| // Returns where the popup arrow should point to for a given Browser Action. If |
| // it is passed an extension that is not a Browser Action, then it will return |
| // NSZeroPoint. |
| - (NSPoint)popupPointForBrowserAction:(const extensions::Extension*)extension; |
| |
| // Returns whether the chevron button is currently hidden or in the process of |
| // being hidden (fading out). Will return NO if it is not hidden or is in the |
| // process of fading in. |
| - (BOOL)chevronIsHidden; |
| |
| // Activates the browser action for the extension that has the given id. |
| - (void)activateBrowserAction:(const std::string&)extension_id; |
| |
| @end // @interface BrowserActionsController |
| |
| @interface BrowserActionsController(TestingAPI) |
| - (NSButton*)buttonWithIndex:(NSUInteger)index; |
| @end |
| |
| #endif // CHROME_BROWSER_UI_COCOA_EXTENSIONS_BROWSER_ACTIONS_CONTROLLER_H_ |