| 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
|
| +
|
|
|