Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4601)

Unified Diff: chrome/browser/autofill/autofill_credit_card_sheet_controller_mac.mm

Issue 2673006: AutoFill Profiles dialog implemented according to new mocks on Mac (Closed)
Patch Set: Revisions based on review comments. Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/autofill/autofill_credit_card_sheet_controller_mac.mm
diff --git a/chrome/browser/autofill/autofill_credit_card_sheet_controller_mac.mm b/chrome/browser/autofill/autofill_credit_card_sheet_controller_mac.mm
new file mode 100644
index 0000000000000000000000000000000000000000..11a63026022de0ab3302f9e2e8ab3ec2c7e202c0
--- /dev/null
+++ b/chrome/browser/autofill/autofill_credit_card_sheet_controller_mac.mm
@@ -0,0 +1,165 @@
+// 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 "chrome/browser/autofill/autofill_credit_card_sheet_controller_mac.h"
+
+#include "app/l10n_util.h"
+#include "base/mac_util.h"
+#include "base/sys_string_conversions.h"
+#import "chrome/browser/autofill/autofill_credit_card_model_mac.h"
+#import "chrome/browser/autofill/autofill_dialog_controller_mac.h"
+#include "chrome/browser/autofill/credit_card.h"
+#include "grit/generated_resources.h"
+
+// Private methods for the |AutoFillCreditCardSheetController| class.
+@interface AutoFillCreditCardSheetController (PrivateMethods)
+- (void)buildBillingAddressContents;
+- (void)buildExpirationMonthContents;
+- (void)buildExpirationYearContents;
+@end
+
+@implementation AutoFillCreditCardSheetController
+
+@synthesize creditCardModel = creditCardModel_;
+@synthesize billingAddressContents = billingAddressContents_;
+@synthesize expirationMonthContents = expirationMonthContents_;
+@synthesize expirationYearContents = expirationYearContents_;
+
+- (id)initWithCreditCard:(const CreditCard&)creditCard
+ mode:(AutoFillCreditCardMode)mode
+ controller:(AutoFillDialogController*)parentController {
+ NSString* nibPath = [mac_util::MainAppBundle()
+ pathForResource:@"AutoFillCreditCardSheet"
+ ofType:@"nib"];
+ self = [super initWithWindowNibPath:nibPath owner:self];
+ if (self) {
+ // Create the model. We use setter here for KVO.
+ [self setCreditCardModel:[[[AutoFillCreditCardModel alloc]
+ initWithCreditCard:creditCard] autorelease]];
+
+ // We keep track of our parent controller for model-update purposes.
+ parentController_ = parentController;
+
+ mode_ = mode;
+ }
+ return self;
+}
+
+- (void)dealloc {
+ [creditCardModel_ release];
+ [billingAddressContents_ release];
+ [expirationMonthContents_ release];
+ [expirationYearContents_ release];
+ [super dealloc];
+}
+
+- (void)awakeFromNib {
+ // Setup initial state of popups.
+ [self buildBillingAddressContents];
+ [self buildExpirationMonthContents];
+ [self buildExpirationYearContents];
+
+ // Turn menu autoenable off. We manually govern this.
+ [billingAddressPopup_ setAutoenablesItems:NO];
+ [expirationMonthPopup_ setAutoenablesItems:NO];
+ [expirationYearPopup_ setAutoenablesItems:NO];
+
+ // Set the caption based on the mode.
+ NSString* caption;
+ if (mode_ == kAutoFillCreditCardAddMode)
+ caption = l10n_util::GetNSString(IDS_AUTOFILL_ADD_CREDITCARD_CAPTION);
+ else if (mode_ == kAutoFillCreditCardEditMode)
+ caption = l10n_util::GetNSString(IDS_AUTOFILL_EDIT_CREDITCARD_CAPTION);
+ else
+ NOTREACHED();
+ [caption_ setStringValue:caption];
+}
+
+- (IBAction)save:(id)sender {
+ // Call |makeFirstResponder:| to commit pending text field edits.
+ [[self window] makeFirstResponder:[self window]];
+
+ [NSApp endSheet:[self window] returnCode:1];
+}
+
+- (IBAction)cancel:(id)sender {
+ [NSApp endSheet:[self window] returnCode:0];
+}
+
+- (void)copyModelToCreditCard:(CreditCard*)creditCard {
+ // The model copies the popup values blindly. We need to clear the strings
+ // in the case that our special menus are in effect.
+ if ([billingAddressPopup_ indexOfSelectedItem] <= 0)
+ [creditCardModel_ setBillingAddress:@""];
+ if ([expirationMonthPopup_ indexOfSelectedItem] <= 0)
+ [creditCardModel_ setExpirationMonth:@""];
+ if ([expirationYearPopup_ indexOfSelectedItem] <= 0)
+ [creditCardModel_ setExpirationYear:@""];
+
+ [creditCardModel_ copyModelToCreditCard:creditCard];
+}
+
+// Builds the |billingAddressContents_| array of strings from the list of
+// addresses returned by the |parentController_| and additional UI string.
+// Ensures that current selection is valid. If not, reset it.
+- (void)buildBillingAddressContents {
+ NSString* menuString = l10n_util::GetNSString(
+ IDS_AUTOFILL_DIALOG_CHOOSE_EXISTING_ADDRESS);
+
+ // Build the menu array and set it.
+ NSArray* addressStrings = [parentController_ addressLabels];
+ NSArray* newArray = [[NSArray arrayWithObject:menuString]
+ arrayByAddingObjectsFromArray:addressStrings];
+ [self setBillingAddressContents:newArray];
+
+ // If the addresses no longer contain our selected item, reset the selection.
+ if ([addressStrings
+ indexOfObject:[creditCardModel_ billingAddress]] == NSNotFound) {
+ [creditCardModel_ setBillingAddress:menuString];
+ }
+
+ // Disable first item in menu. "Choose existing address" is a non-item.
+ [[billingAddressPopup_ itemAtIndex:0] setEnabled:NO];
+}
+
+// Builds array of valid months. Uses special @" " to indicate no selection.
+- (void)buildExpirationMonthContents {
+ NSArray* newArray = [NSArray arrayWithObjects:@" ",
+ @"01", @"02", @"03", @"04", @"05", @"06",
+ @"07", @"08", @"09", @"10", @"11", @"12", nil ];
+
+ [self setExpirationMonthContents:newArray];
+
+ // If the value from the model is not found in the array then set to the empty
+ // item @" ".
+ if ([newArray
+ indexOfObject:[creditCardModel_ expirationMonth]] == NSNotFound) {
+ [creditCardModel_ setExpirationMonth:@" "];
+ }
+
+ // Disable first item in menu. @" " is a non-item.
+ [[expirationMonthPopup_ itemAtIndex:0] setEnabled:NO];
+}
+
+// Builds array of valid years. Uses special @" " to indicate no selection.
+- (void)buildExpirationYearContents {
+ NSArray* newArray = [NSArray arrayWithObjects:@" ",
+ @"2010", @"2011", @"2012", @"2013", @"2014", @"2015",
+ @"2016", @"2017", @"2018", @"2019", @"2020", @"2021", nil ];
+
+ [self setExpirationYearContents:newArray];
+
+ // If the value from the model is not found in the array then set to the empty
+ // item @" ".
+ if ([newArray
+ indexOfObject:[creditCardModel_ expirationYear]] == NSNotFound) {
+ [creditCardModel_ setExpirationYear:@" "];
+ }
+
+ // Disable first item in menu. @" " is a non-item.
+ [[expirationYearPopup_ itemAtIndex:0] setEnabled:NO];
+}
+
+@end
+

Powered by Google App Engine
This is Rietveld 408576698