// 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_TOOLBAR_CONTROLLER_H_ #define CHROME_BROWSER_COCOA_TOOLBAR_CONTROLLER_H_ #import #include "base/scoped_ptr.h" #include "base/scoped_nsobject.h" #import "chrome/browser/cocoa/command_observer_bridge.h" #import "chrome/browser/cocoa/bookmark_bar_controller.h" #include "chrome/common/pref_member.h" @class AutocompleteTextField; @class AutocompleteTextFieldEditor; class CommandUpdater; class LocationBar; class LocationBarViewMac; namespace ToolbarControllerInternal { class PrefObserverBridge; } class Profile; class TabContents; class ToolbarModel; class ToolbarView; // A controller for the toolbar in the browser window. Manages // updating the state for location bar and back/fwd/reload/go buttons. // Manages the bookmark bar and it's position in the window relative to // the web content view. @interface ToolbarController : NSViewController { @private ToolbarModel* toolbarModel_; // weak, one per window CommandUpdater* commands_; // weak, one per window Profile* profile_; // weak, one per window scoped_ptr commandObserver_; scoped_ptr locationBarView_; scoped_nsobject autocompleteTextFieldEditor_; scoped_nsobject bookmarkBarController_; id bookmarkBarDelegate_; // weak NSView* webContentView_; // weak; where the web goes NSView* infoBarsView_; // weak; where the infobars go // Used for monitoring the optional toolbar button prefs. scoped_ptr prefObserver_; BooleanPrefMember showHomeButton_; BooleanPrefMember showPageOptionButtons_; BOOL hasToolbar_; // if NO, we only have the location bar. IBOutlet NSMenu* pageMenu_; IBOutlet NSMenu* wrenchMenu_; // The ordering is important for unit tests. If new items are added or the // ordering is changed, make sure to update |-toolbarViews| and the // corresponding enum in the unit tests. IBOutlet NSButton* backButton_; IBOutlet NSButton* forwardButton_; IBOutlet NSButton* reloadButton_; IBOutlet NSButton* homeButton_; IBOutlet NSButton* starButton_; IBOutlet NSButton* goButton_; IBOutlet NSButton* pageButton_; IBOutlet NSButton* wrenchButton_; IBOutlet AutocompleteTextField* locationBar_; } // Initialize the toolbar and register for command updates. The profile is // needed for initializing the location bar. - (id)initWithModel:(ToolbarModel*)model commands:(CommandUpdater*)commands profile:(Profile*)profile webContentView:(NSView*)webContentView infoBarsView:(NSView*)infoBarsView bookmarkDelegate:(id)delegate; // Get the C++ bridge object representing the location bar for this tab. - (LocationBar*)locationBar; // Called by the Window delegate so we can provide a custom field editor if // needed. // Note that this may be called for objects unrelated to the toolbar. // returns nil if we don't want to override the custom field editor for |obj|. - (id)customFieldEditorForObject:(id)obj; // Make the location bar the first responder, if possible. - (void)focusLocationBar; // Updates the toolbar (and transitively the location bar) with the states of // the specified |tab|. If |shouldRestore| is true, we're switching // (back?) to this tab and should restore any previous location bar state // (such as user editing) as well. - (void)updateToolbarWithContents:(TabContents*)tabForRestoring shouldRestoreState:(BOOL)shouldRestore; // Sets whether or not the current page in the frontmost tab is bookmarked. - (void)setStarredState:(BOOL)isStarred; // Called to update the loading state. Handles updating the go/stop button // state. - (void)setIsLoading:(BOOL)isLoading; // Allow turning off the toolbar (but we keep the location bar // around). This changes the behavior of other methods, like // [self view]. - (void)setHasToolbar:(BOOL)toolbar; // Return the bookmark bar controller. - (BookmarkBarController*)bookmarkBarController; // Actions for the optional menu buttons for the page and wrench menus. These // will show a menu while the mouse is down. - (IBAction)showPageMenu:(id)sender; - (IBAction)showWrenchMenu:(id)sender; @end // A set of private methods used by tests, in the absence of "friends" in ObjC. @interface ToolbarController(PrivateTestMethods) // Returns an array of views in the order of the outlets above. - (NSArray*)toolbarViews; - (void)showOptionalHomeButton; - (void)showOptionalPageWrenchButtons; @end #endif // CHROME_BROWSER_COCOA_TOOLBAR_CONTROLLER_H_