Index: chrome/browser/ui/cocoa/autofill/autofill_main_container.mm |
diff --git a/chrome/browser/ui/cocoa/autofill/autofill_main_container.mm b/chrome/browser/ui/cocoa/autofill/autofill_main_container.mm |
deleted file mode 100644 |
index e4e9727a529a7295bfad617e9738fd62ab1c5654..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/cocoa/autofill/autofill_main_container.mm |
+++ /dev/null |
@@ -1,289 +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 "chrome/browser/ui/cocoa/autofill/autofill_main_container.h" |
- |
-#include <algorithm> |
-#include <cmath> |
- |
-#include "base/mac/foundation_util.h" |
-#include "base/strings/sys_string_conversions.h" |
-#include "chrome/browser/ui/autofill/autofill_dialog_view_delegate.h" |
-#include "chrome/browser/ui/chrome_style.h" |
-#import "chrome/browser/ui/cocoa/autofill/autofill_details_container.h" |
-#include "chrome/browser/ui/cocoa/autofill/autofill_dialog_constants.h" |
-#import "chrome/browser/ui/cocoa/autofill/autofill_notification_container.h" |
-#import "chrome/browser/ui/cocoa/autofill/autofill_tooltip_controller.h" |
-#import "chrome/browser/ui/cocoa/constrained_window/constrained_window_button.h" |
-#import "chrome/browser/ui/cocoa/key_equivalent_constants.h" |
-#include "grit/components_scaled_resources.h" |
-#include "skia/ext/skia_utils_mac.h" |
-#import "third_party/google_toolbox_for_mac/src/AppKit/GTMUILocalizerAndLayoutTweaker.h" |
-#import "ui/base/cocoa/controls/blue_label_button.h" |
-#import "ui/base/cocoa/controls/hyperlink_text_view.h" |
-#include "ui/base/cocoa/window_size_constants.h" |
-#include "ui/gfx/range/range.h" |
- |
-namespace { |
- |
-// Padding between buttons and the last suggestion or details view. The mock |
-// has a total of 30px - but 10px are already provided by details/suggestions. |
-const CGFloat kButtonVerticalPadding = 20.0; |
- |
-} // namespace |
- |
-@interface AutofillMainContainer (Private) |
-- (void)buildWindowButtons; |
-- (void)layoutButtons; |
-- (void)updateButtons; |
-@end |
- |
- |
-@implementation AutofillMainContainer |
- |
-@synthesize target = target_; |
- |
-- (id)initWithDelegate:(autofill::AutofillDialogViewDelegate*)delegate { |
- if (self = [super init]) { |
- delegate_ = delegate; |
- } |
- return self; |
-} |
- |
-- (void)loadView { |
- [self buildWindowButtons]; |
- |
- base::scoped_nsobject<NSView> view([[NSView alloc] initWithFrame:NSZeroRect]); |
- [view setAutoresizesSubviews:YES]; |
- [view setSubviews:@[buttonContainer_]]; |
- [self setView:view]; |
- |
- // Set up "Save in Chrome" checkbox. |
- saveInChromeCheckbox_.reset([[NSButton alloc] initWithFrame:NSZeroRect]); |
- [saveInChromeCheckbox_ setButtonType:NSSwitchButton]; |
- [saveInChromeCheckbox_ setTitle: |
- base::SysUTF16ToNSString(delegate_->SaveLocallyText())]; |
- [saveInChromeCheckbox_ sizeToFit]; |
- [[self view] addSubview:saveInChromeCheckbox_]; |
- |
- saveInChromeTooltip_.reset( |
- [[AutofillTooltipController alloc] |
- initWithArrowLocation:info_bubble::kTopCenter]); |
- [saveInChromeTooltip_ setImage: |
- ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed( |
- IDR_AUTOFILL_TOOLTIP_ICON).ToNSImage()]; |
- [saveInChromeTooltip_ setMessage: |
- base::SysUTF16ToNSString(delegate_->SaveLocallyTooltip())]; |
- [[self view] addSubview:[saveInChromeTooltip_ view]]; |
- [self updateSaveInChrome]; |
- |
- detailsContainer_.reset( |
- [[AutofillDetailsContainer alloc] initWithDelegate:delegate_]); |
- NSSize frameSize = [[detailsContainer_ view] frame].size; |
- [[detailsContainer_ view] setFrameOrigin: |
- NSMakePoint(0, NSHeight([buttonContainer_ frame]))]; |
- frameSize.height += NSHeight([buttonContainer_ frame]); |
- [[self view] setFrameSize:frameSize]; |
- [[self view] addSubview:[detailsContainer_ view]]; |
- |
- notificationContainer_.reset( |
- [[AutofillNotificationContainer alloc] initWithDelegate:delegate_]); |
- [[self view] addSubview:[notificationContainer_ view]]; |
-} |
- |
-- (NSSize)decorationSizeForWidth:(CGFloat)width { |
- NSSize buttonSize = [buttonContainer_ frame].size; |
- NSSize buttonStripSize = |
- NSMakeSize(buttonSize.width + chrome_style::kHorizontalPadding, |
- buttonSize.height + kButtonVerticalPadding + |
- chrome_style::kClientBottomPadding); |
- |
- NSSize size = NSMakeSize(std::max(buttonStripSize.width, width), |
- buttonStripSize.height); |
- NSSize notificationSize = |
- [notificationContainer_ preferredSizeForWidth:width]; |
- size.height += notificationSize.height; |
- |
- return size; |
-} |
- |
-- (NSSize)preferredSize { |
- NSSize detailsSize = [detailsContainer_ preferredSize]; |
- NSSize decorationSize = [self decorationSizeForWidth:detailsSize.width]; |
- |
- NSSize size = NSMakeSize(std::max(decorationSize.width, detailsSize.width), |
- decorationSize.height + detailsSize.height); |
- size.height += autofill::kDetailVerticalPadding; |
- |
- return size; |
-} |
- |
-- (void)performLayout { |
- NSRect bounds = [[self view] bounds]; |
- |
- CGFloat currentY = 0.0; |
- NSRect buttonFrame = [buttonContainer_ frame]; |
- buttonFrame.origin.y = currentY + chrome_style::kClientBottomPadding; |
- [buttonContainer_ setFrameOrigin:buttonFrame.origin]; |
- currentY = NSMaxY(buttonFrame) + kButtonVerticalPadding; |
- |
- NSRect checkboxFrame = [saveInChromeCheckbox_ frame]; |
- [saveInChromeCheckbox_ setFrameOrigin: |
- NSMakePoint(chrome_style::kHorizontalPadding, |
- NSMidY(buttonFrame) - NSHeight(checkboxFrame) / 2.0)]; |
- |
- NSRect tooltipFrame = [[saveInChromeTooltip_ view] frame]; |
- [[saveInChromeTooltip_ view] setFrameOrigin: |
- NSMakePoint(NSMaxX([saveInChromeCheckbox_ frame]) + autofill::kButtonGap, |
- NSMidY(buttonFrame) - (NSHeight(tooltipFrame) / 2.0))]; |
- |
- NSRect notificationFrame = NSZeroRect; |
- notificationFrame.size = [notificationContainer_ preferredSizeForWidth: |
- NSWidth(bounds)]; |
- |
- // Buttons/checkbox/legal take up lower part of view, notifications the |
- // upper part. Adjust the detailsContainer to take up the remainder. |
- CGFloat remainingHeight = |
- NSHeight(bounds) - currentY - NSHeight(notificationFrame); |
- NSRect containerFrame = |
- NSMakeRect(0, currentY, NSWidth(bounds), remainingHeight); |
- [[detailsContainer_ view] setFrame:containerFrame]; |
- [detailsContainer_ performLayout]; |
- |
- notificationFrame.origin = NSMakePoint(0, NSMaxY(containerFrame)); |
- [[notificationContainer_ view] setFrame:notificationFrame]; |
- [notificationContainer_ performLayout]; |
-} |
- |
-- (void)buildWindowButtons { |
- if (buttonContainer_.get()) |
- return; |
- |
- buttonContainer_.reset([[GTMWidthBasedTweaker alloc] initWithFrame: |
- ui::kWindowSizeDeterminedLater]); |
- [buttonContainer_ |
- setAutoresizingMask:(NSViewMinXMargin | NSViewMaxYMargin)]; |
- |
- base::scoped_nsobject<NSButton> button( |
- [[ConstrainedWindowButton alloc] initWithFrame:NSZeroRect]); |
- [button setKeyEquivalent:kKeyEquivalentEscape]; |
- [button setTarget:target_]; |
- [button setAction:@selector(cancel:)]; |
- [button sizeToFit]; |
- [buttonContainer_ addSubview:button]; |
- |
- CGFloat nextX = NSMaxX([button frame]) + autofill::kButtonGap; |
- button.reset([[BlueLabelButton alloc] initWithFrame:NSZeroRect]); |
- [button setFrameOrigin:NSMakePoint(nextX, 0)]; |
- [button setKeyEquivalent:kKeyEquivalentReturn]; |
- [button setTarget:target_]; |
- [button setAction:@selector(accept:)]; |
- [buttonContainer_ addSubview:button]; |
- [self updateButtons]; |
- |
- NSRect frame = NSMakeRect( |
- -NSMaxX([button frame]) - chrome_style::kHorizontalPadding, 0, |
- NSMaxX([button frame]), NSHeight([button frame])); |
- [buttonContainer_ setFrame:frame]; |
-} |
- |
-- (void)layoutButtons { |
- base::scoped_nsobject<GTMUILocalizerAndLayoutTweaker> layoutTweaker( |
- [[GTMUILocalizerAndLayoutTweaker alloc] init]); |
- [layoutTweaker tweakUI:buttonContainer_]; |
- |
- // Now ensure both buttons have the same height. The second button is |
- // known to be the larger one. |
- CGFloat buttonHeight = |
- NSHeight([[[buttonContainer_ subviews] objectAtIndex:1] frame]); |
- |
- // Force first button to be the same height. |
- NSView* button = [[buttonContainer_ subviews] objectAtIndex:0]; |
- NSSize buttonSize = [button frame].size; |
- buttonSize.height = buttonHeight; |
- [button setFrameSize:buttonSize]; |
-} |
- |
-- (void)updateButtons { |
- NSButton* button = base::mac::ObjCCastStrict<NSButton>( |
- [[buttonContainer_ subviews] objectAtIndex:0]); |
- [button setTitle:base::SysUTF16ToNSString(delegate_->CancelButtonText())]; |
- button = base::mac::ObjCCastStrict<NSButton>( |
- [[buttonContainer_ subviews] objectAtIndex:1]); |
- [button setTitle:base::SysUTF16ToNSString(delegate_->ConfirmButtonText())]; |
- [self layoutButtons]; |
-} |
- |
-- (AutofillSectionContainer*)sectionForId:(autofill::DialogSection)section { |
- return [detailsContainer_ sectionForId:section]; |
-} |
- |
-- (void)modelChanged { |
- [self updateSaveInChrome]; |
- [self updateButtons]; |
- [detailsContainer_ modelChanged]; |
-} |
- |
-- (BOOL)saveDetailsLocally { |
- return [saveInChromeCheckbox_ state] == NSOnState; |
-} |
- |
-- (void)updateNotificationArea { |
- [notificationContainer_ setNotifications:delegate_->CurrentNotifications()]; |
- id delegate = [[[self view] window] windowController]; |
- if ([delegate respondsToSelector:@selector(requestRelayout)]) |
- [delegate performSelector:@selector(requestRelayout)]; |
-} |
- |
-- (BOOL)validate { |
- return [detailsContainer_ validate]; |
-} |
- |
-- (void)updateSaveInChrome { |
- [saveInChromeCheckbox_ setHidden:!delegate_->ShouldOfferToSaveInChrome()]; |
- [[saveInChromeTooltip_ view] setHidden:[saveInChromeCheckbox_ isHidden]]; |
- [saveInChromeCheckbox_ setState: |
- (delegate_->ShouldSaveInChrome() ? NSOnState : NSOffState)]; |
-} |
- |
-- (void)makeFirstInvalidInputFirstResponder { |
- NSView* field = [detailsContainer_ firstInvalidField]; |
- if (!field) |
- return; |
- |
- [detailsContainer_ scrollToView:field]; |
- [[[self view] window] makeFirstResponder:field]; |
-} |
- |
-- (void)scrollInitialEditorIntoViewAndMakeFirstResponder { |
- // Try to focus on the first invalid field. If there isn't one, focus on the |
- // first editable field instead. |
- NSView* field = [detailsContainer_ firstInvalidField]; |
- if (!field) |
- field = [detailsContainer_ firstVisibleField]; |
- if (!field) |
- return; |
- |
- [detailsContainer_ scrollToView:field]; |
- [[[self view] window] makeFirstResponder:field]; |
-} |
- |
-- (void)updateErrorBubble { |
- [detailsContainer_ updateErrorBubble]; |
-} |
- |
-@end |
- |
- |
-@implementation AutofillMainContainer (Testing) |
- |
-- (NSButton*)saveInChromeCheckboxForTesting { |
- return saveInChromeCheckbox_.get(); |
-} |
- |
-- (NSButton*)saveInChromeTooltipForTesting { |
- return base::mac::ObjCCast<NSButton>([saveInChromeTooltip_ view]); |
-} |
- |
-@end |