diff options
Diffstat (limited to 'chrome/browser/ui/cocoa/preferences_window_controller.h')
-rw-r--r-- | chrome/browser/ui/cocoa/preferences_window_controller.h | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/chrome/browser/ui/cocoa/preferences_window_controller.h b/chrome/browser/ui/cocoa/preferences_window_controller.h new file mode 100644 index 0000000..cfec955 --- /dev/null +++ b/chrome/browser/ui/cocoa/preferences_window_controller.h @@ -0,0 +1,241 @@ +// Copyright (c) 2010 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 <Cocoa/Cocoa.h> + +#include "base/scoped_ptr.h" +#include "base/scoped_nsobject.h" +#include "chrome/browser/options_window.h" +#include "chrome/browser/prefs/pref_member.h" +#include "chrome/browser/prefs/pref_set_observer.h" +#include "chrome/browser/prefs/pref_change_registrar.h" + +namespace PreferencesWindowControllerInternal { +class PrefObserverBridge; +class ManagedPrefsBannerState; +} + +@class CustomHomePagesModel; +@class FontLanguageSettingsController; +class PrefService; +class Profile; +class ProfileSyncService; +@class SearchEngineListModel; +@class VerticalGradientView; +@class WindowSizeAutosaver; + +// A window controller that handles the preferences window. The bulk of the +// work is handled via Cocoa Bindings and getter/setter methods that wrap +// cross-platform PrefMember objects. When prefs change in the back-end +// (that is, outside of this UI), our observer receives a notification and can +// tickle the KVO to update the UI so we are always in sync. The bindings are +// specified in the nib file. Preferences are persisted into the back-end +// as they are changed in the UI, and are thus immediately available even while +// the window is still open. When the window closes, a notification is sent +// via the system NotificationCenter. This can be used as a signal to +// release this controller, as it's likely the client wants to enforce there +// only being one (we don't do that internally as it makes it very difficult +// to unit test). +@interface PreferencesWindowController : NSWindowController { + @private + Profile* profile_; // weak ref + OptionsPage initialPage_; + PrefService* prefs_; // weak ref - Obtained from profile_ for convenience. + // weak ref - Also obtained from profile_ for convenience. May be NULL. + ProfileSyncService* syncService_; + scoped_ptr<PreferencesWindowControllerInternal::PrefObserverBridge> + observer_; // Watches for pref changes. + PrefChangeRegistrar registrar_; // Manages pref change observer registration. + scoped_nsobject<WindowSizeAutosaver> sizeSaver_; + NSView* currentPrefsView_; // weak ref - current prefs page view. + scoped_ptr<PreferencesWindowControllerInternal::ManagedPrefsBannerState> + bannerState_; + BOOL managedPrefsBannerVisible_; + + IBOutlet NSToolbar* toolbar_; + IBOutlet VerticalGradientView* managedPrefsBannerView_; + IBOutlet NSImageView* managedPrefsBannerWarningImage_; + + // The views we'll rotate through + IBOutlet NSView* basicsView_; + IBOutlet NSView* personalStuffView_; + IBOutlet NSView* underTheHoodView_; + // The last page the user was on when they opened the Options window. + IntegerPrefMember lastSelectedPage_; + + // The groups of the Basics view for layout fixup. + IBOutlet NSArray* basicsGroupStartup_; + IBOutlet NSArray* basicsGroupHomePage_; + IBOutlet NSArray* basicsGroupToolbar_; + IBOutlet NSArray* basicsGroupSearchEngine_; + IBOutlet NSArray* basicsGroupDefaultBrowser_; + + // The groups of the Personal Stuff view for layout fixup. + IBOutlet NSArray* personalStuffGroupSync_; + IBOutlet NSArray* personalStuffGroupPasswords_; + IBOutlet NSArray* personalStuffGroupAutofill_; + IBOutlet NSArray* personalStuffGroupBrowserData_; + IBOutlet NSArray* personalStuffGroupThemes_; + + // Having two animations around is bad (they fight), so just use one. + scoped_nsobject<NSViewAnimation> animation_; + + IBOutlet NSArrayController* customPagesArrayController_; + + // Basics panel + IntegerPrefMember restoreOnStartup_; + scoped_nsobject<CustomHomePagesModel> customPagesSource_; + BooleanPrefMember newTabPageIsHomePage_; + StringPrefMember homepage_; + BooleanPrefMember showHomeButton_; + BooleanPrefMember instantEnabled_; + IBOutlet NSButton* instantCheckbox_; + IBOutlet NSTextField* instantExperiment_; + scoped_nsobject<SearchEngineListModel> searchEngineModel_; + // Used when creating a new home page url to make the new cell editable. + BOOL pendingSelectForEdit_; + BOOL restoreButtonsEnabled_; + BOOL restoreURLsEnabled_; + BOOL showHomeButtonEnabled_; + BOOL defaultSearchEngineEnabled_; + + // User Data panel + BooleanPrefMember askSavePasswords_; + BooleanPrefMember autoFillEnabled_; + IBOutlet NSButton* autoFillSettingsButton_; + IBOutlet NSButton* syncButton_; + IBOutlet NSButton* syncCustomizeButton_; + IBOutlet NSTextField* syncStatus_; + IBOutlet NSButton* syncLink_; + IBOutlet NSButton* privacyDashboardLink_; + scoped_nsobject<NSColor> syncStatusNoErrorBackgroundColor_; + scoped_nsobject<NSColor> syncLinkNoErrorBackgroundColor_; + scoped_nsobject<NSColor> syncErrorBackgroundColor_; + BOOL passwordManagerChoiceEnabled_; + BOOL passwordManagerButtonEnabled_; + BOOL autoFillSettingsButtonEnabled_; + + // Under the hood panel + IBOutlet NSView* underTheHoodContentView_; + IBOutlet NSScrollView* underTheHoodScroller_; + IBOutlet NSButton* contentSettingsButton_; + IBOutlet NSButton* clearDataButton_; + BooleanPrefMember alternateErrorPages_; + BooleanPrefMember useSuggest_; + BooleanPrefMember dnsPrefetch_; + BooleanPrefMember safeBrowsing_; + BooleanPrefMember metricsReporting_; + IBOutlet NSPathControl* downloadLocationControl_; + IBOutlet NSButton* downloadLocationButton_; + StringPrefMember defaultDownloadLocation_; + BooleanPrefMember askForSaveLocation_; + IBOutlet NSButton* resetFileHandlersButton_; + StringPrefMember autoOpenFiles_; + BooleanPrefMember translateEnabled_; + BooleanPrefMember tabsToLinks_; + FontLanguageSettingsController* fontLanguageSettings_; + StringPrefMember currentTheme_; + IBOutlet NSButton* enableLoggingCheckbox_; + scoped_ptr<PrefSetObserver> proxyPrefs_; + BOOL showAlternateErrorPagesEnabled_; + BOOL useSuggestEnabled_; + BOOL dnsPrefetchEnabled_; + BOOL safeBrowsingEnabled_; + BOOL metricsReportingEnabled_; + BOOL proxiesConfigureButtonEnabled_; +} + +// Designated initializer. |profile| should not be NULL. +- (id)initWithProfile:(Profile*)profile initialPage:(OptionsPage)initialPage; + +// Show the preferences window. +- (void)showPreferences:(id)sender; + +// Switch to the given preference page. +- (void)switchToPage:(OptionsPage)page animate:(BOOL)animate; + +// Enables or disables the restoreOnStartup elements +- (void) setEnabledStateOfRestoreOnStartup; + +// IBAction methods for responding to user actions. + +// Basics panel +- (IBAction)addHomepage:(id)sender; +- (IBAction)removeSelectedHomepages:(id)sender; +- (IBAction)useCurrentPagesAsHomepage:(id)sender; +- (IBAction)manageSearchEngines:(id)sender; +- (IBAction)toggleInstant:(id)sender; +- (IBAction)learnMoreAboutInstant:(id)sender; +- (IBAction)makeDefaultBrowser:(id)sender; + +// User Data panel +- (IBAction)doSyncAction:(id)sender; +- (IBAction)doSyncCustomize:(id)sender; +- (IBAction)doSyncReauthentication:(id)sender; +- (IBAction)showPrivacyDashboard:(id)sender; +- (IBAction)showSavedPasswords:(id)sender; +- (IBAction)showAutoFillSettings:(id)sender; +- (IBAction)importData:(id)sender; +- (IBAction)resetThemeToDefault:(id)sender; +- (IBAction)themesGallery:(id)sender; + +// Under the hood +- (IBAction)showContentSettings:(id)sender; +- (IBAction)clearData:(id)sender; +- (IBAction)privacyLearnMore:(id)sender; +- (IBAction)browseDownloadLocation:(id)sender; +- (IBAction)resetAutoOpenFiles:(id)sender; +- (IBAction)changeFontAndLanguageSettings:(id)sender; +- (IBAction)openProxyPreferences:(id)sender; +- (IBAction)showCertificates:(id)sender; +- (IBAction)resetToDefaults:(id)sender; + +// When a toolbar button is clicked +- (IBAction)toolbarButtonSelected:(id)sender; + +// Usable from cocoa bindings to hook up the custom home pages table. +@property (nonatomic, readonly) CustomHomePagesModel* customPagesSource; + +// Properties for the enabled state of various UI elements. Keep these ordered +// by occurrence on the dialog. +@property (nonatomic) BOOL restoreButtonsEnabled; +@property (nonatomic) BOOL restoreURLsEnabled; +@property (nonatomic) BOOL showHomeButtonEnabled; +@property (nonatomic) BOOL defaultSearchEngineEnabled; +@property (nonatomic) BOOL passwordManagerChoiceEnabled; +@property (nonatomic) BOOL passwordManagerButtonEnabled; +@property (nonatomic) BOOL autoFillSettingsButtonEnabled; +@property (nonatomic) BOOL showAlternateErrorPagesEnabled; +@property (nonatomic) BOOL useSuggestEnabled; +@property (nonatomic) BOOL dnsPrefetchEnabled; +@property (nonatomic) BOOL safeBrowsingEnabled; +@property (nonatomic) BOOL metricsReportingEnabled; +@property (nonatomic) BOOL proxiesConfigureButtonEnabled; +@end + +@interface PreferencesWindowController(Testing) + +- (IntegerPrefMember*)lastSelectedPage; +- (NSToolbar*)toolbar; +- (NSView*)basicsView; +- (NSView*)personalStuffView; +- (NSView*)underTheHoodView; + +// Converts the given OptionsPage value (which may be OPTIONS_PAGE_DEFAULT) +// into a concrete OptionsPage value. +- (OptionsPage)normalizePage:(OptionsPage)page; + +// Returns the toolbar item corresponding to the given page. Should be +// called only after awakeFromNib is. +- (NSToolbarItem*)getToolbarItemForPage:(OptionsPage)page; + +// Returns the (normalized) page corresponding to the given toolbar item. +// Should be called only after awakeFromNib is. +- (OptionsPage)getPageForToolbarItem:(NSToolbarItem*)toolbarItem; + +// Returns the view corresponding to the given page. Should be called +// only after awakeFromNib is. +- (NSView*)getPrefsViewForPage:(OptionsPage)page; + +@end |