// 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_address_model_mac.h" #include "app/l10n_util.h" #include "base/sys_string_conversions.h" #include "chrome/browser/autofill/autofill_profile.h" #include "grit/generated_resources.h" @implementation AutoFillAddressModel @dynamic summary; @synthesize label = label_; @synthesize firstName = firstName_; @synthesize middleName = middleName_; @synthesize lastName = lastName_; @synthesize email = email_; @synthesize companyName = companyName_; @synthesize addressLine1 = addressLine1_; @synthesize addressLine2 = addressLine2_; @synthesize city = city_; @synthesize state = state_; @synthesize zip = zip_; @synthesize country = country_; @synthesize phoneCountryCode = phoneCountryCode_; @synthesize phoneAreaCode = phoneAreaCode_; @synthesize phoneNumber = phoneNumber_; @synthesize faxCountryCode = faxCountryCode_; @synthesize faxAreaCode = faxAreaCode_; @synthesize faxNumber = faxNumber_; // Sets up the KVO dependency between "summary" and dependent fields. + (NSSet*)keyPathsForValuesAffectingValueForKey:(NSString*)key { NSSet* keyPaths = [super keyPathsForValuesAffectingValueForKey:key]; if ([key isEqualToString:@"summary"]) { NSSet* affectingKeys = [NSSet setWithObjects:@"firstName", @"lastName", @"addressLine1", nil]; keyPaths = [keyPaths setByAddingObjectsFromSet:affectingKeys]; } return keyPaths; } - (id)initWithProfile:(const AutoFillProfile&)profile { if ((self = [super init])) { [self setLabel:SysUTF16ToNSString(profile.Label())]; [self setFirstName:SysUTF16ToNSString( profile.GetFieldText(AutoFillType(NAME_FIRST)))]; [self setMiddleName:SysUTF16ToNSString( profile.GetFieldText(AutoFillType(NAME_MIDDLE)))]; [self setLastName:SysUTF16ToNSString( profile.GetFieldText(AutoFillType(NAME_LAST)))]; [self setEmail:SysUTF16ToNSString( profile.GetFieldText(AutoFillType(EMAIL_ADDRESS)))]; [self setCompanyName:SysUTF16ToNSString( profile.GetFieldText(AutoFillType(COMPANY_NAME)))]; [self setAddressLine1:SysUTF16ToNSString( profile.GetFieldText(AutoFillType(ADDRESS_HOME_LINE1)))]; [self setAddressLine2:SysUTF16ToNSString( profile.GetFieldText(AutoFillType(ADDRESS_HOME_LINE2)))]; [self setCity:SysUTF16ToNSString( profile.GetFieldText(AutoFillType(ADDRESS_HOME_CITY)))]; [self setState:SysUTF16ToNSString( profile.GetFieldText(AutoFillType(ADDRESS_HOME_STATE)))]; [self setZip:SysUTF16ToNSString( profile.GetFieldText(AutoFillType(ADDRESS_HOME_ZIP)))]; [self setCountry:SysUTF16ToNSString( profile.GetFieldText(AutoFillType(ADDRESS_HOME_COUNTRY)))]; [self setPhoneCountryCode:SysUTF16ToNSString( profile.GetFieldText(AutoFillType(PHONE_HOME_COUNTRY_CODE)))]; [self setPhoneAreaCode:SysUTF16ToNSString( profile.GetFieldText(AutoFillType(PHONE_HOME_CITY_CODE)))]; [self setPhoneNumber:SysUTF16ToNSString( profile.GetFieldText(AutoFillType(PHONE_HOME_NUMBER)))]; [self setFaxCountryCode:SysUTF16ToNSString( profile.GetFieldText(AutoFillType(PHONE_FAX_COUNTRY_CODE)))]; [self setFaxAreaCode:SysUTF16ToNSString( profile.GetFieldText(AutoFillType(PHONE_FAX_CITY_CODE)))]; [self setFaxNumber:SysUTF16ToNSString( profile.GetFieldText(AutoFillType(PHONE_FAX_NUMBER)))]; } return self; } - (void)dealloc { [label_ release]; [firstName_ release]; [middleName_ release]; [lastName_ release]; [email_ release]; [companyName_ release]; [addressLine1_ release]; [addressLine2_ release]; [city_ release]; [state_ release]; [zip_ release]; [country_ release]; [phoneCountryCode_ release]; [phoneAreaCode_ release]; [phoneNumber_ release]; [faxCountryCode_ release]; [faxAreaCode_ release]; [faxNumber_ release]; [super dealloc]; } - (NSString*)summary { // Bindings may set these to nil. We normalize here to @"". if (firstName_ == nil) firstName_ = @""; if (lastName_ == nil) lastName_ = @""; if (addressLine1_ == nil) addressLine1_ = @""; BOOL haveFirstName = [firstName_ length] > 0; BOOL haveLastName = [lastName_ length] > 0; BOOL haveAddress = [addressLine1_ length] > 0; NSString* nameSeparator = (haveFirstName && haveLastName) ? l10n_util::GetNSString(IDS_AUTOFILL_DIALOG_ADDRESS_NAME_SEPARATOR) : @""; NSString* nameFormat = l10n_util::GetNSStringF(IDS_AUTOFILL_DIALOG_ADDRESS_SUMMARY_NAME_FORMAT, base::SysNSStringToUTF16(firstName_), base::SysNSStringToUTF16(nameSeparator), base::SysNSStringToUTF16(lastName_)); NSString* summarySeparator = (haveFirstName || haveLastName) && haveAddress ? l10n_util::GetNSString(IDS_AUTOFILL_DIALOG_ADDRESS_SUMMARY_SEPARATOR) : @""; NSString* summaryFormat = l10n_util::GetNSStringF(IDS_AUTOFILL_DIALOG_ADDRESS_SUMMARY_FORMAT, base::SysNSStringToUTF16(nameFormat), base::SysNSStringToUTF16(summarySeparator), base::SysNSStringToUTF16(addressLine1_)); return summaryFormat; } - (void)copyModelToProfile:(AutoFillProfile*)profile { DCHECK(profile); profile->set_label(base::SysNSStringToUTF16([self label])); profile->SetInfo(AutoFillType(NAME_FIRST), base::SysNSStringToUTF16([self firstName])); profile->SetInfo(AutoFillType(NAME_MIDDLE), base::SysNSStringToUTF16([self middleName])); profile->SetInfo(AutoFillType(NAME_LAST), base::SysNSStringToUTF16([self lastName])); profile->SetInfo(AutoFillType(EMAIL_ADDRESS), base::SysNSStringToUTF16([self email])); profile->SetInfo(AutoFillType(COMPANY_NAME), base::SysNSStringToUTF16([self companyName])); profile->SetInfo(AutoFillType(ADDRESS_HOME_LINE1), base::SysNSStringToUTF16([self addressLine1])); profile->SetInfo(AutoFillType(ADDRESS_HOME_LINE2), base::SysNSStringToUTF16([self addressLine2])); profile->SetInfo(AutoFillType(ADDRESS_HOME_CITY), base::SysNSStringToUTF16([self city])); profile->SetInfo(AutoFillType(ADDRESS_HOME_STATE), base::SysNSStringToUTF16([self state])); profile->SetInfo(AutoFillType(ADDRESS_HOME_ZIP), base::SysNSStringToUTF16([self zip])); profile->SetInfo(AutoFillType(ADDRESS_HOME_COUNTRY), base::SysNSStringToUTF16([self country])); profile->SetInfo(AutoFillType(PHONE_HOME_COUNTRY_CODE), base::SysNSStringToUTF16([self phoneCountryCode])); profile->SetInfo(AutoFillType(PHONE_HOME_CITY_CODE), base::SysNSStringToUTF16([self phoneAreaCode])); profile->SetInfo(AutoFillType(PHONE_HOME_NUMBER), base::SysNSStringToUTF16([self phoneNumber])); profile->SetInfo(AutoFillType(PHONE_FAX_COUNTRY_CODE), base::SysNSStringToUTF16([self faxCountryCode])); profile->SetInfo(AutoFillType(PHONE_FAX_CITY_CODE), base::SysNSStringToUTF16([self faxAreaCode])); profile->SetInfo(AutoFillType(PHONE_FAX_NUMBER), base::SysNSStringToUTF16([self faxNumber])); } @end