| Index: ui/message_center/cocoa/settings_controller.mm
|
| diff --git a/ui/message_center/cocoa/settings_controller.mm b/ui/message_center/cocoa/settings_controller.mm
|
| deleted file mode 100644
|
| index 37adba2b098f33f5902ed0eb966b293c9db0bf4f..0000000000000000000000000000000000000000
|
| --- a/ui/message_center/cocoa/settings_controller.mm
|
| +++ /dev/null
|
| @@ -1,343 +0,0 @@
|
| -// Copyright (c) 2013 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 "ui/message_center/cocoa/settings_controller.h"
|
| -
|
| -#include <algorithm>
|
| -
|
| -#include "base/mac/foundation_util.h"
|
| -#import "base/mac/scoped_nsobject.h"
|
| -#include "base/stl_util.h"
|
| -#include "base/strings/sys_string_conversions.h"
|
| -#include "skia/ext/skia_utils_mac.h"
|
| -#include "ui/base/l10n/l10n_util.h"
|
| -#import "ui/message_center/cocoa/opaque_views.h"
|
| -#import "ui/message_center/cocoa/settings_entry_view.h"
|
| -#import "ui/message_center/cocoa/tray_view_controller.h"
|
| -#include "ui/message_center/message_center_style.h"
|
| -#include "ui/strings/grit/ui_strings.h"
|
| -
|
| -using message_center::settings::kHorizontalMargin;
|
| -using message_center::settings::kEntryHeight;
|
| -
|
| -// Intrinsic padding pixels out of our control.
|
| -const int kIntrinsicHeaderTextTopPadding = 3;
|
| -const int kIntrinsicSubheaderTextTopPadding = 5;
|
| -const int kIntrinsicSubheaderTextBottomPadding = 3;
|
| -const int kIntrinsicDropDownVerticalPadding = 2;
|
| -const int kIntrinsicDropDownHorizontalPadding = 3;
|
| -
|
| -// Corrected padding values used in layout.
|
| -// Calculated additional blank space above the header text, including
|
| -// the intrinsic blank space above the header label.
|
| -const int kCorrectedHeaderTextTopPadding =
|
| - message_center::settings::kTopMargin - kIntrinsicHeaderTextTopPadding;
|
| -
|
| -// Calculated additional blank space above the subheader text, including
|
| -// the intrinsic blank space above the subheader label.
|
| -const int kCorrectedSubheaderTextTopPadding =
|
| - message_center::settings::kTitleToDescriptionSpace -
|
| - kIntrinsicSubheaderTextTopPadding;
|
| -
|
| -// Calcoulated additional vertical padding for the drop-down, including the
|
| -// blank space included with the drop-down control.
|
| -const int kCorrectedDropDownTopPadding =
|
| - message_center::settings::kDescriptionToSwitcherSpace -
|
| - kIntrinsicDropDownVerticalPadding - kIntrinsicSubheaderTextBottomPadding;
|
| -
|
| -// Calculated additional horizontal blank space for the drop down, including
|
| -// the blank space included with the drop-down control.
|
| -const int kCorrectedDropDownMargin =
|
| - kHorizontalMargin - kIntrinsicDropDownHorizontalPadding;
|
| -
|
| -@interface MCSettingsController (Private)
|
| -// Sets the icon on the checkbox corresponding to |notifiers_[index]|.
|
| -- (void)setIcon:(NSImage*)icon forNotifierIndex:(size_t)index;
|
| -
|
| -- (void)setIcon:(NSImage*)icon
|
| - forNotifierId:(const message_center::NotifierId&)id;
|
| -
|
| -// Returns the NSButton corresponding to the checkbox for |notifiers_[index]|.
|
| -- (MCSettingsEntryView*)entryForNotifierAtIndex:(size_t)index;
|
| -
|
| -// Update the contents view.
|
| -- (void)updateView;
|
| -
|
| -// Handler for the notifier group dropdown menu.
|
| -- (void)notifierGroupSelectionChanged:(id)sender;
|
| -
|
| -@end
|
| -
|
| -namespace message_center {
|
| -
|
| -NotifierSettingsObserverMac::~NotifierSettingsObserverMac() {}
|
| -
|
| -void NotifierSettingsObserverMac::UpdateIconImage(const NotifierId& notifier_id,
|
| - const gfx::Image& icon) {
|
| - [settings_controller_ setIcon:icon.AsNSImage() forNotifierId:notifier_id];
|
| -}
|
| -
|
| -void NotifierSettingsObserverMac::NotifierGroupChanged() {
|
| - [settings_controller_ updateView];
|
| -}
|
| -
|
| -void NotifierSettingsObserverMac::NotifierEnabledChanged(
|
| - const NotifierId& notifier_id, bool enabled) {}
|
| -
|
| -} // namespace message_center
|
| -
|
| -@implementation MCSettingsController
|
| -
|
| -- (id)initWithProvider:(message_center::NotifierSettingsProvider*)provider
|
| - trayViewController:(MCTrayViewController*)trayViewController {
|
| - if ((self = [super initWithNibName:nil bundle:nil])) {
|
| - observer_.reset(new message_center::NotifierSettingsObserverMac(self));
|
| - provider_ = provider;
|
| - trayViewController_ = trayViewController;
|
| - provider_->AddObserver(observer_.get());
|
| - }
|
| - return self;
|
| -}
|
| -
|
| -- (void)dealloc {
|
| - provider_->RemoveObserver(observer_.get());
|
| - provider_->OnNotifierSettingsClosing();
|
| - STLDeleteElements(¬ifiers_);
|
| - [super dealloc];
|
| -}
|
| -
|
| -- (NSTextField*)newLabelWithFrame:(NSRect)frame {
|
| - NSColor* color = gfx::SkColorToCalibratedNSColor(
|
| - message_center::kMessageCenterBackgroundColor);
|
| - MCTextField* label =
|
| - [[MCTextField alloc] initWithFrame:frame backgroundColor:color];
|
| -
|
| - return label;
|
| -}
|
| -
|
| -- (void)updateView {
|
| - notifiers_.clear();
|
| - [trayViewController_ updateSettings];
|
| -}
|
| -
|
| -- (void)loadView {
|
| - DCHECK(notifiers_.empty());
|
| - provider_->GetNotifierList(¬ifiers_);
|
| - CGFloat maxHeight = [MCTrayViewController maxTrayClientHeight];
|
| -
|
| - // Container view.
|
| - NSRect fullFrame =
|
| - NSMakeRect(0, 0, [MCTrayViewController trayWidth], maxHeight);
|
| - base::scoped_nsobject<NSBox> view([[NSBox alloc] initWithFrame:fullFrame]);
|
| - [view setBorderType:NSNoBorder];
|
| - [view setBoxType:NSBoxCustom];
|
| - [view setContentViewMargins:NSZeroSize];
|
| - [view setFillColor:gfx::SkColorToCalibratedNSColor(
|
| - message_center::kMessageCenterBackgroundColor)];
|
| - [view setTitlePosition:NSNoTitle];
|
| - [self setView:view];
|
| -
|
| - // "Settings" text.
|
| - NSRect headerFrame = NSMakeRect(kHorizontalMargin,
|
| - kHorizontalMargin,
|
| - NSWidth(fullFrame),
|
| - NSHeight(fullFrame));
|
| - settingsText_.reset([self newLabelWithFrame:headerFrame]);
|
| - [settingsText_ setTextColor:
|
| - gfx::SkColorToCalibratedNSColor(message_center::kRegularTextColor)];
|
| - [settingsText_
|
| - setFont:[NSFont messageFontOfSize:message_center::kTitleFontSize]];
|
| -
|
| - [settingsText_ setStringValue:
|
| - l10n_util::GetNSString(IDS_MESSAGE_CENTER_SETTINGS_BUTTON_LABEL)];
|
| - [settingsText_ sizeToFit];
|
| - headerFrame = [settingsText_ frame];
|
| - headerFrame.origin.y = NSMaxY(fullFrame) - kCorrectedHeaderTextTopPadding -
|
| - NSHeight(headerFrame);
|
| - [[self view] addSubview:settingsText_];
|
| -
|
| - // Subheader.
|
| - NSRect subheaderFrame = NSMakeRect(kHorizontalMargin,
|
| - kHorizontalMargin,
|
| - NSWidth(fullFrame),
|
| - NSHeight(fullFrame));
|
| - detailsText_.reset([self newLabelWithFrame:subheaderFrame]);
|
| - [detailsText_ setTextColor:
|
| - gfx::SkColorToCalibratedNSColor(message_center::kDimTextColor)];
|
| - [detailsText_
|
| - setFont:[NSFont messageFontOfSize:message_center::kMessageFontSize]];
|
| -
|
| - size_t groupCount = provider_->GetNotifierGroupCount();
|
| - [detailsText_ setStringValue:l10n_util::GetNSString(
|
| - groupCount > 1 ? IDS_MESSAGE_CENTER_SETTINGS_DESCRIPTION_MULTIUSER
|
| - : IDS_MESSAGE_CENTER_SETTINGS_DIALOG_DESCRIPTION)];
|
| - [detailsText_ sizeToFit];
|
| - subheaderFrame = [detailsText_ frame];
|
| - subheaderFrame.origin.y =
|
| - NSMinY(headerFrame) - kCorrectedSubheaderTextTopPadding -
|
| - NSHeight(subheaderFrame);
|
| - [[self view] addSubview:detailsText_];
|
| -
|
| - // Profile switcher is only needed for more than one profile.
|
| - NSRect dropDownButtonFrame = subheaderFrame;
|
| - if (groupCount > 1) {
|
| - dropDownButtonFrame = NSMakeRect(kCorrectedDropDownMargin,
|
| - kHorizontalMargin,
|
| - NSWidth(fullFrame),
|
| - NSHeight(fullFrame));
|
| - groupDropDownButton_.reset(
|
| - [[MCDropDown alloc] initWithFrame:dropDownButtonFrame pullsDown:YES]);
|
| - [groupDropDownButton_
|
| - setBackgroundColor:gfx::SkColorToCalibratedNSColor(
|
| - message_center::kMessageCenterBackgroundColor)];
|
| - [groupDropDownButton_ setAction:@selector(notifierGroupSelectionChanged:)];
|
| - [groupDropDownButton_ setTarget:self];
|
| - // Add a dummy item for pull-down.
|
| - [groupDropDownButton_ addItemWithTitle:@""];
|
| - base::string16 title;
|
| - for (size_t i = 0; i < groupCount; ++i) {
|
| - const message_center::NotifierGroup& group =
|
| - provider_->GetNotifierGroupAt(i);
|
| - base::string16 item =
|
| - group.login_info.empty() ? group.name : group.login_info;
|
| - [groupDropDownButton_ addItemWithTitle:base::SysUTF16ToNSString(item)];
|
| - if (provider_->IsNotifierGroupActiveAt(i)) {
|
| - title = item;
|
| - [[groupDropDownButton_ lastItem] setState:NSOnState];
|
| - }
|
| - }
|
| - [groupDropDownButton_ setTitle:base::SysUTF16ToNSString(title)];
|
| - [groupDropDownButton_ sizeToFit];
|
| - dropDownButtonFrame = [groupDropDownButton_ frame];
|
| - dropDownButtonFrame.origin.y =
|
| - NSMinY(subheaderFrame) - kCorrectedDropDownTopPadding -
|
| - NSHeight(dropDownButtonFrame);
|
| - dropDownButtonFrame.size.width =
|
| - NSWidth(fullFrame) - 2 * kCorrectedDropDownMargin;
|
| - [[self view] addSubview:groupDropDownButton_];
|
| - }
|
| -
|
| - // Document view for the notifier settings.
|
| - CGFloat y = 0;
|
| - NSRect documentFrame = NSMakeRect(0, 0, NSWidth(fullFrame), 0);
|
| - base::scoped_nsobject<NSView> documentView(
|
| - [[NSView alloc] initWithFrame:documentFrame]);
|
| - int notifierCount = notifiers_.size();
|
| - for (int i = notifierCount - 1; i >= 0; --i) {
|
| - message_center::Notifier* notifier = notifiers_[i];
|
| - // TODO(thakis): Use a custom button cell.
|
| - NSRect frame = NSMakeRect(kHorizontalMargin,
|
| - y,
|
| - NSWidth(documentFrame) - kHorizontalMargin * 2,
|
| - kEntryHeight);
|
| -
|
| - base::scoped_nsobject<MCSettingsEntryView> entryView(
|
| - [[MCSettingsEntryView alloc]
|
| - initWithController:self
|
| - notifier:notifier
|
| - frame:frame
|
| - hasSeparator:(i != notifierCount - 1)]);
|
| - [documentView addSubview:entryView];
|
| - y += NSHeight(frame);
|
| - }
|
| -
|
| - documentFrame.size.height = y - kIntrinsicDropDownVerticalPadding;
|
| - [documentView setFrame:documentFrame];
|
| -
|
| - // Scroll view for the notifier settings.
|
| - NSRect scrollFrame = documentFrame;
|
| - scrollFrame.origin.y = 0;
|
| - CGFloat remainingHeight = NSMinY(dropDownButtonFrame) - NSMinY(scrollFrame);
|
| -
|
| - if (NSHeight(documentFrame) < remainingHeight) {
|
| - // Everything fits without scrolling.
|
| - CGFloat delta = remainingHeight - NSHeight(documentFrame);
|
| - headerFrame.origin.y -= delta;
|
| - subheaderFrame.origin.y -= delta;
|
| - dropDownButtonFrame.origin.y -= delta;
|
| - fullFrame.size.height -= delta;
|
| - } else {
|
| - scrollFrame.size.height = remainingHeight;
|
| - }
|
| -
|
| - scrollView_.reset([[NSScrollView alloc] initWithFrame:scrollFrame]);
|
| - [scrollView_ setAutohidesScrollers:YES];
|
| - [scrollView_ setAutoresizingMask:NSViewMinYMargin];
|
| - [scrollView_ setDocumentView:documentView];
|
| - [scrollView_ setDrawsBackground:NO];
|
| - [scrollView_ setHasHorizontalScroller:NO];
|
| - [scrollView_ setHasVerticalScroller:YES];
|
| -
|
| - // Scroll to top.
|
| - NSPoint newScrollOrigin =
|
| - NSMakePoint(0.0,
|
| - NSMaxY([[scrollView_ documentView] frame]) -
|
| - NSHeight([[scrollView_ contentView] bounds]));
|
| - [[scrollView_ documentView] scrollPoint:newScrollOrigin];
|
| -
|
| - // Set final sizes.
|
| - [[self view] setFrame:fullFrame];
|
| - [[self view] addSubview:scrollView_];
|
| - [settingsText_ setFrame:headerFrame];
|
| - [detailsText_ setFrame:subheaderFrame];
|
| - [groupDropDownButton_ setFrame:dropDownButtonFrame];
|
| -}
|
| -
|
| -- (void)setSettingsNotifier:(message_center::Notifier*)notifier
|
| - enabled:(BOOL)enabled {
|
| - provider_->SetNotifierEnabled(*notifier, enabled);
|
| -}
|
| -
|
| -- (void)learnMoreClicked:(message_center::Notifier*)notifier {
|
| - provider_->OnNotifierAdvancedSettingsRequested(notifier->notifier_id, NULL);
|
| -}
|
| -
|
| -// Testing API /////////////////////////////////////////////////////////////////
|
| -
|
| -- (NSPopUpButton*)groupDropDownButton {
|
| - return groupDropDownButton_;
|
| -}
|
| -
|
| -- (NSScrollView*)scrollView {
|
| - return scrollView_;
|
| -}
|
| -
|
| -// Private API /////////////////////////////////////////////////////////////////
|
| -
|
| -- (void)setIcon:(NSImage*)icon forNotifierIndex:(size_t)index {
|
| - MCSettingsEntryView* entry = [self entryForNotifierAtIndex:index];
|
| - [entry setNotifierIcon:icon];
|
| -}
|
| -
|
| -- (void)setIcon:(NSImage*)icon
|
| - forNotifierId:(const message_center::NotifierId&)id {
|
| - for (size_t i = 0; i < notifiers_.size(); ++i) {
|
| - if (notifiers_[i]->notifier_id == id) {
|
| - [self setIcon:icon forNotifierIndex:i];
|
| - return;
|
| - }
|
| - }
|
| -}
|
| -
|
| -- (MCSettingsEntryView*)entryForNotifierAtIndex:(size_t)index {
|
| - NSArray* subviews = [[scrollView_ documentView] subviews];
|
| - // The checkboxes are in bottom-top order, the checkbox for notifiers_[0] is
|
| - // last.
|
| - DCHECK_LT(notifiers_.size() - 1 - index, [subviews count]);
|
| - NSView* view = [subviews objectAtIndex:notifiers_.size() - 1 - index];
|
| - return base::mac::ObjCCastStrict<MCSettingsEntryView>(view);
|
| -}
|
| -
|
| -- (void)notifierGroupSelectionChanged:(id)sender {
|
| - DCHECK_EQ(groupDropDownButton_.get(), sender);
|
| - NSPopUpButton* button = static_cast<NSPopUpButton*>(sender);
|
| - // The first item is a dummy item.
|
| - provider_->SwitchToNotifierGroup([button indexOfSelectedItem] - 1);
|
| -}
|
| -
|
| -- (BOOL)notifierHasAdvancedSettings:(const message_center::NotifierId&)id {
|
| - return provider_->NotifierHasAdvancedSettings(id);
|
| -}
|
| -
|
| -@end
|
|
|