summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/cocoa/preferences_window_controller.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/ui/cocoa/preferences_window_controller.h')
-rw-r--r--chrome/browser/ui/cocoa/preferences_window_controller.h241
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