adium 3910:efd66da389b6: "Format names as:" is now a token field...
commits at adium.im
commits at adium.im
Tue May 24 15:51:59 UTC 2011
details: http://hg.adium.im/adium/rev/efd66da389b6
revision: 3910:efd66da389b6
branch: (none)
author: Patrick Steinhardt <steinhardt.p at me.com>
date: Tue May 24 17:40:19 2011 +0200
"Format names as:" is now a token field. Fixes #3116, fixes #15184, fixes #7394.
r=xnyhps
diffs (truncated from 2678 to 1000 lines):
diff -r 230d8e1fc93f -r efd66da389b6 Frameworks/Adium Framework/Resources/AB Display Format Defaults.plist
--- a/Frameworks/Adium Framework/Resources/AB Display Format Defaults.plist Tue May 24 15:50:49 2011 +0200
+++ b/Frameworks/Adium Framework/Resources/AB Display Format Defaults.plist Tue May 24 17:40:19 2011 +0200
@@ -1,22 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
+ <key>AB Create MetaContacts</key>
+ <true/>
+ <key>AB Display Format String</key>
+ <string>%[FIRSTFULL] %[LASTFULL]</string>
<key>AB Enable Import</key>
<true/>
- <key>AB Display Format</key>
- <integer>0</integer>
<key>AB Image Sync</key>
<false/>
<key>AB Note Sync</key>
<false/>
- <key>AB Use NickName</key>
- <true/>
<key>AB Prefer AB Images</key>
<false/>
<key>AB Use AB Images</key>
<true/>
- <key>AB Create MetaContacts</key>
+ <key>AB Use FirstName</key>
+ <true/>
+ <key>AB Use NickName</key>
<true/>
</dict>
</plist>
diff -r 230d8e1fc93f -r efd66da389b6 Frameworks/Adium Framework/Source/AIAddressBookController.h
--- a/Frameworks/Adium Framework/Source/AIAddressBookController.h Tue May 24 15:50:49 2011 +0200
+++ b/Frameworks/Adium Framework/Source/AIAddressBookController.h Tue May 24 17:40:19 2011 +0200
@@ -21,28 +21,30 @@
#define PREF_GROUP_ADDRESSBOOK @"Address Book"
#define KEY_AB_ENABLE_IMPORT @"AB Enable Import"
-#define KEY_AB_DISPLAYFORMAT @"AB Display Format"
+#define KEY_AB_DISPLAYFORMAT @"AB Display Format String"
#define KEY_AB_NOTE_SYNC @"AB Note Sync"
#define KEY_AB_USE_IMAGES @"AB Use AB Images"
#define KEY_AB_IMAGE_SYNC @"AB Image Sync"
#define KEY_AB_PREFER_ADDRESS_BOOK_IMAGES @"AB Prefer AB Images"
+#define KEY_AB_USE_FIRSTNAME @"AB Use FirstName"
#define KEY_AB_USE_NICKNAME @"AB Use NickName"
-#define KEY_AB_USE_MIDDLE @"AB Use Middle Name"
#define KEY_AB_CREATE_METACONTACTS @"AB Create MetaContacts"
-
#define AB_DISPLAYFORMAT_DEFAULT_PREFS @"AB Display Format Defaults"
+#define FORMAT_FULL @"FULL"
+#define FORMAT_INITIAL @"INITIAL"
+#define FORMAT_FIRST_INITIAL @"%[FIRSTINITIAL]"
+#define FORMAT_FIRST_FULL @"%[FIRSTFULL]"
+#define FORMAT_MIDDLE_INITIAL @"%[MIDDLEINITIAL]"
+#define FORMAT_MIDDLE_FULL @"%[MIDDLEFULL]"
+#define FORMAT_LAST_INITIAL @"%[LASTINITIAL]"
+#define FORMAT_LAST_FULL @"%[LASTFULL]"
+#define FORMAT_NICK_INITIAL @"%[NICKINITIAL]"
+#define FORMAT_NICK_FULL @"%[NICKFULL]"
+
@class AIService, AIAddressBookUserIconSource;
typedef enum {
- FirstLast = 0,
- First,
- LastFirst,
- LastFirstNoComma,
- FirstLastInitial
-} NameStyle;
-
-typedef enum {
AIRequiresAddressBookEntry,
AIRequiresNoAddressBookEntry
} AIAddressBookContextMenuTag;
@@ -55,10 +57,10 @@
NSInteger meTag;
- NameStyle displayFormat;
+ NSString *displayFormat;
BOOL enableImport;
+ BOOL useFirstName;
BOOL useNickName;
- BOOL useMiddleName;
BOOL automaticUserIconSync;
BOOL createMetaContacts;
diff -r 230d8e1fc93f -r efd66da389b6 Frameworks/Adium Framework/Source/AIAddressBookController.m
--- a/Frameworks/Adium Framework/Source/AIAddressBookController.m Tue May 24 15:50:49 2011 +0200
+++ b/Frameworks/Adium Framework/Source/AIAddressBookController.m Tue May 24 17:40:19 2011 +0200
@@ -105,7 +105,50 @@
//We want the enableImport preference immediately (without waiting for the preferences observer to be registered in adiumFinishedLaunching:)
enableImport = [[adium.preferenceController preferenceForKey:KEY_AB_ENABLE_IMPORT
- group:PREF_GROUP_ADDRESSBOOK] boolValue];
+ group:PREF_GROUP_ADDRESSBOOK] boolValue];
+
+ //If Address Book integration is enabled, we need those preferences to determine contact's names
+ if (enableImport) {
+ displayFormat = [[adium.preferenceController preferenceForKey:KEY_AB_DISPLAYFORMAT
+ group:PREF_GROUP_ADDRESSBOOK] retain];
+ useFirstName = [[adium.preferenceController preferenceForKey:KEY_AB_USE_FIRSTNAME
+ group:PREF_GROUP_ADDRESSBOOK] boolValue];
+ useNickName = [[adium.preferenceController preferenceForKey:KEY_AB_USE_NICKNAME
+ group:PREF_GROUP_ADDRESSBOOK] boolValue];
+ }
+
+ //If old format-menu preference is set, perform migration
+ if ([adium.preferenceController preferenceForKey:@"AB Display Format" group:PREF_GROUP_ADDRESSBOOK]) {
+
+ [displayFormat release];
+
+ NSInteger oldPreference = [[adium.preferenceController preferenceForKey:@"AB Display Format" group:PREF_GROUP_ADDRESSBOOK] integerValue];
+
+ switch (oldPreference) {
+ case 0: //firstlast
+ displayFormat = [[NSString alloc] initWithFormat:@"%@ %@", FORMAT_FIRST_FULL, FORMAT_LAST_FULL];
+ break;
+ case 1: //first
+ displayFormat = [FORMAT_FIRST_FULL retain];
+ break;
+ case 2: //lastfirst
+ displayFormat = [[NSString alloc] initWithFormat:@"%@, %@", FORMAT_LAST_FULL, FORMAT_FIRST_FULL];
+ break;
+ case 3: //lastfirstnocomma
+ displayFormat = [[NSString alloc] initWithFormat:@"%@ %@", FORMAT_LAST_FULL, FORMAT_FIRST_FULL];
+ break;
+ case 4: //firstlastinitial
+ displayFormat = [[NSString alloc] initWithFormat:@"%@ %@", FORMAT_FIRST_FULL, FORMAT_LAST_INITIAL];
+ break;
+ default:
+ displayFormat = [[NSString alloc] initWithFormat:@"%@ %@", FORMAT_FIRST_FULL, FORMAT_LAST_FULL];
+ }
+
+ [adium.preferenceController setPreference:nil forKey:@"AB Display Format" group:PREF_GROUP_ADDRESSBOOK];
+ [adium.preferenceController setPreference:displayFormat
+ forKey:KEY_AB_DISPLAYFORMAT
+ group:PREF_GROUP_ADDRESSBOOK];
+ }
//Services dictionary
serviceDict = [[NSDictionary dictionaryWithObjectsAndKeys:kABAIMInstantProperty,@"AIM",
@@ -126,7 +169,7 @@
object:nil];
//Update self immediately so the information is available to plugins and interface elements as they load
- [self updateSelfIncludingIcon:YES];
+ [self updateSelfIncludingIcon:YES];
}
return self;
}
@@ -197,6 +240,8 @@
[adium.preferenceController unregisterPreferenceObserver:self];
[[NSNotificationCenter defaultCenter] removeObserver:self];
+ [displayFormat release]; displayFormat = nil;
+
[super dealloc];
}
@@ -400,97 +445,81 @@
*
* @param person An <tt>ABPerson</tt>
* @param phonetic A pointer to an <tt>NSString</tt> which will be filled with the phonetic display name if available
- * @result A string based on the first name, last name, and/or nickname of the person, as specified via preferences.
+ * @result A string based on the first name, middle name, last name, and/or nickname of the person, as specified via preferences.
*/
- (NSString *)nameForPerson:(ABPerson *)person phonetic:(NSString **)phonetic
{
- NSString *firstName, *middleName, *lastName, *phoneticFirstName, *phoneticLastName;
- NSString *nickName;
- NSString *displayName = nil;
- NSNumber *flags;
- NameStyle thisDisplayFormat = displayFormat;
+ NSString *firstName = [person valueForProperty:kABFirstNameProperty];
+ NSString *middleName = [person valueForProperty:kABMiddleNameProperty];
+ NSString *lastName = [person valueForProperty:kABLastNameProperty];
+ NSString *nickName = [person valueForProperty:kABNicknameProperty];
+ NSString *phoneticFirstName = [person valueForProperty:kABFirstNamePhoneticProperty];
+ NSString *phoneticMiddleName = [person valueForProperty:kABMiddleNamePhoneticProperty];
+ NSString *phoneticLastName = [person valueForProperty:kABLastNamePhoneticProperty];
+
+ NSString *displayName = displayFormat;
+
+ // Fallback if format string is empty or unexpected
+ if (!displayName || ![displayName isKindOfClass:[NSString class]] || [displayName isEqualToString:@""]) {
+ displayName = FORMAT_FIRST_FULL;
+ }
// If the record is for a company, return the company name if present
- if ((flags = [person valueForProperty:kABPersonFlags])) {
- if (([flags integerValue] & kABShowAsMask) == kABShowAsCompany) {
- NSString *companyName = [person valueForProperty:kABOrganizationProperty];
- if (companyName && [companyName length]) {
- return companyName;
- }
- }
-
- if (([flags integerValue] & kABNameOrderingMask) == kABLastNameFirst) {
- if (thisDisplayFormat == FirstLast) {
- thisDisplayFormat = LastFirstNoComma;
- }
+ if (([[person valueForProperty:kABPersonFlags] integerValue] & kABShowAsMask) == kABShowAsCompany) {
+ NSString *companyName = [person valueForProperty:kABOrganizationProperty];
+ if (companyName && [companyName length]) {
+ return companyName;
}
}
+
+ BOOL havePhonetic = ((phonetic != NULL) && (phoneticFirstName || phoneticMiddleName || phoneticLastName));
+
+ if (useFirstName && (!nickName || [nickName isEqualToString:@""]) && firstName)
+ nickName = firstName;
+ else if (useNickName && (!firstName || [firstName isEqualToString:@""]) && nickName)
+ firstName = nickName;
+
+
+ displayName = [displayName stringByReplacingOccurrencesOfString:FORMAT_FIRST_FULL
+ withString:firstName ? firstName : @""];
+ displayName = [displayName stringByReplacingOccurrencesOfString:FORMAT_FIRST_INITIAL
+ withString:firstName ? [firstName substringToIndex:1] : @""];
+
+ displayName = [displayName stringByReplacingOccurrencesOfString:FORMAT_MIDDLE_FULL
+ withString:middleName ? middleName : @""];
+ displayName = [displayName stringByReplacingOccurrencesOfString:FORMAT_MIDDLE_INITIAL
+ withString:middleName ? [middleName substringToIndex:1] : @""];
+
+ displayName = [displayName stringByReplacingOccurrencesOfString:FORMAT_LAST_FULL
+ withString:lastName ? lastName : @""];
+ displayName = [displayName stringByReplacingOccurrencesOfString:FORMAT_LAST_INITIAL
+ withString:lastName ? [lastName substringToIndex:1] : @""];
+
+ displayName = [displayName stringByReplacingOccurrencesOfString:FORMAT_NICK_FULL
+ withString:nickName ? nickName : @""];
+ displayName = [displayName stringByReplacingOccurrencesOfString:FORMAT_NICK_INITIAL
+ withString:nickName ? [nickName substringToIndex:1] : @""];
+
+ if (havePhonetic) {
+ *phonetic = displayFormat;
- firstName = [person valueForProperty:kABFirstNameProperty];
- middleName = [person valueForProperty:kABMiddleNameProperty];
- lastName = [person valueForProperty:kABLastNameProperty];
- phoneticFirstName = [person valueForProperty:kABFirstNamePhoneticProperty];
- phoneticLastName = [person valueForProperty:kABLastNamePhoneticProperty];
-
- //
- if (useMiddleName && middleName)
- firstName = [NSString stringWithFormat:@"%@ %@", firstName, middleName];
-
- if (useNickName &&
- (nickName = [person valueForProperty:kABNicknameProperty]) &&
- ![nickName isEqualToString:@""]) {
- displayName = nickName;
-
- } else if (!lastName || (thisDisplayFormat == First)) {
- /* If no last name is available, use the first name */
- displayName = firstName;
- if (phonetic != NULL) *phonetic = phoneticFirstName;
-
- } else if (!firstName) {
- /* If no first name is available, use the last name */
- displayName = lastName;
- if (phonetic != NULL) *phonetic = phoneticLastName;
-
- } else {
- BOOL havePhonetic = ((phonetic != NULL) && (phoneticFirstName || phoneticLastName));
-
- /* Look to the preference setting */
- switch (thisDisplayFormat) {
- case FirstLast:
- displayName = [NSString stringWithFormat:@"%@ %@",firstName,lastName];
- if (havePhonetic) {
- *phonetic = [NSString stringWithFormat:@"%@ %@",
- (phoneticFirstName ? phoneticFirstName : firstName),
- (phoneticLastName ? phoneticLastName : lastName)];
- }
- break;
- case LastFirst:
- displayName = [NSString stringWithFormat:@"%@, %@",lastName,firstName];
- if (havePhonetic) {
- *phonetic = [NSString stringWithFormat:@"%@, %@",
- (phoneticLastName ? phoneticLastName : lastName),
- (phoneticFirstName ? phoneticFirstName : firstName)];
- }
- break;
- case LastFirstNoComma:
- displayName = [NSString stringWithFormat:@"%@ %@",lastName,firstName];
- if (havePhonetic) {
- *phonetic = [NSString stringWithFormat:@"%@ %@",
- (phoneticLastName ? phoneticLastName : lastName),
- (phoneticFirstName ? phoneticFirstName : firstName)];
- }
- break;
- case FirstLastInitial:
- displayName = [NSString stringWithFormat:@"%@ %@",firstName,[lastName substringToIndex:1]];
- if (havePhonetic) {
- *phonetic = [NSString stringWithFormat:@"%@ %@",
- (phoneticFirstName ? phoneticFirstName : firstName),
- [lastName substringToIndex:1]];
- }
- case First:
- //No action; handled before we reach the switch statement
- break;
- }
+ *phonetic = [*phonetic stringByReplacingOccurrencesOfString:FORMAT_FIRST_FULL
+ withString:phoneticFirstName ? phoneticFirstName : @""];
+ *phonetic = [*phonetic stringByReplacingOccurrencesOfString:FORMAT_FIRST_INITIAL
+ withString:phoneticFirstName ? [phoneticFirstName substringToIndex:1] : @""];
+
+ *phonetic = [*phonetic stringByReplacingOccurrencesOfString:FORMAT_MIDDLE_FULL
+ withString:phoneticMiddleName ? phoneticMiddleName : @""];
+ *phonetic = [*phonetic stringByReplacingOccurrencesOfString:FORMAT_MIDDLE_INITIAL
+ withString:phoneticMiddleName ? [phoneticMiddleName substringToIndex:1] : @""];
+
+ *phonetic = [*phonetic stringByReplacingOccurrencesOfString:FORMAT_LAST_FULL
+ withString:phoneticLastName ? phoneticLastName : @""];
+ *phonetic = [*phonetic stringByReplacingOccurrencesOfString:FORMAT_LAST_INITIAL
+ withString:phoneticLastName ? [phoneticLastName substringToIndex:1] : @""];
+
+ *phonetic = [*phonetic stringByReplacingOccurrencesOfString:FORMAT_NICK_FULL withString:@""];
+ *phonetic = [*phonetic stringByReplacingOccurrencesOfString:FORMAT_NICK_INITIAL withString:@""];
}
return displayName;
@@ -519,10 +548,11 @@
//load new displayFormat
enableImport = [[prefDict objectForKey:KEY_AB_ENABLE_IMPORT] boolValue];
- displayFormat = (NameStyle)[[prefDict objectForKey:KEY_AB_DISPLAYFORMAT] integerValue];
automaticUserIconSync = [[prefDict objectForKey:KEY_AB_IMAGE_SYNC] boolValue];
+ useFirstName = [[prefDict objectForKey:KEY_AB_USE_FIRSTNAME] boolValue];
useNickName = [[prefDict objectForKey:KEY_AB_USE_NICKNAME] boolValue];
- useMiddleName = [[prefDict objectForKey:KEY_AB_USE_MIDDLE] boolValue];
+ displayFormat = [[prefDict objectForKey:KEY_AB_DISPLAYFORMAT] retain];
+
createMetaContacts = [[prefDict objectForKey:KEY_AB_CREATE_METACONTACTS] boolValue];
@@ -942,7 +972,7 @@
//Set account display names
if (enableImport) {
- NSString *myPhonetic = nil;
+ NSString *myPhonetic = nil;
NSString *myDisplayName = [self nameForPerson:me phonetic:&myPhonetic];
for (AIAccount *account in adium.accountController.accounts) {
@@ -960,8 +990,8 @@
}
[adium.preferenceController registerDefaults:[NSDictionary dictionaryWithObject:[[NSAttributedString stringWithString:myDisplayName] dataRepresentation]
- forKey:KEY_ACCOUNT_DISPLAY_NAME]
- forGroup:GROUP_ACCOUNT_STATUS];
+ forKey:KEY_ACCOUNT_DISPLAY_NAME]
+ forGroup:GROUP_ACCOUNT_STATUS];
}
}
}
diff -r 230d8e1fc93f -r efd66da389b6 Resources/AddressBookPrefs.nib/classes.nib
--- a/Resources/AddressBookPrefs.nib/classes.nib Tue May 24 15:50:49 2011 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-{
- IBClasses = (
- {
- CLASS = AILocalizationButton;
- LANGUAGE = ObjC;
- OUTLETS = {
- "view_anchorToLeftSide" = NSView;
- "view_anchorToRightSide" = NSView;
- "window_anchorOnLeftSide" = NSWindow;
- "window_anchorOnRightSide" = NSWindow;
- };
- SUPERCLASS = NSButton;
- },
- {
- CLASS = AILocalizationTextField;
- LANGUAGE = ObjC;
- OUTLETS = {
- "view_anchorToLeftSide" = NSView;
- "view_anchorToRightSide" = NSView;
- "window_anchorOnLeftSide" = NSWindow;
- };
- SUPERCLASS = NSTextField;
- },
- {
- ACTIONS = {changePreference = id; };
- CLASS = AIPreferencePane;
- LANGUAGE = ObjC;
- OUTLETS = {
- delegate = id;
- "textField_title" = NSTextField;
- view = NSView;
- "view_containerSubView" = NSView;
- "view_containerView" = NSView;
- };
- SUPERCLASS = NSObject;
- },
- {
- ACTIONS = {changePreference = id; };
- CLASS = ESAddressBookIntegrationAdvancedPreferences;
- LANGUAGE = ObjC;
- OUTLETS = {
- "checkBox_enableImport" = NSButton;
- "checkBox_enableNoteSync" = NSButton;
- "checkBox_metaContacts" = NSButton;
- "checkBox_preferABImages" = NSButton;
- "checkBox_syncAutomatic" = NSButton;
- "checkBox_useABImages" = NSButton;
- "checkBox_useMiddleName" = NSButton;
- "checkBox_useNickName" = NSButton;
- "label_contacts" = AILocalizationTextField;
- "label_formatNamesAs" = AILocalizationTextField;
- "label_images" = AILocalizationTextField;
- "label_names" = AILocalizationTextField;
- "popUp_formatMenu" = NSPopUpButton;
- };
- SUPERCLASS = AIPreferencePane;
- },
- {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
- {CLASS = NSButton; LANGUAGE = ObjC; SUPERCLASS = NSControl; },
- {CLASS = NSObject; LANGUAGE = ObjC; }
- );
- IBVersion = 1;
-}
\ No newline at end of file
diff -r 230d8e1fc93f -r efd66da389b6 Resources/AddressBookPrefs.nib/designable.nib
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Resources/AddressBookPrefs.nib/designable.nib Tue May 24 17:40:19 2011 +0200
@@ -0,0 +1,1768 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
+ <data>
+ <int key="IBDocument.SystemTarget">1060</int>
+ <string key="IBDocument.SystemVersion">10J869</string>
+ <string key="IBDocument.InterfaceBuilderVersion">1305</string>
+ <string key="IBDocument.AppKitVersion">1038.35</string>
+ <string key="IBDocument.HIToolboxVersion">461.00</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="NS.object.0">1305</string>
+ </object>
+ <array key="IBDocument.IntegratedClassDependencies">
+ <string>NSTextField</string>
+ <string>NSView</string>
+ <string>NSCustomObject</string>
+ <string>NSTextFieldCell</string>
+ <string>NSTokenField</string>
+ <string>NSTokenFieldCell</string>
+ <string>NSCustomView</string>
+ <string>NSButtonCell</string>
+ <string>NSButton</string>
+ <string>NSUserDefaultsController</string>
+ <string>NSBox</string>
+ </array>
+ <array key="IBDocument.PluginDependencies">
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ </array>
+ <object class="NSMutableDictionary" key="IBDocument.Metadata">
+ <string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+ <integer value="1" key="NS.object.0"/>
+ </object>
+ <array class="NSMutableArray" key="IBDocument.RootObjects" id="774960981">
+ <object class="NSCustomObject" id="186189435">
+ <string key="NSClassName">ESAddressBookIntegrationAdvancedPreferences</string>
+ </object>
+ <object class="NSCustomObject" id="187384081">
+ <string key="NSClassName">FirstResponder</string>
+ </object>
+ <object class="NSCustomObject" id="1031384383">
+ <string key="NSClassName">NSApplication</string>
+ </object>
+ <object class="NSCustomView" id="1056980084">
+ <reference key="NSNextResponder"/>
+ <int key="NSvFlags">274</int>
+ <array class="NSMutableArray" key="NSSubviews">
+ <object class="NSButton" id="830040855">
+ <reference key="NSNextResponder" ref="1056980084"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{19, 149}, {245, 18}}</string>
+ <reference key="NSSuperview" ref="1056980084"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="401818986"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="369834959">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">131072</int>
+ <string key="NSContents">Use Nick if First is not available</string>
+ <object class="NSFont" key="NSSupport" id="115310829">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">11</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ <reference key="NSControlView" ref="830040855"/>
+ <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags2">2</int>
+ <object class="NSCustomResource" key="NSNormalImage" id="544096904">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSSwitch</string>
+ </object>
+ <object class="NSButtonImageSource" key="NSAlternateImage" id="935110434">
+ <string key="NSImageName">NSSwitch</string>
+ </object>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSButton" id="940660">
+ <reference key="NSNextResponder" ref="1056980084"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{19, 169}, {245, 18}}</string>
+ <reference key="NSSuperview" ref="1056980084"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="830040855"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="79274371">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">131072</int>
+ <string key="NSContents">Use First if Nick is not available</string>
+ <reference key="NSSupport" ref="115310829"/>
+ <reference key="NSControlView" ref="940660"/>
+ <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags2">2</int>
+ <reference key="NSNormalImage" ref="544096904"/>
+ <reference key="NSAlternateImage" ref="935110434"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSBox" id="49347676">
+ <reference key="NSNextResponder" ref="1056980084"/>
+ <int key="NSvFlags">12</int>
+ <array class="NSMutableArray" key="NSSubviews">
+ <object class="NSView" id="636212990">
+ <reference key="NSNextResponder" ref="49347676"/>
+ <int key="NSvFlags">256</int>
+ <array class="NSMutableArray" key="NSSubviews">
+ <object class="NSTextField" id="970388425">
+ <reference key="NSNextResponder" ref="636212990"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{10, 15}, {70, 14}}</string>
+ <reference key="NSSuperview" ref="636212990"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="287063788"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="781720128">
+ <int key="NSCellFlags">68288064</int>
+ <int key="NSCellFlags2">272630784</int>
+ <string key="NSContents">Middle</string>
+ <reference key="NSSupport" ref="115310829"/>
+ <reference key="NSControlView" ref="970388425"/>
+ <object class="NSColor" key="NSBackgroundColor" id="314505115">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor" id="552919332">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlTextColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MAA</bytes>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSTextField" id="23064184">
+ <reference key="NSNextResponder" ref="636212990"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{10, 40}, {70, 14}}</string>
+ <reference key="NSSuperview" ref="636212990"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="195663535"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="258882054">
+ <int key="NSCellFlags">68288064</int>
+ <int key="NSCellFlags2">272630784</int>
+ <string key="NSContents">First</string>
+ <reference key="NSSupport" ref="115310829"/>
+ <reference key="NSControlView" ref="23064184"/>
+ <reference key="NSBackgroundColor" ref="314505115"/>
+ <reference key="NSTextColor" ref="552919332"/>
+ </object>
+ </object>
+ <object class="NSTextField" id="981902426">
+ <reference key="NSNextResponder" ref="636212990"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{179, 40}, {70, 14}}</string>
+ <reference key="NSSuperview" ref="636212990"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="576439752"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="1061240405">
+ <int key="NSCellFlags">68288064</int>
+ <int key="NSCellFlags2">272630784</int>
+ <string key="NSContents">Last</string>
+ <reference key="NSSupport" ref="115310829"/>
+ <reference key="NSControlView" ref="981902426"/>
+ <reference key="NSBackgroundColor" ref="314505115"/>
+ <reference key="NSTextColor" ref="552919332"/>
+ </object>
+ </object>
+ <object class="NSTextField" id="968337851">
+ <reference key="NSNextResponder" ref="636212990"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{179, 15}, {70, 14}}</string>
+ <reference key="NSSuperview" ref="636212990"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="909944675"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="922932982">
+ <int key="NSCellFlags">68288064</int>
+ <int key="NSCellFlags2">272630784</int>
+ <string key="NSContents">Nick</string>
+ <reference key="NSSupport" ref="115310829"/>
+ <reference key="NSControlView" ref="968337851"/>
+ <reference key="NSBackgroundColor" ref="314505115"/>
+ <reference key="NSTextColor" ref="552919332"/>
+ </object>
+ </object>
+ <object class="NSTokenField" id="195663535">
+ <reference key="NSNextResponder" ref="636212990"/>
+ <int key="NSvFlags">268</int>
+ <set class="NSMutableSet" key="NSDragTypes">
+ <string>NSStringPboardType</string>
+ </set>
+ <string key="NSFrame">{{79, 39}, {93, 17}}</string>
+ <reference key="NSSuperview" ref="636212990"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="981902426"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTokenFieldCell" key="NSCell" id="728397387">
+ <int key="NSCellFlags">69336641</int>
+ <int key="NSCellFlags2">2048</int>
+ <object class="NSMutableAttributedString" key="NSContents">
+ <object class="NSMutableString" key="NSString">
+ <bytes key="NS.bytes">77+8A</bytes>
+ </object>
+ <dictionary key="NSAttributes">
+ <object class="NSTokenAttachment" key="NSAttachment">
+ <nil key="NSFileWrapper"/>
+ <object class="NSTokenAttachmentCell" key="NSCell">
+ <int key="NSCellFlags">67239488</int>
+ <int key="NSCellFlags2">134219776</int>
+ <string key="NSContents">Evan</string>
+ <object class="NSFont" key="NSSupport" id="333335360">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">13</double>
+ <int key="NSfFlags">1044</int>
+ </object>
+ <string key="NSRepresentedObject">Evan</string>
+ <reference key="NSTextColor" ref="552919332"/>
+ </object>
+ <reference key="NS.delegate" ref="728397387"/>
+ </object>
+ <reference key="NSColor" ref="552919332"/>
+ <reference key="NSFont" ref="333335360"/>
+ <reference key="NSOriginalFont" ref="333335360"/>
+ <object class="NSMutableParagraphStyle" key="NSParagraphStyle">
+ <int key="NSLineBreakMode">4</int>
+ <nil key="NSTabStops"/>
+ </object>
+ </dictionary>
+ </object>
+ <reference key="NSSupport" ref="333335360"/>
+ <reference key="NSControlView" ref="195663535"/>
+ <object class="NSColor" key="NSBackgroundColor" id="345160299">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textBackgroundColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MQA</bytes>
+ </object>
+ </object>
+ <reference key="NSTextColor" ref="552919332"/>
+ <reference key="NSDelegate" ref="195663535"/>
+ <double key="NSCompletionDelay">0.0</double>
+ <int key="NSTokenStyle">0</int>
+ <array key="NS.representedObjects">
+ <string>Evan</string>
+ </array>
+ </object>
+ <int key="NSTokenFieldVersion">2</int>
+ </object>
+ <object class="NSTokenField" id="287063788">
+ <reference key="NSNextResponder" ref="636212990"/>
+ <int key="NSvFlags">268</int>
+ <set class="NSMutableSet" key="NSDragTypes">
+ <string>NSStringPboardType</string>
+ </set>
+ <string key="NSFrame">{{79, 9}, {93, 22}}</string>
+ <reference key="NSSuperview" ref="636212990"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="968337851"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTokenFieldCell" key="NSCell" id="190851223">
+ <int key="NSCellFlags">69336641</int>
+ <int key="NSCellFlags2">2048</int>
+ <object class="NSMutableAttributedString" key="NSContents">
+ <object class="NSMutableString" key="NSString">
+ <bytes key="NS.bytes">77+8A</bytes>
+ </object>
+ <dictionary key="NSAttributes">
+ <object class="NSTokenAttachment" key="NSAttachment">
+ <nil key="NSFileWrapper"/>
+ <object class="NSTokenAttachmentCell" key="NSCell">
+ <int key="NSCellFlags">67239488</int>
+ <int key="NSCellFlags2">134219776</int>
+ <string key="NSContents">Dreskin</string>
+ <reference key="NSSupport" ref="333335360"/>
+ <string key="NSRepresentedObject">Dreskin</string>
+ <reference key="NSTextColor" ref="552919332"/>
+ </object>
+ <reference key="NS.delegate" ref="190851223"/>
+ </object>
+ <reference key="NSColor" ref="552919332"/>
+ <reference key="NSFont" ref="333335360"/>
+ <reference key="NSOriginalFont" ref="333335360"/>
+ <object class="NSMutableParagraphStyle" key="NSParagraphStyle">
+ <int key="NSLineBreakMode">4</int>
+ <nil key="NSTabStops"/>
+ </object>
+ </dictionary>
+ </object>
+ <reference key="NSSupport" ref="333335360"/>
+ <reference key="NSControlView" ref="287063788"/>
+ <reference key="NSBackgroundColor" ref="345160299"/>
+ <reference key="NSTextColor" ref="552919332"/>
+ <reference key="NSDelegate" ref="287063788"/>
+ <double key="NSCompletionDelay">0.0</double>
+ <int key="NSTokenStyle">0</int>
+ <array key="NS.representedObjects">
+ <string>Dreskin</string>
+ </array>
+ </object>
+ <int key="NSTokenFieldVersion">2</int>
+ </object>
+ <object class="NSTokenField" id="576439752">
+ <reference key="NSNextResponder" ref="636212990"/>
+ <int key="NSvFlags">268</int>
+ <set class="NSMutableSet" key="NSDragTypes">
+ <string>NSStringPboardType</string>
+ </set>
+ <string key="NSFrame">{{245, 39}, {120, 17}}</string>
+ <reference key="NSSuperview" ref="636212990"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="970388425"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTokenFieldCell" key="NSCell" id="98995285">
+ <int key="NSCellFlags">69336641</int>
+ <int key="NSCellFlags2">2048</int>
+ <object class="NSMutableAttributedString" key="NSContents">
+ <object class="NSMutableString" key="NSString">
+ <bytes key="NS.bytes">77+8A</bytes>
+ </object>
+ <dictionary key="NSAttributes">
+ <object class="NSTokenAttachment" key="NSAttachment">
+ <nil key="NSFileWrapper"/>
+ <object class="NSTokenAttachmentCell" key="NSCell">
+ <int key="NSCellFlags">67239488</int>
+ <int key="NSCellFlags2">134219776</int>
+ <string key="NSContents">Schoenberg</string>
+ <reference key="NSSupport" ref="333335360"/>
+ <string key="NSRepresentedObject">Schoenberg</string>
+ <reference key="NSTextColor" ref="552919332"/>
+ </object>
+ <reference key="NS.delegate" ref="98995285"/>
+ </object>
+ <reference key="NSColor" ref="552919332"/>
+ <reference key="NSFont" ref="333335360"/>
+ <reference key="NSOriginalFont" ref="333335360"/>
+ <object class="NSMutableParagraphStyle" key="NSParagraphStyle">
+ <int key="NSLineBreakMode">4</int>
+ <nil key="NSTabStops"/>
+ </object>
+ </dictionary>
+ </object>
+ <reference key="NSSupport" ref="333335360"/>
+ <reference key="NSControlView" ref="576439752"/>
+ <reference key="NSBackgroundColor" ref="345160299"/>
+ <reference key="NSTextColor" ref="552919332"/>
+ <reference key="NSDelegate" ref="576439752"/>
+ <double key="NSCompletionDelay">0.0</double>
+ <int key="NSTokenStyle">0</int>
+ <array key="NS.representedObjects">
+ <string>Schoenberg</string>
+ </array>
+ </object>
+ <int key="NSTokenFieldVersion">2</int>
+ </object>
+ <object class="NSTokenField" id="909944675">
+ <reference key="NSNextResponder" ref="636212990"/>
+ <int key="NSvFlags">268</int>
+ <set class="NSMutableSet" key="NSDragTypes">
+ <string>NSStringPboardType</string>
+ </set>
+ <string key="NSFrame">{{245, 14}, {120, 17}}</string>
+ <reference key="NSSuperview" ref="636212990"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="940660"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTokenFieldCell" key="NSCell" id="922378431">
+ <int key="NSCellFlags">69336641</int>
+ <int key="NSCellFlags2">2048</int>
+ <object class="NSMutableAttributedString" key="NSContents">
+ <object class="NSMutableString" key="NSString">
+ <bytes key="NS.bytes">77+8A</bytes>
+ </object>
+ <dictionary key="NSAttributes">
+ <object class="NSTokenAttachment" key="NSAttachment">
+ <nil key="NSFileWrapper"/>
+ <object class="NSTokenAttachmentCell" key="NSCell">
+ <int key="NSCellFlags">67239488</int>
+ <int key="NSCellFlags2">134219776</int>
+ <string key="NSContents">TecJew</string>
+ <reference key="NSSupport" ref="333335360"/>
+ <string key="NSRepresentedObject">TecJew</string>
+ <reference key="NSTextColor" ref="552919332"/>
+ </object>
+ <reference key="NS.delegate" ref="922378431"/>
+ </object>
+ <reference key="NSColor" ref="552919332"/>
+ <reference key="NSFont" ref="333335360"/>
+ <reference key="NSOriginalFont" ref="333335360"/>
+ <object class="NSMutableParagraphStyle" key="NSParagraphStyle">
+ <int key="NSLineBreakMode">4</int>
+ <nil key="NSTabStops"/>
+ </object>
+ </dictionary>
+ </object>
+ <reference key="NSSupport" ref="333335360"/>
+ <reference key="NSControlView" ref="909944675"/>
+ <reference key="NSBackgroundColor" ref="345160299"/>
+ <reference key="NSTextColor" ref="552919332"/>
+ <reference key="NSDelegate" ref="909944675"/>
+ <double key="NSCompletionDelay">0.0</double>
+ <int key="NSTokenStyle">0</int>
+ <array key="NS.representedObjects">
+ <string>TecJew</string>
+ </array>
+ </object>
+ <int key="NSTokenFieldVersion">2</int>
+ </object>
+ </array>
+ <string key="NSFrame">{{1, 1}, {368, 61}}</string>
+ <reference key="NSSuperview" ref="49347676"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="23064184"/>
+ </object>
+ </array>
+ <string key="NSFrame">{{18, 189}, {370, 77}}</string>
+ <reference key="NSSuperview" ref="1056980084"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="636212990"/>
+ <string key="NSOffsets">{0, 0}</string>
+ <object class="NSTextFieldCell" key="NSTitleCell">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Name elements</string>
+ <object class="NSFont" key="NSSupport" id="26">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">11</double>
+ <int key="NSfFlags">3100</int>
+ </object>
+ <reference key="NSBackgroundColor" ref="345160299"/>
+ <object class="NSColor" key="NSTextColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MCAwLjgwMDAwMDAxMTkAA</bytes>
+ </object>
+ </object>
+ <reference key="NSContentView" ref="636212990"/>
+ <int key="NSBorderType">1</int>
+ <int key="NSBoxType">0</int>
+ <int key="NSTitlePosition">2</int>
+ <bool key="NSTransparent">NO</bool>
+ </object>
+ <object class="NSTokenField" id="365339894">
+ <reference key="NSNextResponder" ref="1056980084"/>
+ <int key="NSvFlags">268</int>
+ <set class="NSMutableSet" key="NSDragTypes">
+ <string>NSStringPboardType</string>
+ </set>
+ <string key="NSFrame">{{120, 275}, {264, 21}}</string>
+ <reference key="NSSuperview" ref="1056980084"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="49347676"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTokenFieldCell" key="NSCell" id="798460398">
+ <int key="NSCellFlags">342490689</int>
+ <int key="NSCellFlags2">1077938240</int>
+ <object class="NSFont" key="NSSupport">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">12</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ <reference key="NSControlView" ref="365339894"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="345160299"/>
+ <reference key="NSTextColor" ref="552919332"/>
+ <reference key="NSDelegate" ref="365339894"/>
+ <double key="NSCompletionDelay">0.0</double>
+ <int key="NSTokenStyle">0</int>
+ </object>
+ <int key="NSTokenFieldVersion">2</int>
+ </object>
+ <object class="NSTextField" id="951279381">
+ <reference key="NSNextResponder" ref="1056980084"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{17, 278}, {99, 14}}</string>
+ <reference key="NSSuperview" ref="1056980084"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="365339894"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="504239461">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">71303168</int>
+ <string key="NSContents">Format names as:</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="951279381"/>
+ <reference key="NSBackgroundColor" ref="314505115"/>
+ <reference key="NSTextColor" ref="552919332"/>
+ </object>
+ </object>
+ <object class="NSButton" id="485817221">
+ <reference key="NSNextResponder" ref="1056980084"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{0, 304}, {306, 18}}</string>
+ <reference key="NSSuperview" ref="1056980084"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="951279381"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="758199240">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">131072</int>
+ <string key="NSContents">Import my contactsâ names from the Address Book</string>
+ <reference key="NSSupport" ref="26"/>
+ <reference key="NSControlView" ref="485817221"/>
+ <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags2">2</int>
+ <reference key="NSNormalImage" ref="544096904"/>
+ <reference key="NSAlternateImage" ref="935110434"/>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSTextField" id="293344676">
+ <reference key="NSNextResponder" ref="1056980084"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{0, 326}, {307, 14}}</string>
+ <reference key="NSSuperview" ref="1056980084"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="908619062"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="420548907">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">4194304</int>
+ <string key="NSContents">Names</string>
+ <object class="NSFont" key="NSSupport" id="27">
+ <string key="NSName">LucidaGrande-Bold</string>
+ <double key="NSSize">11</double>
+ <int key="NSfFlags">3357</int>
+ </object>
+ <reference key="NSControlView" ref="293344676"/>
+ <reference key="NSBackgroundColor" ref="314505115"/>
+ <reference key="NSTextColor" ref="552919332"/>
+ </object>
+ </object>
+ <object class="NSTextField" id="401818986">
+ <reference key="NSNextResponder" ref="1056980084"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{0, 127}, {307, 14}}</string>
+ <reference key="NSSuperview" ref="1056980084"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="274895758"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="906057447">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">4194304</int>
+ <string key="NSContents">Images</string>
+ <reference key="NSSupport" ref="27"/>
+ <reference key="NSControlView" ref="401818986"/>
+ <reference key="NSBackgroundColor" ref="314505115"/>
More information about the commits
mailing list