diff options
author | Justin Anderson <jander@mit.edu> | 2008-09-28 22:16:09 +0000 |
---|---|---|
committer | Justin Anderson <jander@mit.edu> | 2008-09-28 22:16:09 +0000 |
commit | 9c2029e9a8340b17a6335467bda2bff9b0bd3d22 (patch) | |
tree | d17824f0fee606ead503cade5b32360f4416b973 /src | |
parent | 876e89da92c0a98e25e16b4080546b7de0d5137c (diff) | |
download | krb5-9c2029e9a8340b17a6335467bda2bff9b0bd3d22.tar.gz krb5-9c2029e9a8340b17a6335467bda2bff9b0bd3d22.tar.xz krb5-9c2029e9a8340b17a6335467bda2bff9b0bd3d22.zip |
Flesh out KerberosAgent Select Identity dialog. Can now add, edit, and remove favorite identities
Also, make formatters in KerberosFormatters.[hm] localizable.
Still need to add principal validation and prevent duplicates.
ticket: 6055
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@20771 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src')
-rw-r--r-- | src/kim/agent/mac/Identities.h | 60 | ||||
-rw-r--r-- | src/kim/agent/mac/Identities.m | 904 | ||||
-rw-r--r-- | src/kim/agent/mac/KIMUtilities.h | 16 | ||||
-rw-r--r-- | src/kim/agent/mac/KIMUtilities.m | 29 | ||||
-rw-r--r-- | src/kim/agent/mac/KerberosFormatters.h | 21 | ||||
-rw-r--r-- | src/kim/agent/mac/KerberosFormatters.m | 170 | ||||
-rw-r--r-- | src/kim/agent/mac/SelectIdentityController.h | 29 | ||||
-rw-r--r-- | src/kim/agent/mac/SelectIdentityController.m | 195 | ||||
-rw-r--r-- | src/kim/agent/mac/resources/English.lproj/SelectIdentity.xib | 2288 | ||||
-rw-r--r-- | src/kim/agent/mac/resources/KerberosFormatters.strings | bin | 0 -> 3446 bytes |
10 files changed, 3110 insertions, 602 deletions
diff --git a/src/kim/agent/mac/Identities.h b/src/kim/agent/mac/Identities.h index 82819f8ee..cdb3167ac 100644 --- a/src/kim/agent/mac/Identities.h +++ b/src/kim/agent/mac/Identities.h @@ -23,24 +23,51 @@ */ #import <Cocoa/Cocoa.h> +#import <Kerberos/kim.h> +#import "KIMUtilities.h" @interface Identity : NSObject { kim_identity kimIdentity; - int state; - cc_time_t expirationTime; - int favorite; - + kim_options kimOptions; + kim_credential_state state; + cc_time_t expiration_time; + BOOL favorite; } -@property(readonly) NSString *principal; -@property(readonly) NSString *timeRemaining; -@property int state; -@property cc_time_t expirationTime; -@property(readonly) int favorite; -- (id) initWithIdentity: (kim_identity) identity; -- (id) initWithFavoriteIdentity: (kim_identity) identity; +@property kim_identity kimIdentity; +@property kim_options kimOptions; +@property kim_credential_state state; +@property BOOL favorite; +@property cc_time_t expiration_time; + +// derived properties +@property(readonly) NSString *principalString; +@property(readonly) NSString *componentsString; +@property(readonly) NSString *realmString; +@property(readonly) NSDate *expirationDate; +@property(readonly) NSString *expirationString; +@property(readonly) NSString *validLifetimeString; +@property(readonly) NSString *renewableLifetimeString; +@property(readonly) BOOL hasCCache; +@property(readwrite) BOOL isRenewable; +@property(readwrite) BOOL isForwardable; +@property(readwrite) BOOL isAddressless; +@property(readwrite) BOOL isProxiable; +@property(readwrite) NSUInteger validLifetime; +@property(readwrite) NSUInteger renewableLifetime; + +- (id) initWithIdentity: (kim_identity) identity options: (kim_options) options; +- (id) initWithFavoriteIdentity: (kim_identity) identity options: (kim_options) options; - (BOOL) isEqualToKIMIdentity: (kim_identity) identity; +- (BOOL) isEqual: (Identity *)otherIdentity; + +- (kim_error) setPrincipalComponents: (NSString *) componentsString realm: (NSString *) realmString; + +- (void) resetOptions; +- (void) toggleFavorite; +- (BOOL) addToFavorites; +- (BOOL) removeFromFavorites; @end @@ -49,10 +76,17 @@ NSArray *favoriteIdentities; NSArray *identities; NSConnection *threadConnection; - } -@property(readonly, copy) NSArray *identities; +@property(readonly, retain) NSArray *identities; +@property(readonly) NSUInteger minimumValidLifetime; +@property(readonly) NSUInteger maximumValidLifetime; +@property(readonly) NSUInteger minimumRenewableLifetime; +@property(readonly) NSUInteger maximumRenewableLifetime; + +- (void) reload; - (int) update; +- (kim_error) addIdentity: (Identity *) anIdentity; +- (void) synchronizePreferences; @end diff --git a/src/kim/agent/mac/Identities.m b/src/kim/agent/mac/Identities.m index 211d980ee..e7cd31ae9 100644 --- a/src/kim/agent/mac/Identities.m +++ b/src/kim/agent/mac/Identities.m @@ -23,23 +23,89 @@ */ #import "Identities.h" -#import <Kerberos/kim.h> +#import <Kerberos/Kerberos.h> + +#define VALID_LIFETIME_INCREMENT (5 * 60) +#define RENEWABLE_LIFETIME_INCREMENT (15 * 60) + +@interface Identity () + +- (NSString *)stringForLifetime:(NSUInteger)lifetime; + +@end + @implementation Identity @synthesize state; -@synthesize expirationTime; +@synthesize expiration_time; @synthesize favorite; +#pragma mark Initialization & Comparison + // --------------------------------------------------------------------------- -- (id) initWithIdentity: (kim_identity) identity ++ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key +{ + NSMutableSet *result = [[super keyPathsForValuesAffectingValueForKey:key] mutableCopy]; + NSSet *otherKeys = nil; + + if ([key isEqualToString:@"principalString"]) { + otherKeys = [NSSet setWithObjects:@"kimIdentity", nil]; + } + else if ([key isEqualToString:@"expirationDate"]) { + otherKeys = [NSSet setWithObjects:@"kimOptions", @"state", @"expirationTime", nil]; + } + else if ([key isEqualToString:@"expirationString"]) { + otherKeys = [NSSet setWithObjects:@"kimOptions", @"state", @"expirationTime", nil]; + } + else if ([key isEqualToString:@"isProxiable"]) { + otherKeys = [NSSet setWithObjects:@"kimOptions", nil]; + } + else if ([key isEqualToString:@"isForwardable"]) { + otherKeys = [NSSet setWithObjects:@"kimOptions", nil]; + } + else if ([key isEqualToString:@"isAddressless"]) { + otherKeys = [NSSet setWithObjects:@"kimOptions", nil]; + } + else if ([key isEqualToString:@"isRenewable"]) { + otherKeys = [NSSet setWithObjects:@"kimOptions", nil]; + } + else if ([key isEqualToString:@"validLifetime"]) { + otherKeys = [NSSet setWithObjects:@"kimOptions", nil]; + } + else if ([key isEqualToString:@"renewableLifetime"]) { + otherKeys = [NSSet setWithObjects:@"kimOptions", nil]; + } + else if ([key isEqualToString:@"validLifetimeString"]) { + otherKeys = [NSSet setWithObjects:@"kimOptions", @"validLifetime", nil]; + } + else if ([key isEqualToString:@"renewableLifetimeString"]) { + otherKeys = [NSSet setWithObjects:@"kimOptions", @"renewableLifetime", nil]; + } + + [result unionSet:otherKeys]; + + return [result autorelease]; +} + +// --------------------------------------------------------------------------- + +- (id) init +{ + return [self initWithIdentity: NULL options: NULL]; +} + +// --------------------------------------------------------------------------- + +- (id) initWithIdentity: (kim_identity) identity options: (kim_options) options { if ((self = [super init])) { - kimIdentity = identity; - state = kim_credentials_state_not_yet_valid; - expirationTime = 0; - favorite = FALSE; + self.kimIdentity = identity; + self.kimOptions = options; + self.state = kim_credentials_state_not_yet_valid; + self.expiration_time = 0; + self.favorite = FALSE; } return self; @@ -47,10 +113,10 @@ // --------------------------------------------------------------------------- -- (id) initWithFavoriteIdentity: (kim_identity) identity +- (id) initWithFavoriteIdentity: (kim_identity) identity options: (kim_options) options { - if ((self = [self initWithIdentity: identity])) { - favorite = TRUE; + if ((self = [self initWithIdentity: identity options: options])) { + self.favorite = TRUE; } return self; @@ -70,39 +136,451 @@ // --------------------------------------------------------------------------- -- (NSString *)principal +- (BOOL) isEqual: (Identity *)otherIdentity +{ + return ([self isEqualToKIMIdentity:otherIdentity.kimIdentity]); +} + +// --------------------------------------------------------------------------- + +- (NSUInteger)hash +{ + return [self.principalString hash]; +} + +// --------------------------------------------------------------------------- + +- (NSComparisonResult) compare: (Identity *)otherIdentity +{ + return ([self.principalString compare:otherIdentity.principalString]); +} + +#pragma mark Actions + +// --------------------------------------------------------------------------- + +- (void) resetOptions +{ + // property setter converts NULL into actual kim_options with default settings + self.kimOptions = NULL; +} + +// --------------------------------------------------------------------------- + +- (void) toggleFavorite +{ + if (self.favorite) { + [self removeFromFavorites]; + } else { + [self addToFavorites]; + } +} + +// --------------------------------------------------------------------------- + +- (BOOL) addToFavorites +{ + kim_error err = KIM_NO_ERROR; + kim_preferences preferences = NULL; + kim_options options = NULL; + kim_string error_string = NULL; + err = kim_preferences_create(&preferences); + + if (!err) { + err = kim_options_create(&options); + } + + if (!err) { + err = kim_preferences_add_favorite_identity(preferences, self.kimIdentity, options); + } + if (!err) { + err = kim_preferences_synchronize(preferences); + } + if (options) { + kim_options_free(&options); + } + kim_preferences_free(&preferences); + if (!err) { + self.favorite = true; + } else { + kim_string_create_for_last_error(&error_string, err); + NSLog(@"%s failed with %s", _cmd, error_string); + } + return (err != KIM_NO_ERROR); +} + +// --------------------------------------------------------------------------- + +- (BOOL) removeFromFavorites +{ + kim_error err = KIM_NO_ERROR; + kim_preferences preferences = NULL; + kim_options options = NULL; + kim_string error_string = NULL; + err = kim_preferences_create(&preferences); + + if (!err) { + err = kim_options_create(&options); + } + + if (!err) { + err = kim_preferences_remove_favorite_identity(preferences, self.kimIdentity); + } + if (!err) { + err = kim_preferences_synchronize(preferences); + } + if (options) { + kim_options_free(&options); + } + kim_preferences_free(&preferences); + if (!err) { + self.favorite = false; + } else { + kim_string_create_for_last_error(&error_string, err); + NSLog(@"%s failed with %s", _cmd, error_string); + } + return (err != KIM_NO_ERROR); +} + +#pragma mark Accessors + +// --------------------------------------------------------------------------- + +- (NSDate *) expirationDate +{ + return [NSDate dateWithTimeIntervalSince1970:expiration_time]; +} + +// --------------------------------------------------------------------------- + +- (BOOL) hasCCache +{ + kim_error err = KIM_NO_ERROR; + kim_ccache ccache = NULL; + + err = kim_ccache_create_from_client_identity(&ccache, self.kimIdentity); + + if (!err && ccache) { + return TRUE; + } + + return FALSE; +} + + +// --------------------------------------------------------------------------- + +- (kim_identity) kimIdentity +{ + return kimIdentity; +} + +// --------------------------------------------------------------------------- + +- (void) setKimIdentity:(kim_identity)newKimIdentity +{ + kim_error err = KIM_NO_ERROR; + kim_string string = NULL; + + if (!kimIdentity || kimIdentity != newKimIdentity) { + [self willChangeValueForKey:@"kimOptions"]; + + kim_identity_free(&kimIdentity); + kimIdentity = NULL; + if (newKimIdentity != NULL) { + kim_identity_get_display_string(newKimIdentity, &string); + err = kim_identity_copy(&kimIdentity, newKimIdentity); + } + + [self didChangeValueForKey:@"kimOptions"]; + } + + if (err) { + NSLog(@"%s got error %s", _cmd, error_message(err)); + } +} + +// --------------------------------------------------------------------------- + +- (kim_options) kimOptions +{ + return kimOptions; +} + +// --------------------------------------------------------------------------- + +- (void) setKimOptions:(kim_options)newKimOptions +{ + // Passing NULL resets to default options + kim_error err = KIM_NO_ERROR; + + if (!kimOptions || kimOptions != newKimOptions) { + [self willChangeValueForKey:@"kimOptions"]; + + kim_options_free(&kimOptions); + kimOptions = NULL; + + if (newKimOptions == NULL) { + err = kim_options_create(&kimOptions); + } else { + err = kim_options_copy(&kimOptions, newKimOptions); + } + + [self didChangeValueForKey:@"kimOptions"]; + } +} + +// --------------------------------------------------------------------------- + +- (BOOL) isRenewable +{ + kim_error err = KIM_NO_ERROR; + kim_boolean result = FALSE; + kim_options options = self.kimOptions; + + err = kim_options_get_renewable(options, &result); + + return (result != 0); +} + +// --------------------------------------------------------------------------- + +- (void) setIsRenewable: (BOOL) value +{ + kim_error err = KIM_NO_ERROR; + kim_options options = self.kimOptions; + + err = kim_options_set_renewable(options, value); +} + +// --------------------------------------------------------------------------- + +- (BOOL) isForwardable +{ + kim_error err = KIM_NO_ERROR; + kim_boolean result = FALSE; + kim_options options = self.kimOptions; + + err = kim_options_get_forwardable(options, &result); + + return (result != 0); +} + +// --------------------------------------------------------------------------- + +- (void) setIsForwardable: (BOOL) value +{ + kim_error err = KIM_NO_ERROR; + kim_options options = self.kimOptions; + + err = kim_options_set_forwardable(options, value); +} + +// --------------------------------------------------------------------------- + +- (BOOL) isAddressless +{ + kim_error err = KIM_NO_ERROR; + kim_boolean result = FALSE; + kim_options options = self.kimOptions; + + err = kim_options_get_addressless(options, &result); + + return (result != 0); +} + +// --------------------------------------------------------------------------- + +- (void) setIsAddressless: (BOOL) value +{ + kim_error err = KIM_NO_ERROR; + kim_options options = self.kimOptions; + + err = kim_options_set_addressless(options, value); +} + +// --------------------------------------------------------------------------- + +- (BOOL) isProxiable +{ + kim_error err = KIM_NO_ERROR; + kim_boolean result = FALSE; + kim_options options = self.kimOptions; + + err = kim_options_get_proxiable(options, &result); + + return (result != 0); +} + +// --------------------------------------------------------------------------- + +- (void) setIsProxiable: (BOOL) value +{ + kim_error err = KIM_NO_ERROR; + kim_options options = self.kimOptions; + + err = kim_options_set_proxiable(options, value); +} + +// --------------------------------------------------------------------------- + +- (NSUInteger) validLifetime +{ + kim_error err = KIM_NO_ERROR; + kim_lifetime value = 0; + kim_options options = self.kimOptions; + + err = kim_options_get_lifetime(options, &value); + + return (NSUInteger) value; +} + +// --------------------------------------------------------------------------- + +- (void) setValidLifetime: (NSUInteger) newLifetime +{ + kim_error err = KIM_NO_ERROR; + kim_options options = self.kimOptions; + + // round to nearest five minutes + newLifetime = (newLifetime / VALID_LIFETIME_INCREMENT) * VALID_LIFETIME_INCREMENT; + + err = kim_options_set_lifetime(options, (kim_lifetime) newLifetime); +} + +// --------------------------------------------------------------------------- + +- (NSUInteger) renewableLifetime +{ + kim_error err = KIM_NO_ERROR; + kim_lifetime value = 0; + kim_options options = self.kimOptions; + + err = kim_options_get_renewal_lifetime(options, &value); + + return (NSUInteger) value; +} + +// --------------------------------------------------------------------------- + +- (void) setRenewableLifetime: (NSUInteger) newLifetime +{ + kim_error err = KIM_NO_ERROR; + kim_options options = self.kimOptions; + + // round to nearest five minutes + newLifetime = (newLifetime / RENEWABLE_LIFETIME_INCREMENT) * RENEWABLE_LIFETIME_INCREMENT; + + err = kim_options_set_renewal_lifetime(options, (kim_lifetime) newLifetime); +} + +#pragma mark String representations + +// --------------------------------------------------------------------------- + +- (NSString *) principalString { kim_error err = KIM_NO_ERROR; kim_string display_string = NULL; NSString *result = nil; - err = kim_identity_get_display_string(kimIdentity, &display_string); + if (self.kimIdentity) { + err = kim_identity_get_display_string(self.kimIdentity, &display_string); + } - if (!err) { - result = [NSString stringWithCString:display_string encoding:NSUTF8StringEncoding]; + if (!err && display_string) { + result = [NSString stringWithUTF8String:display_string]; } else { result = @"-"; } + + if (err) { + NSLog(@"%s got error %s", _cmd, error_message(err)); + } + + kim_string_free(&display_string); + return result; } // --------------------------------------------------------------------------- -- (NSDate *)expirationDate +- (NSString *) componentsString { - return [NSDate dateWithTimeIntervalSince1970:expirationTime]; + kim_error err = KIM_NO_ERROR; + kim_string display_string = NULL; + NSString *result = @""; + + err = kim_identity_get_display_string(kimIdentity, &display_string); + // err = kim_identity_get_components(kimIdentity, &display_string); + + if (!err) { + NSRange atRange; + + result = [NSString stringWithUTF8String:display_string]; + atRange = [result rangeOfString:@"@" options:NSBackwardsSearch]; + result = [result substringToIndex:atRange.location]; + } + + kim_string_free(&display_string); + + return result; } // --------------------------------------------------------------------------- -- (NSString *)timeRemaining +- (NSString *) realmString +{ + kim_error err = KIM_NO_ERROR; + kim_string display_string = NULL; + NSString *result = @""; + + err = kim_identity_get_realm(kimIdentity, &display_string); + + if (!err) { + result = [NSString stringWithUTF8String:display_string]; + } + + kim_string_free(&display_string); + + return result; +} + +// --------------------------------------------------------------------------- + +- (kim_error) setPrincipalComponents: (NSString *) componentsString realm: (NSString *) realmString +{ + kim_error err = KIM_NO_ERROR; + kim_identity new_identity = NULL; + char *principal_string = NULL; + + asprintf(&principal_string, "%s@%s", + [componentsString UTF8String], [realmString UTF8String]); + + if (principal_string) { + err = kim_identity_create_from_string(&new_identity, principal_string); + } + + self.kimIdentity = new_identity; + + kim_identity_free(&new_identity); + if (principal_string) { + free(principal_string); + } + + return err; +} + +// --------------------------------------------------------------------------- + +- (NSString *) expirationString { NSString *result = nil; - if (expirationTime > 0) { + if (expiration_time > 0) { time_t now = time(NULL); - time_t lifetime = expirationTime - now; + time_t lifetime = expiration_time - now; time_t seconds = (lifetime % 60); time_t minutes = (lifetime / 60 % 60); time_t hours = (lifetime / 3600 % 24); @@ -114,38 +592,77 @@ result = [NSString stringWithFormat:@"%02ld:%02ld", hours, minutes]; } else { - result = @"Expired"; + result = @"--:--"; } - - NSLog(@"timeRemaining = %@ (expirationTime == %ld)", result, expirationTime); return result; } -- (NSString *)description +// --------------------------------------------------------------------------- + +- (NSString *) validLifetimeString +{ + return [self stringForLifetime:self.validLifetime]; +} + +// --------------------------------------------------------------------------- + +- (NSString *) renewableLifetimeString { - NSString *result = nil; - kim_error err = KIM_NO_ERROR; - kim_string display_name = NULL; + return [self stringForLifetime:self.renewableLifetime]; +} + +// --------------------------------------------------------------------------- - err = kim_identity_get_display_string(kimIdentity, &display_name); +- (NSString *)stringForLifetime:(NSUInteger)lifetime +{ + NSMutableArray *parts = nil; + NSUInteger days, hours, minutes, seconds; - if (!err) { - result = [NSString stringWithCString:display_name encoding:NSUTF8StringEncoding]; + days = (lifetime / 86400); + hours = (lifetime / (60 * 60) % 24); + minutes = (lifetime / 60 % 60); + seconds = (lifetime % 60); + + if (seconds > 0) { seconds = 0; minutes++; } + if (minutes > 59) { minutes = 0; hours++; } + if (hours > 23) { hours = 0; days++; } + + parts = [NSMutableArray arrayWithCapacity:3]; + if (days > 0) { + [parts addObject:[NSString stringWithFormat:@"%d days", days]]; } - return result; + if (hours > 0) { + [parts addObject:[NSString stringWithFormat:@"%d hours", hours]]; + } + if (minutes > 0) { + [parts addObject:[NSString stringWithFormat:@"%d minutes", minutes]]; + } + if ([parts count] == 0) { + [parts addObject:@"0 lifetime"]; + } + return [parts componentsJoinedByString:@", "]; +} + +// --------------------------------------------------------------------------- + +- (NSString *) description +{ + return [NSString stringWithFormat:@"%@ (%@) %@", self.principalString, self.expirationString, super.description]; } @end @interface Identities () -@property(readwrite, copy) NSArray *identities; +@property(readwrite, retain) NSArray *favoriteIdentities; +@property(readwrite, retain) NSArray *identities; @end @implementation Identities +@synthesize favoriteIdentities; @synthesize identities; // --------------------------------------------------------------------------- @@ -194,63 +711,10 @@ { if ((self = [super init])) { int err = 0; - NSMutableArray *newFavoriteIdentities = NULL; - + threadConnection = NULL; - identities = NULL; - favoriteIdentities = NULL; - - if (!err) { - newFavoriteIdentities = [[[NSMutableArray alloc] init] autorelease]; - if (!newFavoriteIdentities) { err = ENOMEM; } - } - - if (!err) { - kim_preferences kimPreferences = NULL; - kim_options kimOptions = NULL; - kim_count i; - kim_count count = 0; - - err = kim_preferences_create(&kimPreferences); - - if (!err) { - err = kim_preferences_get_number_of_favorite_identities(kimPreferences, - &count); - } - - for (i = 0; !err && i < count; i++) { - kim_identity kimIdentity = NULL; - Identity *identity = NULL; - - err = kim_preferences_get_favorite_identity_at_index(kimPreferences, - i, - &kimIdentity, - &kimOptions); - - if (!err) { - identity = [[[Identity alloc] initWithFavoriteIdentity: kimIdentity] autorelease]; - if (!identity) { err = ENOMEM; } - } - - if (!err) { - kimIdentity = NULL; /* take ownership */ - [newFavoriteIdentities addObject: identity]; - } - - kim_identity_free (&kimIdentity); - } - kim_preferences_free(&kimPreferences); - } - - if (!err) { - favoriteIdentities = [[NSArray alloc] initWithArray: newFavoriteIdentities]; - if (!favoriteIdentities) { err = ENOMEM; } - } - - if (!err) { - err = [self update]; - } + [self reload]; if (!err) { NSPort *port1 = [NSPort port]; @@ -294,14 +758,89 @@ // --------------------------------------------------------------------------- +- (void) reload +{ + kim_error err = KIM_NO_ERROR; + + NSMutableArray *newFavoriteIdentities = NULL; + + favoriteIdentities = NULL; + + if (!err) { + newFavoriteIdentities = [[NSMutableArray alloc] init]; + if (!newFavoriteIdentities) { err = ENOMEM; } + } + + if (!err) { + kim_preferences preferences = NULL; + kim_options kimOptions = NULL; + kim_count i; + kim_count count = 0; + + err = kim_preferences_create(&preferences); + + if (!err) { + err = kim_preferences_get_number_of_favorite_identities(preferences, + &count); + } + + for (i = 0; !err && i < count; i++) { + kim_identity kimIdentity = NULL; + Identity *identity = NULL; + + err = kim_preferences_get_favorite_identity_at_index(preferences, + i, + &kimIdentity, + &kimOptions); + + if (!err) { + identity = [[Identity alloc] initWithFavoriteIdentity: kimIdentity options: kimOptions]; + if (!identity) { err = ENOMEM; } + } + + if (!err) { + kimIdentity = NULL; /* take ownership */ + [newFavoriteIdentities addObject: identity]; + } + + if (identity) { + [identity release]; + identity = nil; + } + + kim_identity_free (&kimIdentity); + } + + kim_preferences_free(&preferences); + } + + if (!err) { + self.favoriteIdentities = newFavoriteIdentities; + if (!favoriteIdentities) { err = ENOMEM; } + } + + if (newFavoriteIdentities) { + [newFavoriteIdentities release]; + newFavoriteIdentities = nil; + } + + if (!err) { + [identities release]; + identities = nil; + err = [self update]; + } +} + +// --------------------------------------------------------------------------- + - (int) update { kim_error err = KIM_NO_ERROR; - NSMutableArray *newIdentities = NULL; + NSMutableSet *newIdentities = NULL; kim_ccache_iterator iterator = NULL; if (!err) { - newIdentities = [NSMutableArray arrayWithArray: favoriteIdentities]; + newIdentities = [NSMutableSet set]; if (!newIdentities) { err = ENOMEM; } } @@ -309,11 +848,15 @@ err = kim_ccache_iterator_create (&iterator); } + // Build list of identities with existing ccaches + while (!err) { kim_ccache ccache = NULL; kim_identity kimIdentity = NULL; + kim_options kimOptions = NULL; kim_credential_state state = kim_credentials_state_valid; kim_time expirationTime = 0; + kim_lifetime lifetime = 0; err = kim_ccache_iterator_next (iterator, &ccache); if (!err && !ccache) { break; } @@ -330,26 +873,29 @@ err = kim_ccache_get_expiration_time (ccache, &expirationTime); } + if (!err) { + err = kim_ccache_get_options(ccache, &kimOptions); + } + if (!err) { - Identity *identity = NULL; - - for (Identity *i in newIdentities) { - if ([i isEqualToKIMIdentity: kimIdentity]) { identity = i; } - } - - if (!identity) { - identity = [[[Identity alloc] initWithIdentity: kimIdentity] autorelease]; - if (!identity) { err = ENOMEM; } - - if (!err) { - kimIdentity = NULL; /* take ownership */ - [newIdentities addObject: identity]; - } - } + err = kim_options_get_lifetime(kimOptions, &lifetime); + } + + if (!err) { + Identity *identity = [[Identity alloc] initWithIdentity: kimIdentity options: kimOptions]; + if (!identity) { err = ENOMEM; } if (!err) { + kimIdentity = NULL; /* take ownership */ + identity.kimOptions = kimOptions; identity.state = state; - identity.expirationTime = expirationTime; + identity.expiration_time = expirationTime; + [newIdentities addObject: identity]; + } + + if (identity) { + [identity release]; + identity = nil; } } @@ -358,25 +904,165 @@ err = KIM_NO_ERROR; } + if (err) { + NSLog(@"%s got error %s", _cmd, error_message(err)); + } + + kim_options_free (&kimOptions); kim_identity_free (&kimIdentity); kim_ccache_free (&ccache); } - + + kim_ccache_iterator_free (&iterator); + + // Copy ccache state to favorites + for (Identity *identity in self.favoriteIdentities) { + Identity *matchingIdentity = [newIdentities member:identity]; + if (matchingIdentity) { + identity.state = matchingIdentity.state; + identity.expiration_time = matchingIdentity.expiration_time; + [newIdentities removeObject:matchingIdentity]; + } else { + identity.state = kim_credentials_state_expired; + identity.expiration_time = 0; + } + } + + // Add unused favorites + [newIdentities unionSet:[NSSet setWithArray:self.favoriteIdentities]]; + if (!err) { /* Use @property setter to trigger KVO notifications */ - self.identities = newIdentities; + self.identities = [[newIdentities allObjects] sortedArrayUsingSelector:@selector(compare:)]; if (!identities) { err = ENOMEM; } + } else { + NSLog (@"Got error %s", error_message (err)); } + return err; +} + +// --------------------------------------------------------------------------- + +- (kim_error) addIdentity: (Identity *) anIdentity +{ + kim_error err = KIM_NO_ERROR; + NSMutableArray *newIdentities = nil; + + if (![self.identities containsObject:anIdentity]) { + newIdentities = [self.identities mutableCopy]; + [newIdentities addObject:anIdentity]; + self.identities = newIdentities; + [newIdentities release]; + } else { + err = KIM_IDENTITY_ALREADY_IN_LIST_ERR; + } - kim_ccache_iterator_free (&iterator); + return err; +} + +// --------------------------------------------------------------------------- + +- (void) synchronizePreferences +{ + // Saves the kim_options for all identities in the list to disk, then rebuilds the Identities array from scratch + kim_error err = KIM_NO_ERROR; + kim_preferences prefs = NULL; + + err = kim_preferences_create(&prefs); + + if (!err) { + err = kim_preferences_remove_all_favorite_identities(prefs); + } + + for (Identity *identity in self.identities) { + if (!err && identity.favorite == TRUE) { + err = kim_preferences_add_favorite_identity(prefs, identity.kimIdentity, identity.kimOptions); + } + } + + if (!err) { + err = kim_preferences_synchronize(prefs); + } + + kim_preferences_free(&prefs); + if (err) { - NSLog (@"Got error %s", error_message (err)); + NSLog(@"%s received error %s", _cmd, error_message(err)); + } + + if (!err) { + [self reload]; } +} + +// --------------------------------------------------------------------------- + +- (NSUInteger)minimumValidLifetime +{ + kim_error err = KIM_NO_ERROR; + kim_preferences prefs = NULL; + kim_lifetime value = 0; - return err; + err = kim_preferences_create(&prefs); + + if (!err) { + kim_preferences_get_minimum_lifetime(prefs, &value); + } + + return (NSUInteger) value; +} + +// --------------------------------------------------------------------------- + +- (NSUInteger)maximumValidLifetime +{ + kim_error err = KIM_NO_ERROR; + kim_preferences prefs = NULL; + kim_lifetime value = 0; + + err = kim_preferences_create(&prefs); + + if (!err) { + kim_preferences_get_maximum_lifetime(prefs, &value); + } + + return (NSUInteger) value; +} + +// --------------------------------------------------------------------------- + +- (NSUInteger)minimumRenewableLifetime +{ + kim_error err = KIM_NO_ERROR; + kim_preferences prefs = NULL; + kim_lifetime value = 0; + + err = kim_preferences_create(&prefs); + + if (!err) { + kim_preferences_get_minimum_renewal_lifetime(prefs, &value); + } + + return (NSUInteger) value; } +// --------------------------------------------------------------------------- + +- (NSUInteger)maximumRenewableLifetime +{ + kim_error err = KIM_NO_ERROR; + kim_preferences prefs = NULL; + kim_lifetime value = 0; + + err = kim_preferences_create(&prefs); + + if (!err) { + kim_preferences_get_maximum_renewal_lifetime(prefs, &value); + } + + return (NSUInteger) value; +} @end diff --git a/src/kim/agent/mac/KIMUtilities.h b/src/kim/agent/mac/KIMUtilities.h new file mode 100644 index 000000000..790d238e6 --- /dev/null +++ b/src/kim/agent/mac/KIMUtilities.h @@ -0,0 +1,16 @@ +// +// KIMUtilities.h +// Kerberos5 +// +// Created by Justin Anderson on 9/28/08. +// Copyright 2008 MIT. All rights reserved. +// + +#import <Cocoa/Cocoa.h> +#import <Kerberos/kim.h> + +@interface NSString (KIMUtilities) + ++ (NSString *) stringForLastKIMError: (kim_error) in_err; + +@end diff --git a/src/kim/agent/mac/KIMUtilities.m b/src/kim/agent/mac/KIMUtilities.m new file mode 100644 index 000000000..f8c7b8508 --- /dev/null +++ b/src/kim/agent/mac/KIMUtilities.m @@ -0,0 +1,29 @@ +// +// KIMUtilities.m +// Kerberos5 +// +// Created by Justin Anderson on 9/28/08. +// Copyright 2008 MIT. All rights reserved. +// + +#import "KIMUtilities.h" + + +@implementation NSString (KIMUtilities) + ++ (NSString *) stringForLastKIMError: (kim_error) in_err +{ + kim_error err = KIM_NO_ERROR; + kim_string string = NULL; + NSString *result = nil; + + err = kim_string_create_for_last_error(&string, in_err); + if (!err) { + result = [NSString stringWithUTF8String:string]; + } + kim_string_free(&string); + + return result; +} + +@end diff --git a/src/kim/agent/mac/KerberosFormatters.h b/src/kim/agent/mac/KerberosFormatters.h index 2d5336fce..104ea5f42 100644 --- a/src/kim/agent/mac/KerberosFormatters.h +++ b/src/kim/agent/mac/KerberosFormatters.h @@ -26,14 +26,27 @@ @interface KerberosTimeFormatter : NSFormatter { - + BOOL displaySeconds; + BOOL displayShortFormat; } +@property BOOL displaySeconds; +@property BOOL displayShortFormat; + - (NSString *)stringForObjectValue:(id)anObject; -- (BOOL)getObjectValue:(id *)anObject - forString:(NSString *)string - errorDescription:(NSString **)error; +- (NSAttributedString *)attributedStringForObjectValue:(id)anObject + withDefaultAttributes:(NSDictionary *)attributes; + +- (NSString *) stringForLifetime: (time_t) lifetime; + +@end + +@interface KerberosFavoriteFormatter : NSFormatter { + +} + +- (NSString *)stringForObjectValue:(id)anObject; - (NSAttributedString *)attributedStringForObjectValue:(id)anObject withDefaultAttributes:(NSDictionary *)attributes; diff --git a/src/kim/agent/mac/KerberosFormatters.m b/src/kim/agent/mac/KerberosFormatters.m index e1675bb70..b8a5b3aa4 100644 --- a/src/kim/agent/mac/KerberosFormatters.m +++ b/src/kim/agent/mac/KerberosFormatters.m @@ -24,10 +24,22 @@ #import "KerberosFormatters.h" -#define EXPIRED_STRING @"Expired" - @implementation KerberosTimeFormatter +@synthesize displaySeconds; +@synthesize displayShortFormat; + +- (id) init +{ + self = [super init]; + if (self != nil) { + // default to --:-- style + self.displaySeconds = NO; + self.displayShortFormat = YES; + } + return self; +} + /* * For display of Kerberos expiration times. * Converts an NSDate into an NSString like "09:53" for 9 hours and 53 minutes @@ -36,75 +48,125 @@ - (NSString *)stringForObjectValue:(id)anObject { NSString *result = nil; - if (anObject == nil || ![anObject respondsToSelector:@selector(timeIntervalSince1970)]) { - result = [NSString stringWithFormat:@"%s given invalid object %@", - _cmd, NSStringFromClass([anObject class])]; + + if (anObject == nil || ![anObject respondsToSelector:@selector(timeIntervalSinceNow)]) { + result = @""; } else { - time_t lifetime = [(NSDate *)anObject timeIntervalSince1970] - time(NULL); - - if (lifetime > 0) { - time_t seconds = (lifetime % 60); - time_t minutes = (lifetime / 60 % 60); - time_t hours = (lifetime / 3600 % 24); - time_t days = (lifetime / 86400); - - if (seconds > 0) { seconds = 0; minutes++; } - if (minutes > 59) { minutes = 0; hours++; } - if (hours > 23) { hours = 0; days++; } - - result = [NSString stringWithFormat:@"%02ld:%02ld", hours, minutes]; - } else { - result = EXPIRED_STRING; - } + result = [self stringForLifetime:(time_t)[(NSDate *)anObject timeIntervalSinceNow]]; } return result; } -/* - * Converts NSStrings like @"09:53" into NSDate representation of that point - * in the future. If string is @"Expired", NSDate is set to 1970. - */ +- (NSAttributedString *)attributedStringForObjectValue:(id)anObject + withDefaultAttributes:(NSDictionary *)attributes +{ + return [[[NSAttributedString alloc] initWithString:[self stringForObjectValue:anObject] + attributes:attributes] autorelease]; +} -- (BOOL)getObjectValue:(id *)anObject - forString:(NSString *)string - errorDescription:(NSString **)error +- (NSString *) stringForLifetime: (time_t) lifetime { - NSArray *tokens = [string componentsSeparatedByString:@":"]; - *anObject = nil; + NSMutableString *string = [NSMutableString string]; + NSString *separatorKey = (self.displayShortFormat) ? @"LifetimeStringSeparatorShortFormat" : + @"LifetimeStringSeparatorLongFormat"; + NSString *separator = NSLocalizedStringFromTable (separatorKey, @"KerberosFormatters", NULL); + NSString *key = NULL; + + // Break the lifetime up into time units + time_t days = (lifetime / 86400); + time_t hours = (lifetime / 3600 % 24); + time_t minutes = (lifetime / 60 % 60); + time_t seconds = (lifetime % 60); - if ([tokens count] == 2) { - NSInteger hours = [[tokens objectAtIndex:0] longValue]; - NSInteger minutes = [[tokens objectAtIndex:1] longValue]; - *anObject = [NSDate dateWithTimeIntervalSince1970:(hours * 60 * 60) + (minutes * 60)]; - } else if ([string isEqualToString:EXPIRED_STRING]) { - *anObject = [NSDate dateWithTimeIntervalSince1970:0]; + if (lifetime > 0) { + // If we aren't going to display seconds, round up + if (!self.displaySeconds) { + if (seconds > 0) { seconds = 0; minutes++; } + if (minutes > 59) { minutes = 0; hours++; } + if (hours > 23) { hours = 0; days++; } + } + + if (days > 0 && !self.displayShortFormat) { + if (self.displayShortFormat) { + key = (days > 1) ? @"LifetimeStringDaysShortFormat" : @"LifetimeStringDayShortFormat"; + } else { + key = (days > 1) ? @"LifetimeStringDaysLongFormat" : @"LifetimeStringDayLongFormat"; + } + [string appendFormat: NSLocalizedStringFromTable (key, @"KerberosFormatters", NULL), days]; + } + + if ((hours > 0) || self.displayShortFormat) { + if (self.displayShortFormat) { + key = (hours > 1) ? @"LifetimeStringHoursShortFormat" : @"LifetimeStringHourShortFormat"; + hours += days * 24; + days = 0; + } else { + key = (hours > 1) ? @"LifetimeStringHoursLongFormat" : @"LifetimeStringHourLongFormat"; + } + if ([string length] > 0) { [string appendString: separator]; } + [string appendFormat: NSLocalizedStringFromTable (key, @"KerberosFormatters", NULL), hours]; + } + + if ((minutes > 0) || self.displayShortFormat) { + if (self.displayShortFormat) { + key = (minutes > 1) ? @"LifetimeStringMinutesShortFormat" : @"LifetimeStringMinuteShortFormat"; + } else { + key = (minutes > 1) ? @"LifetimeStringMinutesLongFormat" : @"LifetimeStringMinuteLongFormat"; + } + if ([string length] > 0) { [string appendString: separator]; } + [string appendFormat: NSLocalizedStringFromTable (key, @"KerberosFormatters", NULL), minutes]; + } + + if (self.displaySeconds && ((seconds > 0) || self.displayShortFormat)) { + if (self.displayShortFormat) { + key = (seconds > 1) ? @"LifetimeStringSecondsShortFormat" : @"LifetimeStringSecondShortFormat"; + } else { + key = (seconds > 1) ? @"LifetimeStringSecondsLongFormat" : @"LifetimeStringSecondLongFormat"; + } + if ([string length] > 0) { [string appendString: separator]; } + [string appendFormat: NSLocalizedStringFromTable (key, @"KerberosFormatters", NULL), seconds]; + } + } else { + key = @"LifetimeStringExpired"; + [string appendString: NSLocalizedStringFromTable (key, @"KerberosFormatters", NULL)]; } - if (*anObject == nil) { - return false; + // Return an NSString (non-mutable) from our mutable temporary + return [NSString stringWithString: string]; +} + +@end + +@implementation KerberosFavoriteFormatter + +/* + * For displaying favorite status of KIM identities. + * Converts an NSNumber containing a boolean value into an NSString. + * If true, returns a heart character, /u2665. + * If false, returns empty string @"". + */ +- (NSString *)stringForObjectValue:(id)anObject +{ + NSString *key = nil; + if (anObject == nil || + ![anObject respondsToSelector:@selector(boolValue)] || + ([(NSNumber *)anObject boolValue] == FALSE)) { + key = @"FavoriteStringNotFavorite"; } - return true; + else { + key = @"FavoriteStringIsFavorite"; + } + + return NSLocalizedStringFromTable (key, @"KerberosFormatters", NULL); } - (NSAttributedString *)attributedStringForObjectValue:(id)anObject withDefaultAttributes:(NSDictionary *)attributes { - NSAttributedString *resultString = nil; - NSString *plainString = [self stringForObjectValue:anObject]; - NSMutableDictionary *newAttributes = [attributes mutableCopy]; - - if ([plainString isEqualToString:EXPIRED_STRING]) { - [newAttributes setObject:[NSColor redColor] - forKey:NSForegroundColorAttributeName]; - [newAttributes setObject: [NSNumber numberWithFloat: 0.3] - forKey: NSObliquenessAttributeName]; - } - - resultString = [[NSAttributedString alloc] initWithString:plainString attributes:newAttributes]; - [newAttributes release]; - - return [resultString autorelease]; + return [[[NSAttributedString alloc] initWithString:[self stringForObjectValue:anObject] + attributes:attributes] autorelease]; } + @end diff --git a/src/kim/agent/mac/SelectIdentityController.h b/src/kim/agent/mac/SelectIdentityController.h index 741f897f6..01bcd9228 100644 --- a/src/kim/agent/mac/SelectIdentityController.h +++ b/src/kim/agent/mac/SelectIdentityController.h @@ -28,31 +28,48 @@ @interface SelectIdentityController : NSWindowController { + IBOutlet NSObjectController *identitiesController; IBOutlet NSArrayController *identityArrayController; - + IBOutlet BadgedImageView *kerberosIconImageView; IBOutlet NSTextField *headerTextField; IBOutlet NSTextField *explanationTextField; IBOutlet NSTableView *identityTableView; IBOutlet NSTableColumn *identityTableColumn; - IBOutlet NSTableColumn *timeRemainingTableColumn; IBOutlet NSButton *addIdentityButton; - IBOutlet NSButton *removeIdentityButton; + IBOutlet NSPopUpButton *actionPopupButton; IBOutlet NSButton *selectIdentityButton; IBOutlet NSButton *cancelButton; - + Identities *identities; NSTimer *refreshTimer; + + IBOutlet NSWindow *identityOptionsWindow; + IBOutlet NSObjectController *identityOptionsController; + IBOutlet NSTextField *nameField; + IBOutlet NSTextField *realmField; } -- (IBAction) add: (id) sender; -- (IBAction) remove: (id) sender; +- (IBAction) newIdentity: (id) sender; +- (IBAction) addToFavorites: (id) sender; +- (IBAction) removeFromFavorites: (id) sender; + +- (IBAction) editOptions: (id) sender; +- (IBAction) resetOptions: (id) sender; +- (IBAction) cancelOptions: (id) sender; +- (IBAction) doneOptions: (id) sender; - (IBAction) select: (id) sender; - (IBAction) cancel: (id) sender; - (int) runWindow; +- (void) showOptions: (NSString *) contextInfo; +- (void) didEndSheet: (NSWindow *) sheet returnCode: (int) returnCode contextInfo: (void *) contextInfo; +- (void) saveOptions; + +- (void) reloadData; +- (void) refreshTable; - (void) timedRefresh:(NSTimer *)timer; diff --git a/src/kim/agent/mac/SelectIdentityController.m b/src/kim/agent/mac/SelectIdentityController.m index e7453a906..b26eaaa00 100644 --- a/src/kim/agent/mac/SelectIdentityController.m +++ b/src/kim/agent/mac/SelectIdentityController.m @@ -24,6 +24,7 @@ #import "SelectIdentityController.h" +#define identities_key_path @"identities" @implementation SelectIdentityController @@ -32,12 +33,11 @@ - (id) initWithWindowNibName: (NSString *) windowNibName { if ((self = [super initWithWindowNibName: windowNibName])) { - NSLog (@"SelectIdentityController initializing"); identities = [[Identities alloc] init]; [identities addObserver:self - forKeyPath:@"identities" + forKeyPath:identities_key_path options:NSKeyValueObservingOptionNew - context:@"SelectIdentityController"]; + context:@"selectIdentityController"]; refreshTimer = [NSTimer scheduledTimerWithTimeInterval:60.0 target:self selector:@selector(timedRefresh:) userInfo:nil repeats:true]; } @@ -56,7 +56,7 @@ - (void) dealloc { [refreshTimer release]; - [identities removeObserver:self forKeyPath:@"identities"]; + [identities removeObserver:self forKeyPath:identities_key_path]; [identities release]; [super dealloc]; } @@ -65,36 +65,64 @@ - (void) awakeFromNib { - [headerTextField setStringValue: @"Some header text"]; + [headerTextField setStringValue: @"Some header text"]; + [identityTableView setDoubleAction:@selector(select:)]; } // --------------------------------------------------------------------------- - (void) windowDidLoad { - [explanationTextField setStringValue: @"Some explanation text"]; - + [identitiesController setContent:identities]; } // --------------------------------------------------------------------------- -- (IBAction) add: (id) sender +- (IBAction) newIdentity: (id) sender { - NSLog(@"Add identity"); + Identity *newIdentity = [[Identity alloc] init]; + + newIdentity.favorite = TRUE; + identityOptionsController.content = newIdentity; + [newIdentity release]; + + NSLog(@"New identity %@", [newIdentity description]); + [self showOptions:@"new"]; } // --------------------------------------------------------------------------- -- (IBAction) remove: (id) sender +- (IBAction) addToFavorites: (id) sender { - NSLog(@"Remove identity"); + Identity *anIdentity = [identityArrayController.selectedObjects lastObject]; + identityOptionsController.content = nil; + NSLog(@"Add %@ to favorites", [anIdentity description]); + anIdentity.favorite = TRUE; + + [self saveOptions]; +} + +// --------------------------------------------------------------------------- + +- (IBAction) removeFromFavorites: (id) sender +{ + Identity *anIdentity = [identityArrayController.selectedObjects lastObject]; + identityOptionsController.content = anIdentity; + NSLog(@"Remove %@ from favorites", [anIdentity description]); + anIdentity.favorite = FALSE; + + [self saveOptions]; } // --------------------------------------------------------------------------- - (IBAction) select: (id) sender { + // ignore double-click on header + if ([sender respondsToSelector:@selector(clickedRow)] && [sender clickedRow] < 0) { + return; + } NSLog(@"Select identity: %@", identityArrayController.selectedObjects.description); } @@ -107,6 +135,49 @@ // --------------------------------------------------------------------------- +- (IBAction) editOptions: (id) sender +{ + Identity *anIdentity = [identityArrayController.selectedObjects lastObject]; + anIdentity.favorite = TRUE; + [identityOptionsController setContent: anIdentity]; + + [self showOptions:@"edit"]; +} + +// --------------------------------------------------------------------------- + +- (IBAction) resetOptions: (id) sender +{ + Identity *anIdentity = identityOptionsController.content; + // reset options to default settings + [anIdentity resetOptions]; +} + +// --------------------------------------------------------------------------- + +- (IBAction) cancelOptions: (id) sender +{ + identityOptionsController.content = nil; + [NSApp endSheet:identityOptionsWindow returnCode:NSUserCancelledError]; + + // dump changed settings + [identities reload]; +} + +// --------------------------------------------------------------------------- + +- (IBAction) doneOptions: (id) sender +{ + Identity *anIdentity = identityOptionsController.content; + + [anIdentity setPrincipalComponents: [nameField stringValue] + realm: [realmField stringValue]]; + + [NSApp endSheet: identityOptionsWindow]; +} + +// --------------------------------------------------------------------------- + - (int) runWindow { //[[NSApp delegate] addActiveWindow: [self window]]; @@ -124,21 +195,115 @@ // --------------------------------------------------------------------------- +- (void) showOptions: (NSString *) contextInfo +{ + Identity *anIdentity = identityOptionsController.content; + + [nameField setStringValue:anIdentity.componentsString]; + [realmField setStringValue:anIdentity.realmString]; + + [NSApp beginSheet: identityOptionsWindow + modalForWindow: [self window] + modalDelegate: self + didEndSelector: @selector(didEndSheet:returnCode:contextInfo:) + contextInfo: contextInfo]; +} + +// --------------------------------------------------------------------------- + +- (void) didEndSheet: (NSWindow *) sheet returnCode: (int) returnCode contextInfo: (void *) contextInfo +{ + kim_error err = KIM_NO_ERROR; + if (returnCode != NSUserCancelledError) { + if ([(NSString *)contextInfo isEqualToString:@"new"]) { + Identity *newIdentity = identityOptionsController.content; + err = [identities addIdentity:newIdentity]; + +#warning Add validation to prevent the addition of existing principals and invalid principals + if (err) { + NSLog(@"%s received error %@ trying to add identity %@", _cmd, [NSString stringForLastKIMError:err], [newIdentity description]); + } + [self saveOptions]; + } + else if ([(NSString *)contextInfo isEqualToString:@"edit"]) { + [self saveOptions]; + } + } + [sheet orderOut:self]; +} + +// --------------------------------------------------------------------------- + +- (void) saveOptions +{ + // attempt to preserve the selection + Identity *anIdentity = [[identityArrayController selectedObjects] lastObject]; + NSUInteger a, b, c; + + a = [identityArrayController.content indexOfObject: anIdentity]; + b = NSNotFound; + + [identities synchronizePreferences]; + + /* + * select same object as before if it's still in the array + * if not, select same index as before or end of array, whichever is less + */ + + b = [identityArrayController.content indexOfObject:anIdentity]; + c = [identityArrayController.content count] - 1; + + [identityArrayController setSelectionIndex: (b == NSNotFound) ? (a > c) ? c : a : b]; +} + +// --------------------------------------------------------------------------- + - (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - if ([(NSString *)context isEqualToString:@"SelectIdentityController"]) { - NSLog(@"========== identities array changed =========="); - identityArrayController.content = [[identities.identities mutableCopy] autorelease]; + if ([(NSString *) context isEqualToString:@"selectIdentityController"]) { + if ([keyPath isEqualToString:identities_key_path]) { +// [self reloadData]; + } } else { [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; } } -- (void) timedRefresh:(NSTimer *)timer +// --------------------------------------------------------------------------- + +- (void) reloadData +{ + // Preserve selection + Identity *selectedIdentity = [[identityArrayController.selectedObjects lastObject] retain]; + NSUInteger a, b, c; + a = [identityArrayController selectionIndex]; + b = [[identityArrayController content] count]; + c = NSNotFound; + + NSLog(@"== updating table == %s", _cmd); + identityArrayController.content = identities.identities; + + c = [identityArrayController.content indexOfObject:selectedIdentity]; + if ([[identityArrayController content] count] >= a) + [identityArrayController setSelectionIndex:(c == NSNotFound) ? (a > b) ? b : a : c]; + + [selectedIdentity release]; +} + +// --------------------------------------------------------------------------- + +- (void) refreshTable { [identityArrayController rearrangeObjects]; } +// --------------------------------------------------------------------------- + +- (void) timedRefresh:(NSTimer *)timer +{ + // refetch data to update expiration times + [self refreshTable]; +} @end diff --git a/src/kim/agent/mac/resources/English.lproj/SelectIdentity.xib b/src/kim/agent/mac/resources/English.lproj/SelectIdentity.xib index 8e912b203..bf65e894d 100644 --- a/src/kim/agent/mac/resources/English.lproj/SelectIdentity.xib +++ b/src/kim/agent/mac/resources/English.lproj/SelectIdentity.xib @@ -8,7 +8,8 @@ <string key="IBDocument.HIToolboxVersion">352.00</string> <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="6"/> + <integer value="300428"/> + <integer value="300295"/> </object> <object class="NSArray" key="IBDocument.PluginDependencies"> <bool key="EncodedWithXMLCoder">YES</bool> @@ -28,7 +29,7 @@ <object class="NSWindowTemplate" id="224590347"> <int key="NSWindowStyleMask">13</int> <int key="NSWindowBacking">2</int> - <string key="NSWindowRect">{{279, 513}, {491, 315}}</string> + <string key="NSWindowRect">{{279, 512}, {491, 316}}</string> <int key="NSWTFlags">1886913536</int> <string key="NSWindowTitle">Select a Kerberos Identity</string> <object class="NSMutableString" key="NSWindowClass"> @@ -47,7 +48,7 @@ <object class="NSTextField" id="499468804"> <reference key="NSNextResponder" ref="928852707"/> <int key="NSvFlags">266</int> - <string key="NSFrame">{{101, 264}, {373, 17}}</string> + <string key="NSFrame">{{101, 265}, {373, 17}}</string> <reference key="NSSuperview" ref="928852707"/> <bool key="NSEnabled">YES</bool> <object class="NSTextFieldCell" key="NSCell" id="82820472"> @@ -83,7 +84,7 @@ <object class="NSTextField" id="675887072"> <reference key="NSNextResponder" ref="928852707"/> <int key="NSvFlags">266</int> - <string key="NSFrame">{{101, 219}, {373, 37}}</string> + <string key="NSFrame">{{101, 220}, {373, 37}}</string> <reference key="NSSuperview" ref="928852707"/> <bool key="NSEnabled">YES</bool> <object class="NSTextFieldCell" key="NSCell" id="542766611"> @@ -100,48 +101,121 @@ <reference key="NSTextColor" ref="883746258"/> </object> </object> - <object class="NSScrollView" id="147207906"> + <object class="NSButton" id="426244837"> + <reference key="NSNextResponder" ref="928852707"/> + <int key="NSvFlags">289</int> + <string key="NSFrame">{{390, 13}, {87, 32}}</string> + <reference key="NSSuperview" ref="928852707"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="686991406"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">134217728</int> + <string key="NSContents">Select</string> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="426244837"/> + <int key="NSButtonFlags">-2038284033</int> + <int key="NSButtonFlags2">1</int> + <reference key="NSAlternateImage" ref="604532625"/> + <string key="NSAlternateContents"/> + <string type="base64-UTF8" key="NSKeyEquivalent">DQ</string> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> + </object> + </object> + <object class="NSButton" id="505388869"> + <reference key="NSNextResponder" ref="928852707"/> + <int key="NSvFlags">289</int> + <string key="NSFrame">{{308, 13}, {82, 32}}</string> + <reference key="NSSuperview" ref="928852707"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="720384657"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">134217728</int> + <string key="NSContents">Cancel</string> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="505388869"/> + <int key="NSButtonFlags">-2038284033</int> + <int key="NSButtonFlags2">1</int> + <reference key="NSAlternateImage" ref="604532625"/> + <string key="NSAlternateContents"/> + <string type="base64-UTF8" key="NSKeyEquivalent">Gw</string> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> + </object> + </object> + <object class="NSCustomView" id="700535463"> + <reference key="NSNextResponder" ref="928852707"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{20, 232}, {64, 64}}</string> + <reference key="NSSuperview" ref="928852707"/> + <string key="NSClassName">BadgedImageView</string> + </object> + <object class="NSButton" id="949861041"> + <reference key="NSNextResponder" ref="928852707"/> + <int key="NSvFlags">292</int> + <string key="NSFrame">{{20, 19}, {28, 24}}</string> + <reference key="NSSuperview" ref="928852707"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="871232847"> + <int key="NSCellFlags">-2080244224</int> + <int key="NSCellFlags2">134217728</int> + <string key="NSContents"/> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="949861041"/> + <int key="NSButtonFlags">-2030812929</int> + <int key="NSButtonFlags2">162</int> + <object class="NSCustomResource" key="NSNormalImage"> + <string key="NSClassName">NSImage</string> + <string key="NSResourceName">NSAddTemplate</string> + </object> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">400</int> + <int key="NSPeriodicInterval">75</int> + </object> + </object> + <object class="NSScrollView" id="616284695"> <reference key="NSNextResponder" ref="928852707"/> <int key="NSvFlags">274</int> <object class="NSMutableArray" key="NSSubviews"> <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSClipView" id="750193364"> - <reference key="NSNextResponder" ref="147207906"/> + <object class="NSClipView" id="568659409"> + <reference key="NSNextResponder" ref="616284695"/> <int key="NSvFlags">2304</int> <object class="NSMutableArray" key="NSSubviews"> <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTableView" id="988096643"> - <reference key="NSNextResponder" ref="750193364"/> + <object class="NSTableView" id="631507655"> + <reference key="NSNextResponder" ref="568659409"/> <int key="NSvFlags">256</int> <string key="NSFrameSize">{449, 133}</string> - <reference key="NSSuperview" ref="750193364"/> + <reference key="NSSuperview" ref="568659409"/> <bool key="NSEnabled">YES</bool> - <object class="NSTableHeaderView" key="NSHeaderView" id="401017936"> - <reference key="NSNextResponder" ref="320641129"/> + <object class="NSTableHeaderView" key="NSHeaderView" id="282626403"> + <reference key="NSNextResponder" ref="71614719"/> <int key="NSvFlags">256</int> <string key="NSFrameSize">{449, 17}</string> - <reference key="NSSuperview" ref="320641129"/> - <reference key="NSTableView" ref="988096643"/> + <reference key="NSSuperview" ref="71614719"/> + <reference key="NSTableView" ref="631507655"/> </object> - <object class="_NSCornerView" key="NSCornerView" id="907434254"> - <reference key="NSNextResponder" ref="147207906"/> + <object class="_NSCornerView" key="NSCornerView" id="865861000"> + <reference key="NSNextResponder" ref="616284695"/> <int key="NSvFlags">-2147483392</int> <string key="NSFrame">{{-26, 0}, {16, 17}}</string> - <reference key="NSSuperview" ref="147207906"/> + <reference key="NSSuperview" ref="616284695"/> </object> <object class="NSMutableArray" key="NSTableColumns"> <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTableColumn" id="697375404"> - <string key="NSIdentifier">principal</string> - <double key="NSWidth">3.429741e+02</double> - <double key="NSMinWidth">1.499741e+02</double> + <object class="NSTableColumn" id="1025403577"> + <string key="NSIdentifier">identityColumn</string> + <double key="NSWidth">2.670000e+02</double> + <double key="NSMinWidth">4.000000e+01</double> <double key="NSMaxWidth">1.000000e+03</double> <object class="NSTableHeaderCell" key="NSHeaderCell"> <int key="NSCellFlags">75628032</int> <int key="NSCellFlags2">0</int> <string key="NSContents">Identity</string> <reference key="NSSupport" ref="26"/> - <object class="NSColor" key="NSBackgroundColor"> + <object class="NSColor" key="NSBackgroundColor" id="975820753"> <int key="NSColorSpace">3</int> <bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes> </object> @@ -152,30 +226,64 @@ <reference key="NSColor" ref="18538584"/> </object> </object> - <object class="NSTextFieldCell" key="NSDataCell" id="325541546"> - <int key="NSCellFlags">1411513920</int> - <int key="NSCellFlags2">272761856</int> + <object class="NSTextFieldCell" key="NSDataCell" id="475156882"> + <int key="NSCellFlags">337772096</int> + <int key="NSCellFlags2">2048</int> <string key="NSContents">Text Cell</string> - <reference key="NSSupport" ref="26"/> - <reference key="NSControlView" ref="988096643"/> - <reference key="NSBackgroundColor" ref="876444531"/> + <object class="NSFont" key="NSSupport" id="445233186"> + <string key="NSName">LucidaGrande</string> + <double key="NSSize">1.100000e+01</double> + <int key="NSfFlags">16</int> + </object> + <reference key="NSControlView" ref="631507655"/> + <object class="NSColor" key="NSBackgroundColor" id="1015612366"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">controlBackgroundColor</string> + <reference key="NSColor" ref="31892828"/> + </object> <reference key="NSTextColor" ref="883746258"/> </object> <int key="NSResizingMask">3</int> <bool key="NSIsResizeable">YES</bool> - <bool key="NSIsEditable">YES</bool> - <reference key="NSTableView" ref="988096643"/> + <reference key="NSTableView" ref="631507655"/> </object> - <object class="NSTableColumn" id="1004662124"> - <string key="NSIdentifier">timeRemaining</string> - <double key="NSWidth">1.003135e+02</double> + <object class="NSTableColumn" id="917941739"> + <string key="NSIdentifier">timeRemainingColumn</string> + <double key="NSWidth">1.500000e+02</double> <double key="NSMinWidth">1.000000e+02</double> - <double key="NSMaxWidth">1.500000e+02</double> + <double key="NSMaxWidth">2.000000e+02</double> <object class="NSTableHeaderCell" key="NSHeaderCell"> - <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags">75628032</int> <int key="NSCellFlags2">67108864</int> <string key="NSContents">Time Remaining</string> <reference key="NSSupport" ref="26"/> + <reference key="NSBackgroundColor" ref="975820753"/> + <reference key="NSTextColor" ref="223105710"/> + </object> + <object class="NSTextFieldCell" key="NSDataCell" id="519561276"> + <int key="NSCellFlags">67239488</int> + <int key="NSCellFlags2">67110912</int> + <string key="NSContents">Text Cell</string> + <reference key="NSSupport" ref="445233186"/> + <reference key="NSControlView" ref="631507655"/> + <reference key="NSBackgroundColor" ref="1015612366"/> + <reference key="NSTextColor" ref="883746258"/> + </object> + <int key="NSResizingMask">2</int> + <bool key="NSIsResizeable">YES</bool> + <reference key="NSTableView" ref="631507655"/> + </object> + <object class="NSTableColumn" id="850969979"> + <string key="NSIdentifier">favoriteColumn</string> + <double key="NSWidth">2.300000e+01</double> + <double key="NSMinWidth">1.000000e+01</double> + <double key="NSMaxWidth">2.800000e+01</double> + <object class="NSTableHeaderCell" key="NSHeaderCell"> + <int key="NSCellFlags">75628032</int> + <int key="NSCellFlags2">134217728</int> + <string type="base64-UTF8" key="NSContents">4pmlA</string> + <reference key="NSSupport" ref="26"/> <object class="NSColor" key="NSBackgroundColor"> <int key="NSColorSpace">6</int> <string key="NSCatalogName">System</string> @@ -187,19 +295,16 @@ </object> <reference key="NSTextColor" ref="223105710"/> </object> - <object class="NSTextFieldCell" key="NSDataCell" id="618557697"> - <int key="NSCellFlags">1140981312</int> - <int key="NSCellFlags2">-2076048384</int> + <object class="NSTextFieldCell" key="NSDataCell" id="968276158"> + <int key="NSCellFlags">67239488</int> + <int key="NSCellFlags2">134219776</int> <string key="NSContents">Text Cell</string> - <reference key="NSSupport" ref="26"/> - <reference key="NSControlView" ref="988096643"/> - <reference key="NSBackgroundColor" ref="876444531"/> + <reference key="NSSupport" ref="445233186"/> + <reference key="NSControlView" ref="631507655"/> + <reference key="NSBackgroundColor" ref="1015612366"/> <reference key="NSTextColor" ref="883746258"/> </object> - <int key="NSResizingMask">3</int> - <bool key="NSIsResizeable">YES</bool> - <bool key="NSIsEditable">YES</bool> - <reference key="NSTableView" ref="988096643"/> + <reference key="NSTableView" ref="631507655"/> </object> </object> <double key="NSIntercellSpacingWidth">3.000000e+00</double> @@ -215,203 +320,628 @@ </object> </object> <double key="NSRowHeight">1.700000e+01</double> - <int key="NSTvFlags">1119879168</int> - <int key="NSColumnAutoresizingStyle">5</int> + <int key="NSTvFlags">-1010827264</int> + <string key="NSAutosaveName">SelectIdentityTable</string> + <int key="NSColumnAutoresizingStyle">2</int> <int key="NSDraggingSourceMaskForLocal">15</int> <int key="NSDraggingSourceMaskForNonLocal">0</int> <bool key="NSAllowsTypeSelect">YES</bool> </object> </object> <string key="NSFrame">{{1, 17}, {449, 133}}</string> - <reference key="NSSuperview" ref="147207906"/> - <reference key="NSNextKeyView" ref="988096643"/> - <reference key="NSDocView" ref="988096643"/> - <object class="NSColor" key="NSBGColor" id="1015612366"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlBackgroundColor</string> - <reference key="NSColor" ref="31892828"/> - </object> + <reference key="NSSuperview" ref="616284695"/> + <reference key="NSNextKeyView" ref="631507655"/> + <reference key="NSDocView" ref="631507655"/> + <reference key="NSBGColor" ref="1015612366"/> <int key="NScvFlags">4</int> </object> - <object class="NSScroller" id="80966883"> - <reference key="NSNextResponder" ref="147207906"/> + <object class="NSScroller" id="810829004"> + <reference key="NSNextResponder" ref="616284695"/> <int key="NSvFlags">-2147483392</int> - <string key="NSFrame">{{-30, 17}, {15, 285}}</string> - <reference key="NSSuperview" ref="147207906"/> - <reference key="NSTarget" ref="147207906"/> + <string key="NSFrame">{{224, 17}, {15, 117}}</string> + <reference key="NSSuperview" ref="616284695"/> + <reference key="NSTarget" ref="616284695"/> <string key="NSAction">_doScroller:</string> - <double key="NSPercent">9.684210e-01</double> + <double key="NSCurValue">3.700000e+01</double> + <double key="NSPercent">1.947368e-01</double> </object> - <object class="NSScroller" id="564144656"> - <reference key="NSNextResponder" ref="147207906"/> - <int key="NSvFlags">-2147483392</int> - <string key="NSFrame">{{-100, -100}, {362, 15}}</string> - <reference key="NSSuperview" ref="147207906"/> + <object class="NSScroller" id="836592269"> + <reference key="NSNextResponder" ref="616284695"/> + <int key="NSvFlags">256</int> + <string key="NSFrame">{{-100, -100}, {223, 15}}</string> + <reference key="NSSuperview" ref="616284695"/> <int key="NSsFlags">1</int> - <reference key="NSTarget" ref="147207906"/> + <reference key="NSTarget" ref="616284695"/> <string key="NSAction">_doScroller:</string> - <double key="NSPercent">9.040768e-01</double> + <double key="NSPercent">7.689655e-01</double> </object> - <object class="NSClipView" id="320641129"> - <reference key="NSNextResponder" ref="147207906"/> + <object class="NSClipView" id="71614719"> + <reference key="NSNextResponder" ref="616284695"/> <int key="NSvFlags">2304</int> <object class="NSMutableArray" key="NSSubviews"> <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="401017936"/> + <reference ref="282626403"/> </object> <string key="NSFrame">{{1, 0}, {449, 17}}</string> - <reference key="NSSuperview" ref="147207906"/> - <reference key="NSNextKeyView" ref="401017936"/> - <reference key="NSDocView" ref="401017936"/> + <reference key="NSSuperview" ref="616284695"/> + <reference key="NSNextKeyView" ref="282626403"/> + <reference key="NSDocView" ref="282626403"/> <reference key="NSBGColor" ref="1015612366"/> <int key="NScvFlags">4</int> </object> - <reference ref="907434254"/> + <reference ref="865861000"/> </object> - <string key="NSFrame">{{20, 60}, {451, 151}}</string> + <string key="NSFrame">{{20, 61}, {451, 151}}</string> <reference key="NSSuperview" ref="928852707"/> - <reference key="NSNextKeyView" ref="750193364"/> + <reference key="NSNextKeyView" ref="568659409"/> <int key="NSsFlags">530</int> - <reference key="NSVScroller" ref="80966883"/> - <reference key="NSHScroller" ref="564144656"/> - <reference key="NSContentView" ref="750193364"/> - <reference key="NSHeaderClipView" ref="320641129"/> - <reference key="NSCornerView" ref="907434254"/> + <reference key="NSVScroller" ref="810829004"/> + <reference key="NSHScroller" ref="836592269"/> + <reference key="NSContentView" ref="568659409"/> + <reference key="NSHeaderClipView" ref="71614719"/> + <reference key="NSCornerView" ref="865861000"/> <bytes key="NSScrollAmts">QSAAAEEgAABBmAAAQZgAAA</bytes> </object> - <object class="NSButton" id="426244837"> + <object class="NSPopUpButton" id="263312988"> <reference key="NSNextResponder" ref="928852707"/> - <int key="NSvFlags">289</int> - <string key="NSFrame">{{390, 12}, {87, 32}}</string> + <int key="NSvFlags">292</int> + <string key="NSFrame">{{47, 19}, {54, 24}}</string> <reference key="NSSuperview" ref="928852707"/> <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="686991406"> + <object class="NSPopUpButtonCell" key="NSCell" id="659813048"> + <int key="NSCellFlags">-2076049856</int> + <int key="NSCellFlags2">134219776</int> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="263312988"/> + <int key="NSButtonFlags">-2034220801</int> + <int key="NSButtonFlags2">162</int> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">400</int> + <int key="NSPeriodicInterval">75</int> + <object class="NSMenuItem" key="NSMenuItem" id="354283131"> + <reference key="NSMenu" ref="600123164"/> + <bool key="NSIsHidden">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <int key="NSState">1</int> + <object class="NSCustomResource" key="NSImage"> + <string key="NSClassName">NSImage</string> + <string key="NSResourceName">NSActionTemplate</string> + </object> + <object class="NSCustomResource" key="NSOnImage" id="514331248"> + <string key="NSClassName">NSImage</string> + <string key="NSResourceName">NSMenuCheckmark</string> + </object> + <object class="NSCustomResource" key="NSMixedImage" id="572887887"> + <string key="NSClassName">NSImage</string> + <string key="NSResourceName">NSMenuMixedState</string> + </object> + <string key="NSAction">_popUpItemAction:</string> + <reference key="NSTarget" ref="659813048"/> + </object> + <bool key="NSMenuItemRespectAlignment">YES</bool> + <object class="NSMenu" key="NSMenu" id="600123164"> + <string key="NSTitle">OtherViews</string> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="354283131"/> + <object class="NSMenuItem" id="136217401"> + <reference key="NSMenu" ref="600123164"/> + <bool key="NSIsHidden">YES</bool> + <string key="NSTitle">Remember Identity</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="514331248"/> + <reference key="NSMixedImage" ref="572887887"/> + <string key="NSAction">_popUpItemAction:</string> + <reference key="NSTarget" ref="659813048"/> + </object> + <object class="NSMenuItem" id="778570067"> + <reference key="NSMenu" ref="600123164"/> + <string key="NSTitle">Forget Identity</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="514331248"/> + <reference key="NSMixedImage" ref="572887887"/> + <string key="NSAction">_popUpItemAction:</string> + <reference key="NSTarget" ref="659813048"/> + </object> + <object class="NSMenuItem" id="553755370"> + <reference key="NSMenu" ref="600123164"/> + <string type="base64-UTF8" key="NSTitle">VGlja2V0IE9wdGlvbnPigKY</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="514331248"/> + <reference key="NSMixedImage" ref="572887887"/> + <string key="NSAction">_popUpItemAction:</string> + <reference key="NSTarget" ref="659813048"/> + </object> + </object> + </object> + <int key="NSSelectedIndex">1</int> + <bool key="NSPullDown">YES</bool> + <int key="NSPreferredEdge">2</int> + <bool key="NSUsesItemFromMenu">YES</bool> + <bool key="NSAltersState">YES</bool> + <int key="NSArrowPosition">2</int> + </object> + </object> + </object> + <string key="NSFrameSize">{491, 316}</string> + <reference key="NSSuperview"/> + </object> + <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string> + <string key="NSMinSize">{419, 320}</string> + <string key="NSMaxSize">{600, 622}</string> + <string key="NSFrameAutosaveName">SelectIdentityWindow</string> + </object> + <object class="NSArrayController" id="333357907"> + <object class="NSMutableArray" key="NSDeclaredKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>timeRemaining</string> + <string>isFavorite</string> + <string>principalString</string> + <string>favorite</string> + </object> + <string key="NSObjectClassName">Identity</string> + <bool key="NSEditable">YES</bool> + <object class="_NSManagedProxy" key="_NSManagedProxy"/> + <bool key="NSAvoidsEmptySelection">YES</bool> + <bool key="NSPreservesSelection">YES</bool> + <bool key="NSFilterRestrictsInsertion">YES</bool> + <bool key="NSClearsFilterPredicateOnInsertion">YES</bool> + </object> + <object class="NSCustomObject" id="307777557"> + <string key="NSClassName">KerberosTimeFormatter</string> + </object> + <object class="NSCustomObject" id="355705187"> + <string key="NSClassName">KerberosFavoriteFormatter</string> + </object> + <object class="NSWindowTemplate" id="370461416"> + <int key="NSWindowStyleMask">7</int> + <int key="NSWindowBacking">2</int> + <string key="NSWindowRect">{{196, 132}, {427, 378}}</string> + <int key="NSWTFlags">603979776</int> + <string key="NSWindowTitle">Window</string> + <string key="NSWindowClass">NSWindow</string> + <nil key="NSViewClass"/> + <string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string> + <object class="NSView" key="NSWindowView" id="1019868804"> + <reference key="NSNextResponder"/> + <int key="NSvFlags">258</int> + <object class="NSMutableArray" key="NSSubviews"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSTextField" id="485004197"> + <reference key="NSNextResponder" ref="1019868804"/> + <int key="NSvFlags">266</int> + <string key="NSFrame">{{69, 336}, {338, 22}}</string> + <reference key="NSSuperview" ref="1019868804"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="1047482753"> + <int key="NSCellFlags">-1804468671</int> + <int key="NSCellFlags2">272630784</int> + <string key="NSContents"/> + <reference key="NSSupport" ref="604532625"/> + <string key="NSPlaceholderString">user</string> + <reference key="NSControlView" ref="485004197"/> + <bool key="NSDrawsBackground">YES</bool> + <object class="NSColor" key="NSBackgroundColor" id="830301085"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">textBackgroundColor</string> + <reference key="NSColor" ref="591379363"/> + </object> + <object class="NSColor" key="NSTextColor" id="894652286"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">textColor</string> + <reference key="NSColor" ref="18538584"/> + </object> + </object> + </object> + <object class="NSTextField" id="404880622"> + <reference key="NSNextResponder" ref="1019868804"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{19, 338}, {45, 17}}</string> + <reference key="NSSuperview" ref="1019868804"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="775341038"> + <int key="NSCellFlags">68288064</int> + <int key="NSCellFlags2">71304192</int> + <string key="NSContents">Name:</string> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="404880622"/> + <reference key="NSBackgroundColor" ref="876444531"/> + <reference key="NSTextColor" ref="883746258"/> + </object> + </object> + <object class="NSTextField" id="623163777"> + <reference key="NSNextResponder" ref="1019868804"/> + <int key="NSvFlags">266</int> + <string key="NSFrame">{{69, 306}, {338, 22}}</string> + <reference key="NSSuperview" ref="1019868804"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="327568348"> + <int key="NSCellFlags">-1804468671</int> + <int key="NSCellFlags2">272630784</int> + <string key="NSContents"/> + <reference key="NSSupport" ref="604532625"/> + <string key="NSPlaceholderString">REALM.ORG</string> + <reference key="NSControlView" ref="623163777"/> + <bool key="NSDrawsBackground">YES</bool> + <reference key="NSBackgroundColor" ref="830301085"/> + <reference key="NSTextColor" ref="894652286"/> + </object> + </object> + <object class="NSTextField" id="609534695"> + <reference key="NSNextResponder" ref="1019868804"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{17, 308}, {47, 17}}</string> + <reference key="NSSuperview" ref="1019868804"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="424319976"> + <int key="NSCellFlags">68288064</int> + <int key="NSCellFlags2">71304192</int> + <string key="NSContents">Realm:</string> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="609534695"/> + <reference key="NSBackgroundColor" ref="876444531"/> + <reference key="NSTextColor" ref="883746258"/> + </object> + </object> + <object class="NSBox" id="282101470"> + <reference key="NSNextResponder" ref="1019868804"/> + <int key="NSvFlags">266</int> + <object class="NSMutableArray" key="NSSubviews"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSView" id="929379"> + <reference key="NSNextResponder" ref="282101470"/> + <int key="NSvFlags">256</int> + <object class="NSMutableArray" key="NSSubviews"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSSlider" id="552234083"> + <reference key="NSNextResponder" ref="929379"/> + <int key="NSvFlags">266</int> + <string key="NSFrame">{{24, 179}, {337, 25}}</string> + <reference key="NSSuperview" ref="929379"/> + <bool key="NSEnabled">YES</bool> + <object class="NSSliderCell" key="NSCell" id="629844970"> + <int key="NSCellFlags">67501824</int> + <int key="NSCellFlags2">0</int> + <object class="NSMutableString" key="NSContents"> + <characters key="NS.bytes"/> + </object> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="552234083"/> + <double key="NSMaxValue">1.000000e+02</double> + <double key="NSMinValue">0.000000e+00</double> + <double key="NSValue">0.000000e+00</double> + <double key="NSAltIncValue">0.000000e+00</double> + <int key="NSNumberOfTickMarks">11</int> + <int key="NSTickMarkPosition">0</int> + <bool key="NSAllowsTickMarkValuesOnly">NO</bool> + <bool key="NSVertical">NO</bool> + </object> + </object> + <object class="NSTextField" id="576071402"> + <reference key="NSNextResponder" ref="929379"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{13, 211}, {185, 17}}</string> + <reference key="NSSuperview" ref="929379"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="380679549"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">4194304</int> + <string key="NSContents">Get tickets that are valid for:</string> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="576071402"/> + <reference key="NSBackgroundColor" ref="876444531"/> + <reference key="NSTextColor" ref="883746258"/> + </object> + </object> + <object class="NSTextField" id="54325332"> + <reference key="NSNextResponder" ref="929379"/> + <int key="NSvFlags">266</int> + <string key="NSFrame">{{23, 157}, {339, 14}}</string> + <reference key="NSSuperview" ref="929379"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="584202005"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">4325376</int> + <string key="NSContents">10 hours</string> + <reference key="NSSupport" ref="26"/> + <reference key="NSControlView" ref="54325332"/> + <reference key="NSBackgroundColor" ref="876444531"/> + <reference key="NSTextColor" ref="883746258"/> + </object> + </object> + <object class="NSTextField" id="240805237"> + <reference key="NSNextResponder" ref="929379"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{13, 132}, {133, 17}}</string> + <reference key="NSSuperview" ref="929379"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="638526338"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">71303168</int> + <string key="NSContents">Kerberos 5 Options:</string> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="240805237"/> + <reference key="NSBackgroundColor" ref="876444531"/> + <reference key="NSTextColor" ref="883746258"/> + </object> + </object> + <object class="NSSlider" id="373804676"> + <reference key="NSNextResponder" ref="929379"/> + <int key="NSvFlags">266</int> + <string key="NSFrame">{{42, 34}, {301, 25}}</string> + <reference key="NSSuperview" ref="929379"/> + <bool key="NSEnabled">YES</bool> + <object class="NSSliderCell" key="NSCell" id="84127609"> + <int key="NSCellFlags">67501824</int> + <int key="NSCellFlags2">0</int> + <object class="NSMutableString" key="NSContents"> + <characters key="NS.bytes"/> + </object> + <object class="NSFont" key="NSSupport"> + <string key="NSName">Helvetica</string> + <double key="NSSize">1.200000e+01</double> + <int key="NSfFlags">16</int> + </object> + <reference key="NSControlView" ref="373804676"/> + <double key="NSMaxValue">1.000000e+05</double> + <double key="NSMinValue">0.000000e+00</double> + <double key="NSValue">2.484663e+04</double> + <double key="NSAltIncValue">0.000000e+00</double> + <int key="NSNumberOfTickMarks">8</int> + <int key="NSTickMarkPosition">0</int> + <bool key="NSAllowsTickMarkValuesOnly">NO</bool> + <bool key="NSVertical">NO</bool> + </object> + </object> + <object class="NSButton" id="910622795"> + <reference key="NSNextResponder" ref="929379"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{24, 86}, {303, 18}}</string> + <reference key="NSSuperview" ref="929379"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="878349972"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">0</int> + <string key="NSContents">Get tickets without IP addresses (NAT mode)</string> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="910622795"/> + <int key="NSButtonFlags">1211912703</int> + <int key="NSButtonFlags2">2</int> + <object class="NSButtonImageSource" key="NSAlternateImage" id="565361234"> + <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="415869872"> + <reference key="NSNextResponder" ref="929379"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{24, 108}, {351, 18}}</string> + <reference key="NSSuperview" ref="929379"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="77611886"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">0</int> + <string key="NSContents">Get tickets that can be forwarded to other machines</string> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="415869872"/> + <int key="NSButtonFlags">1211912703</int> + <int key="NSButtonFlags2">2</int> + <reference key="NSAlternateImage" ref="565361234"/> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> + </object> + </object> + <object class="NSButton" id="606962746"> + <reference key="NSNextResponder" ref="929379"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{24, 64}, {248, 18}}</string> + <reference key="NSSuperview" ref="929379"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="583273626"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">0</int> + <string key="NSContents">Get tickets that can be renewed for:</string> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="606962746"/> + <int key="NSButtonFlags">1211912703</int> + <int key="NSButtonFlags2">2</int> + <reference key="NSAlternateImage" ref="565361234"/> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> + </object> + </object> + <object class="NSTextField" id="956800130"> + <reference key="NSNextResponder" ref="929379"/> + <int key="NSvFlags">266</int> + <string key="NSFrame">{{41, 12}, {303, 14}}</string> + <reference key="NSSuperview" ref="929379"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="596249502"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">4325376</int> + <string key="NSContents">6 days, 17 hours, 45 minutes</string> + <reference key="NSSupport" ref="26"/> + <reference key="NSControlView" ref="956800130"/> + <reference key="NSBackgroundColor" ref="876444531"/> + <reference key="NSTextColor" ref="883746258"/> + </object> + </object> + </object> + <string key="NSFrame">{{3, 3}, {387, 238}}</string> + <reference key="NSSuperview" ref="282101470"/> + </object> + </object> + <string key="NSFrame">{{17, 56}, {393, 244}}</string> + <reference key="NSSuperview" ref="1019868804"/> + <string key="NSOffsets">{0, 0}</string> + <object class="NSTextFieldCell" key="NSTitleCell"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">0</int> + <string key="NSContents">Ticket Options</string> + <reference key="NSSupport" ref="445233186"/> + <reference key="NSBackgroundColor" ref="830301085"/> + <object class="NSColor" key="NSTextColor"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes> + </object> + </object> + <reference key="NSContentView" ref="929379"/> + <int key="NSBorderType">2</int> + <int key="NSBoxType">1</int> + <int key="NSTitlePosition">0</int> + <bool key="NSTransparent">NO</bool> + </object> + <object class="NSButton" id="932240937"> + <reference key="NSNextResponder" ref="1019868804"/> + <int key="NSvFlags">289</int> + <string key="NSFrame">{{331, 12}, {82, 32}}</string> + <reference key="NSSuperview" ref="1019868804"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="870649207"> <int key="NSCellFlags">67239424</int> <int key="NSCellFlags2">134217728</int> - <string key="NSContents">Select</string> + <string key="NSContents">OK</string> <reference key="NSSupport" ref="604532625"/> - <reference key="NSControlView" ref="426244837"/> + <reference key="NSControlView" ref="932240937"/> <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">1</int> - <reference key="NSAlternateImage" ref="604532625"/> + <int key="NSButtonFlags2">129</int> <string key="NSAlternateContents"/> <string type="base64-UTF8" key="NSKeyEquivalent">DQ</string> <int key="NSPeriodicDelay">200</int> <int key="NSPeriodicInterval">25</int> </object> </object> - <object class="NSButton" id="505388869"> - <reference key="NSNextResponder" ref="928852707"/> + <object class="NSButton" id="871834199"> + <reference key="NSNextResponder" ref="1019868804"/> <int key="NSvFlags">289</int> - <string key="NSFrame">{{308, 12}, {82, 32}}</string> - <reference key="NSSuperview" ref="928852707"/> + <string key="NSFrame">{{249, 12}, {82, 32}}</string> + <reference key="NSSuperview" ref="1019868804"/> <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="720384657"> + <object class="NSButtonCell" key="NSCell" id="754483226"> <int key="NSCellFlags">67239424</int> <int key="NSCellFlags2">134217728</int> <string key="NSContents">Cancel</string> <reference key="NSSupport" ref="604532625"/> - <reference key="NSControlView" ref="505388869"/> + <reference key="NSControlView" ref="871834199"/> <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">1</int> - <reference key="NSAlternateImage" ref="604532625"/> + <int key="NSButtonFlags2">129</int> <string key="NSAlternateContents"/> <string type="base64-UTF8" key="NSKeyEquivalent">Gw</string> <int key="NSPeriodicDelay">200</int> <int key="NSPeriodicInterval">25</int> </object> </object> - <object class="NSButton" id="818868322"> - <reference key="NSNextResponder" ref="928852707"/> - <int key="NSvFlags">292</int> - <string key="NSFrame">{{43, 30}, {22, 22}}</string> - <reference key="NSSuperview" ref="928852707"/> + <object class="NSButton" id="669516699"> + <reference key="NSNextResponder" ref="1019868804"/> + <int key="NSvFlags">289</int> + <string key="NSFrame">{{129, 12}, {120, 32}}</string> + <reference key="NSSuperview" ref="1019868804"/> <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="872529405"> + <object class="NSButtonCell" key="NSCell" id="362266618"> <int key="NSCellFlags">67239424</int> <int key="NSCellFlags2">134217728</int> - <string key="NSContents"/> + <string key="NSContents">Use Defaults</string> <reference key="NSSupport" ref="604532625"/> - <reference key="NSControlView" ref="818868322"/> - <int key="NSButtonFlags">-2042347265</int> - <int key="NSButtonFlags2">134</int> - <object class="NSCustomResource" key="NSNormalImage"> - <string key="NSClassName">NSImage</string> - <string key="NSResourceName">Remove</string> - </object> - <object class="NSCustomResource" key="NSAlternateImage"> - <string key="NSClassName">NSImage</string> - <string key="NSResourceName">Remove_Pressed</string> - </object> + <reference key="NSControlView" ref="669516699"/> + <int key="NSButtonFlags">-2038284033</int> + <int key="NSButtonFlags2">129</int> <string key="NSAlternateContents"/> <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> </object> </object> - <object class="NSButton" id="774532696"> - <reference key="NSNextResponder" ref="928852707"/> - <int key="NSvFlags">292</int> - <string key="NSFrame">{{20, 30}, {23, 22}}</string> - <reference key="NSSuperview" ref="928852707"/> + <object class="NSTextField" id="958176038"> + <reference key="NSNextResponder" ref="1019868804"/> + <int key="NSvFlags">-2147483380</int> + <string key="NSFrame">{{66, 338}, {344, 17}}</string> + <reference key="NSSuperview" ref="1019868804"/> <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="958553500"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents"/> + <object class="NSTextFieldCell" key="NSCell" id="196100637"> + <int key="NSCellFlags">68288064</int> + <int key="NSCellFlags2">272630784</int> + <string key="NSContents">Label</string> <reference key="NSSupport" ref="604532625"/> - <reference key="NSControlView" ref="774532696"/> - <int key="NSButtonFlags">-2042347265</int> - <int key="NSButtonFlags2">134</int> - <object class="NSCustomResource" key="NSNormalImage"> - <string key="NSClassName">NSImage</string> - <string key="NSResourceName">Add</string> - </object> - <object class="NSCustomResource" key="NSAlternateImage"> - <string key="NSClassName">NSImage</string> - <string key="NSResourceName">Add_Pressed</string> - </object> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> + <reference key="NSControlView" ref="958176038"/> + <reference key="NSBackgroundColor" ref="876444531"/> + <reference key="NSTextColor" ref="883746258"/> </object> </object> - <object class="NSCustomView" id="700535463"> - <reference key="NSNextResponder" ref="928852707"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{20, 231}, {64, 64}}</string> - <reference key="NSSuperview" ref="928852707"/> - <string key="NSClassName">BadgedImageView</string> + <object class="NSTextField" id="546844125"> + <reference key="NSNextResponder" ref="1019868804"/> + <int key="NSvFlags">-2147483380</int> + <string key="NSFrame">{{66, 308}, {344, 17}}</string> + <reference key="NSSuperview" ref="1019868804"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="725579124"> + <int key="NSCellFlags">68288064</int> + <int key="NSCellFlags2">272630784</int> + <string key="NSContents">Label</string> + <reference key="NSSupport" ref="604532625"/> + <reference key="NSControlView" ref="546844125"/> + <reference key="NSBackgroundColor" ref="876444531"/> + <reference key="NSTextColor" ref="883746258"/> + </object> </object> </object> - <string key="NSFrameSize">{491, 315}</string> + <string key="NSFrameSize">{427, 378}</string> <reference key="NSSuperview"/> </object> - <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string> - <string key="NSMinSize">{419, 320}</string> - <string key="NSMaxSize">{600, 622}</string> + <string key="NSScreenRect">{{0, 0}, {1280, 778}}</string> + <string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string> </object> - <object class="NSArrayController" id="333357907"> + <object class="NSObjectController" id="196152721"> <object class="NSMutableArray" key="NSDeclaredKeys"> <bool key="EncodedWithXMLCoder">YES</bool> - <string>timeRemaining</string> - <string>principal</string> - <string>isFavorite</string> - <string>description</string> - <string>expirationDate</string> + <string>realmString</string> + <string>isForwardable</string> + <string>isProxiable</string> + <string>isRenewable</string> + <string>renewableLifetime</string> + <string>componentsString</string> + <string>favorite</string> + <string>isAddressless</string> + <string>validLifetime</string> + <string>renewableLifetimeString</string> + <string>validLifetimeString</string> + <string>hasCCache</string> </object> + <string key="NSObjectClassName">Identity</string> <bool key="NSEditable">YES</bool> <object class="_NSManagedProxy" key="_NSManagedProxy"/> - <bool key="NSAvoidsEmptySelection">YES</bool> - <bool key="NSPreservesSelection">YES</bool> - <bool key="NSSelectsInsertedObjects">YES</bool> - <bool key="NSFilterRestrictsInsertion">YES</bool> - <bool key="NSClearsFilterPredicateOnInsertion">YES</bool> </object> - <object class="NSCustomObject" id="307777557"> - <string key="NSClassName">KerberosTimeFormatter</string> + <object class="NSObjectController" id="1031761104"> + <object class="NSMutableArray" key="NSDeclaredKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>minimumValidLifetime</string> + <string>maximumValidLifetime</string> + <string>minimumRenewableLifetime</string> + <string>maximumRenewableLifetime</string> + <string>favorite</string> + <string>identities</string> + </object> + <string key="NSObjectClassName">Identities</string> + <object class="_NSManagedProxy" key="_NSManagedProxy"/> </object> </object> <object class="IBObjectContainer" key="IBDocument.Objects"> @@ -419,14 +949,6 @@ <bool key="EncodedWithXMLCoder">YES</bool> <object class="IBConnectionRecord"> <object class="IBOutletConnection" key="connection"> - <string key="label">identityTableColumn</string> - <reference key="source" ref="262677138"/> - <reference key="destination" ref="697375404"/> - </object> - <int key="connectionID">300157</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> <string key="label">kerberosIconImageView</string> <reference key="source" ref="262677138"/> <reference key="destination" ref="700535463"/> @@ -435,22 +957,6 @@ </object> <object class="IBConnectionRecord"> <object class="IBOutletConnection" key="connection"> - <string key="label">timeRemainingTableColumn</string> - <reference key="source" ref="262677138"/> - <reference key="destination" ref="1004662124"/> - </object> - <int key="connectionID">300159</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">removeIdentityButton</string> - <reference key="source" ref="262677138"/> - <reference key="destination" ref="818868322"/> - </object> - <int key="connectionID">300161</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> <string key="label">headerTextField</string> <reference key="source" ref="262677138"/> <reference key="destination" ref="499468804"/> @@ -475,14 +981,6 @@ </object> <object class="IBConnectionRecord"> <object class="IBOutletConnection" key="connection"> - <string key="label">addIdentityButton</string> - <reference key="source" ref="262677138"/> - <reference key="destination" ref="774532696"/> - </object> - <int key="connectionID">300166</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> <string key="label">selectIdentityButton</string> <reference key="source" ref="262677138"/> <reference key="destination" ref="426244837"/> @@ -491,14 +989,6 @@ </object> <object class="IBConnectionRecord"> <object class="IBActionConnection" key="connection"> - <string key="label">select:</string> - <reference key="source" ref="262677138"/> - <reference key="destination" ref="426244837"/> - </object> - <int key="connectionID">300168</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> <string key="label">cancel:</string> <reference key="source" ref="262677138"/> <reference key="destination" ref="505388869"/> @@ -507,43 +997,51 @@ </object> <object class="IBConnectionRecord"> <object class="IBOutletConnection" key="connection"> - <string key="label">identityTableView</string> + <string key="label">window</string> <reference key="source" ref="262677138"/> - <reference key="destination" ref="988096643"/> + <reference key="destination" ref="224590347"/> </object> - <int key="connectionID">300172</int> + <int key="connectionID">300181</int> </object> <object class="IBConnectionRecord"> <object class="IBOutletConnection" key="connection"> - <string key="label">delegate</string> - <reference key="source" ref="224590347"/> - <reference key="destination" ref="262677138"/> + <string key="label">identityArrayController</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="333357907"/> </object> - <int key="connectionID">300174</int> + <int key="connectionID">300184</int> </object> <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">window</string> - <reference key="source" ref="262677138"/> - <reference key="destination" ref="224590347"/> + <object class="IBBindingConnection" key="connection"> + <string key="label">enabled: canAdd</string> + <reference key="source" ref="949861041"/> + <reference key="destination" ref="333357907"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="949861041"/> + <reference key="NSDestination" ref="333357907"/> + <string key="NSLabel">enabled: canAdd</string> + <string key="NSBinding">enabled</string> + <string key="NSKeyPath">canAdd</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> </object> - <int key="connectionID">300181</int> + <int key="connectionID">300210</int> </object> <object class="IBConnectionRecord"> <object class="IBOutletConnection" key="connection"> - <string key="label">identityArrayController</string> + <string key="label">addIdentityButton</string> <reference key="source" ref="262677138"/> - <reference key="destination" ref="333357907"/> + <reference key="destination" ref="949861041"/> </object> - <int key="connectionID">300184</int> + <int key="connectionID">300214</int> </object> <object class="IBConnectionRecord"> <object class="IBBindingConnection" key="connection"> <string key="label">content: arrangedObjects</string> - <reference key="source" ref="988096643"/> + <reference key="source" ref="631507655"/> <reference key="destination" ref="333357907"/> <object class="NSNibBindingConnector" key="connector" id="355877009"> - <reference key="NSSource" ref="988096643"/> + <reference key="NSSource" ref="631507655"/> <reference key="NSDestination" ref="333357907"/> <string key="NSLabel">content: arrangedObjects</string> <string key="NSBinding">content</string> @@ -551,116 +1049,609 @@ <int key="NSNibBindingConnectorVersion">2</int> </object> </object> - <int key="connectionID">300185</int> + <int key="connectionID">300229</int> </object> <object class="IBConnectionRecord"> <object class="IBBindingConnection" key="connection"> - <string key="label">value: arrangedObjects.principal</string> - <reference key="source" ref="697375404"/> + <string key="label">selectionIndexes: selectionIndexes</string> + <reference key="source" ref="631507655"/> + <reference key="destination" ref="333357907"/> + <object class="NSNibBindingConnector" key="connector" id="824847554"> + <reference key="NSSource" ref="631507655"/> + <reference key="NSDestination" ref="333357907"/> + <string key="NSLabel">selectionIndexes: selectionIndexes</string> + <string key="NSBinding">selectionIndexes</string> + <string key="NSKeyPath">selectionIndexes</string> + <reference key="NSPreviousConnector" ref="355877009"/> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300230</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">formatter</string> + <reference key="source" ref="519561276"/> + <reference key="destination" ref="307777557"/> + </object> + <int key="connectionID">300242</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">formatter</string> + <reference key="source" ref="968276158"/> + <reference key="destination" ref="355705187"/> + </object> + <int key="connectionID">300245</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: arrangedObjects.principalString</string> + <reference key="source" ref="1025403577"/> <reference key="destination" ref="333357907"/> <object class="NSNibBindingConnector" key="connector"> - <reference key="NSSource" ref="697375404"/> + <reference key="NSSource" ref="1025403577"/> <reference key="NSDestination" ref="333357907"/> - <string key="NSLabel">value: arrangedObjects.principal</string> + <string key="NSLabel">value: arrangedObjects.principalString</string> <string key="NSBinding">value</string> - <string key="NSKeyPath">arrangedObjects.principal</string> + <string key="NSKeyPath">arrangedObjects.principalString</string> + <object class="NSDictionary" key="NSOptions"> + <string key="NS.key.0">NSConditionallySetsEditable</string> + <integer value="1" key="NS.object.0" id="9"/> + </object> <int key="NSNibBindingConnectorVersion">2</int> </object> </object> - <int key="connectionID">300187</int> + <int key="connectionID">300246</int> </object> <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">remove:</string> - <reference key="source" ref="333357907"/> - <reference key="destination" ref="818868322"/> + <object class="IBOutletConnection" key="connection"> + <string key="label">delegate</string> + <reference key="source" ref="224590347"/> + <reference key="destination" ref="262677138"/> </object> - <int key="connectionID">300189</int> + <int key="connectionID">300251</int> </object> <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">insert:</string> - <reference key="source" ref="333357907"/> - <reference key="destination" ref="774532696"/> + <object class="IBOutletConnection" key="connection"> + <string key="label">identityTableView</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="631507655"/> </object> - <int key="connectionID">300191</int> + <int key="connectionID">300252</int> </object> <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">formatter</string> - <reference key="source" ref="618557697"/> - <reference key="destination" ref="307777557"/> + <object class="IBActionConnection" key="connection"> + <string key="label">cancel:</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="968276158"/> </object> - <int key="connectionID">300197</int> + <int key="connectionID">300253</int> </object> <object class="IBConnectionRecord"> <object class="IBBindingConnection" key="connection"> <string key="label">value: arrangedObjects.expirationDate</string> - <reference key="source" ref="1004662124"/> + <reference key="source" ref="917941739"/> <reference key="destination" ref="333357907"/> <object class="NSNibBindingConnector" key="connector"> - <reference key="NSSource" ref="1004662124"/> + <reference key="NSSource" ref="917941739"/> <reference key="NSDestination" ref="333357907"/> <string key="NSLabel">value: arrangedObjects.expirationDate</string> <string key="NSBinding">value</string> <string key="NSKeyPath">arrangedObjects.expirationDate</string> <object class="NSDictionary" key="NSOptions"> <string key="NS.key.0">NSConditionallySetsEditable</string> - <integer value="0" key="NS.object.0"/> + <reference key="NS.object.0" ref="9"/> </object> <int key="NSNibBindingConnectorVersion">2</int> </object> </object> - <int key="connectionID">300198</int> + <int key="connectionID">300255</int> </object> <object class="IBConnectionRecord"> <object class="IBBindingConnection" key="connection"> - <string key="label">selectionIndexes: selectionIndexes</string> - <reference key="source" ref="988096643"/> + <string key="label">sortDescriptors: sortDescriptors</string> + <reference key="source" ref="631507655"/> <reference key="destination" ref="333357907"/> <object class="NSNibBindingConnector" key="connector"> - <reference key="NSSource" ref="988096643"/> + <reference key="NSSource" ref="631507655"/> <reference key="NSDestination" ref="333357907"/> - <string key="NSLabel">selectionIndexes: selectionIndexes</string> - <string key="NSBinding">selectionIndexes</string> - <string key="NSKeyPath">selectionIndexes</string> - <reference key="NSPreviousConnector" ref="355877009"/> + <string key="NSLabel">sortDescriptors: sortDescriptors</string> + <string key="NSBinding">sortDescriptors</string> + <string key="NSKeyPath">sortDescriptors</string> + <reference key="NSPreviousConnector" ref="824847554"/> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300259</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">select:</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="426244837"/> + </object> + <int key="connectionID">300293</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">delegate</string> + <reference key="source" ref="54325332"/> + <reference key="destination" ref="552234083"/> + </object> + <int key="connectionID">300325</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">delegate</string> + <reference key="source" ref="956800130"/> + <reference key="destination" ref="373804676"/> + </object> + <int key="connectionID">300328</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">enabled: selection.isRenewable</string> + <reference key="source" ref="373804676"/> + <reference key="destination" ref="196152721"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="373804676"/> + <reference key="NSDestination" ref="196152721"/> + <string key="NSLabel">enabled: selection.isRenewable</string> + <string key="NSBinding">enabled</string> + <string key="NSKeyPath">selection.isRenewable</string> <int key="NSNibBindingConnectorVersion">2</int> </object> </object> - <int key="connectionID">300199</int> + <int key="connectionID">300356</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">identityOptionsController</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="196152721"/> + </object> + <int key="connectionID">300357</int> </object> <object class="IBConnectionRecord"> <object class="IBBindingConnection" key="connection"> - <string key="label">enabled: canRemove</string> - <reference key="source" ref="818868322"/> + <string key="label">value: selection.isRenewable</string> + <reference key="source" ref="606962746"/> + <reference key="destination" ref="196152721"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="606962746"/> + <reference key="NSDestination" ref="196152721"/> + <string key="NSLabel">value: selection.isRenewable</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.isRenewable</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300366</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: arrangedObjects.favorite</string> + <reference key="source" ref="850969979"/> <reference key="destination" ref="333357907"/> <object class="NSNibBindingConnector" key="connector"> - <reference key="NSSource" ref="818868322"/> + <reference key="NSSource" ref="850969979"/> <reference key="NSDestination" ref="333357907"/> - <string key="NSLabel">enabled: canRemove</string> - <string key="NSBinding">enabled</string> - <string key="NSKeyPath">canRemove</string> + <string key="NSLabel">value: arrangedObjects.favorite</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">arrangedObjects.favorite</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300367</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.isForwardable</string> + <reference key="source" ref="415869872"/> + <reference key="destination" ref="196152721"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="415869872"/> + <reference key="NSDestination" ref="196152721"/> + <string key="NSLabel">value: selection.isForwardable</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.isForwardable</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300368</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.isAddressless</string> + <reference key="source" ref="910622795"/> + <reference key="destination" ref="196152721"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="910622795"/> + <reference key="NSDestination" ref="196152721"/> + <string key="NSLabel">value: selection.isAddressless</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.isAddressless</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300369</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">maxValue: selection.maximumValidLifetime</string> + <reference key="source" ref="552234083"/> + <reference key="destination" ref="1031761104"/> + <object class="NSNibBindingConnector" key="connector" id="716397596"> + <reference key="NSSource" ref="552234083"/> + <reference key="NSDestination" ref="1031761104"/> + <string key="NSLabel">maxValue: selection.maximumValidLifetime</string> + <string key="NSBinding">maxValue</string> + <string key="NSKeyPath">selection.maximumValidLifetime</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300372</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">minValue: selection.minimumValidLifetime</string> + <reference key="source" ref="552234083"/> + <reference key="destination" ref="1031761104"/> + <object class="NSNibBindingConnector" key="connector" id="445222138"> + <reference key="NSSource" ref="552234083"/> + <reference key="NSDestination" ref="1031761104"/> + <string key="NSLabel">minValue: selection.minimumValidLifetime</string> + <string key="NSBinding">minValue</string> + <string key="NSKeyPath">selection.minimumValidLifetime</string> + <reference key="NSPreviousConnector" ref="716397596"/> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300373</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.validLifetime</string> + <reference key="source" ref="552234083"/> + <reference key="destination" ref="196152721"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="552234083"/> + <reference key="NSDestination" ref="196152721"/> + <string key="NSLabel">value: selection.validLifetime</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.validLifetime</string> + <reference key="NSPreviousConnector" ref="445222138"/> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300378</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">identitiesController</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="1031761104"/> + </object> + <int key="connectionID">300380</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">maxValue: selection.maximumRenewableLifetime</string> + <reference key="source" ref="373804676"/> + <reference key="destination" ref="1031761104"/> + <object class="NSNibBindingConnector" key="connector" id="436583425"> + <reference key="NSSource" ref="373804676"/> + <reference key="NSDestination" ref="1031761104"/> + <string key="NSLabel">maxValue: selection.maximumRenewableLifetime</string> + <string key="NSBinding">maxValue</string> + <string key="NSKeyPath">selection.maximumRenewableLifetime</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300381</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">minValue: selection.minimumRenewableLifetime</string> + <reference key="source" ref="373804676"/> + <reference key="destination" ref="1031761104"/> + <object class="NSNibBindingConnector" key="connector" id="601981852"> + <reference key="NSSource" ref="373804676"/> + <reference key="NSDestination" ref="1031761104"/> + <string key="NSLabel">minValue: selection.minimumRenewableLifetime</string> + <string key="NSBinding">minValue</string> + <string key="NSKeyPath">selection.minimumRenewableLifetime</string> + <reference key="NSPreviousConnector" ref="436583425"/> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300384</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.renewableLifetime</string> + <reference key="source" ref="373804676"/> + <reference key="destination" ref="196152721"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="373804676"/> + <reference key="NSDestination" ref="196152721"/> + <string key="NSLabel">value: selection.renewableLifetime</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.renewableLifetime</string> + <reference key="NSPreviousConnector" ref="601981852"/> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300385</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.renewableLifetimeString</string> + <reference key="source" ref="956800130"/> + <reference key="destination" ref="196152721"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="956800130"/> + <reference key="NSDestination" ref="196152721"/> + <string key="NSLabel">value: selection.renewableLifetimeString</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.renewableLifetimeString</string> <int key="NSNibBindingConnectorVersion">2</int> </object> </object> - <int key="connectionID">300200</int> + <int key="connectionID">300386</int> </object> <object class="IBConnectionRecord"> <object class="IBBindingConnection" key="connection"> - <string key="label">enabled: canInsert</string> - <reference key="source" ref="774532696"/> + <string key="label">value: selection.validLifetimeString</string> + <reference key="source" ref="54325332"/> + <reference key="destination" ref="196152721"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="54325332"/> + <reference key="NSDestination" ref="196152721"/> + <string key="NSLabel">value: selection.validLifetimeString</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.validLifetimeString</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300388</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">nameField</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="485004197"/> + </object> + <int key="connectionID">300396</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">realmField</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="623163777"/> + </object> + <int key="connectionID">300397</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.componentsString</string> + <reference key="source" ref="958176038"/> + <reference key="destination" ref="196152721"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="958176038"/> + <reference key="NSDestination" ref="196152721"/> + <string key="NSLabel">value: selection.componentsString</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.componentsString</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300404</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.realmString</string> + <reference key="source" ref="546844125"/> + <reference key="destination" ref="196152721"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="546844125"/> + <reference key="NSDestination" ref="196152721"/> + <string key="NSLabel">value: selection.realmString</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.realmString</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300411</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">hidden: selection.hasCCache</string> + <reference key="source" ref="623163777"/> + <reference key="destination" ref="196152721"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="623163777"/> + <reference key="NSDestination" ref="196152721"/> + <string key="NSLabel">hidden: selection.hasCCache</string> + <string key="NSBinding">hidden</string> + <string key="NSKeyPath">selection.hasCCache</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300419</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">hidden: selection.hasCCache</string> + <reference key="source" ref="546844125"/> + <reference key="destination" ref="196152721"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="546844125"/> + <reference key="NSDestination" ref="196152721"/> + <string key="NSLabel">hidden: selection.hasCCache</string> + <string key="NSBinding">hidden</string> + <string key="NSKeyPath">selection.hasCCache</string> + <object class="NSDictionary" key="NSOptions"> + <string key="NS.key.0">NSValueTransformerName</string> + <string key="NS.object.0">NSNegateBoolean</string> + </object> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300420</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">hidden: selection.hasCCache</string> + <reference key="source" ref="958176038"/> + <reference key="destination" ref="196152721"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="958176038"/> + <reference key="NSDestination" ref="196152721"/> + <string key="NSLabel">hidden: selection.hasCCache</string> + <string key="NSBinding">hidden</string> + <string key="NSKeyPath">selection.hasCCache</string> + <object class="NSDictionary" key="NSOptions"> + <string key="NS.key.0">NSValueTransformerName</string> + <string key="NS.object.0">NSNegateBoolean</string> + </object> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300421</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">hidden: selection.hasCCache</string> + <reference key="source" ref="485004197"/> + <reference key="destination" ref="196152721"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="485004197"/> + <reference key="NSDestination" ref="196152721"/> + <string key="NSLabel">hidden: selection.hasCCache</string> + <string key="NSBinding">hidden</string> + <string key="NSKeyPath">selection.hasCCache</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300422</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">hidden: selection.favorite</string> + <reference key="source" ref="136217401"/> <reference key="destination" ref="333357907"/> <object class="NSNibBindingConnector" key="connector"> - <reference key="NSSource" ref="774532696"/> + <reference key="NSSource" ref="136217401"/> <reference key="NSDestination" ref="333357907"/> - <string key="NSLabel">enabled: canInsert</string> - <string key="NSBinding">enabled</string> - <string key="NSKeyPath">canInsert</string> + <string key="NSLabel">hidden: selection.favorite</string> + <string key="NSBinding">hidden</string> + <string key="NSKeyPath">selection.favorite</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300438</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">hidden: selection.favorite</string> + <reference key="source" ref="778570067"/> + <reference key="destination" ref="333357907"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="778570067"/> + <reference key="NSDestination" ref="333357907"/> + <string key="NSLabel">hidden: selection.favorite</string> + <string key="NSBinding">hidden</string> + <string key="NSKeyPath">selection.favorite</string> + <object class="NSDictionary" key="NSOptions"> + <string key="NS.key.0">NSValueTransformerName</string> + <string key="NS.object.0">NSNegateBoolean</string> + </object> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300440</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">addToFavorites:</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="136217401"/> + </object> + <int key="connectionID">300441</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">removeFromFavorites:</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="778570067"/> + </object> + <int key="connectionID">300442</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">contentArray: selection.identities</string> + <reference key="source" ref="333357907"/> + <reference key="destination" ref="1031761104"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="333357907"/> + <reference key="NSDestination" ref="1031761104"/> + <string key="NSLabel">contentArray: selection.identities</string> + <string key="NSBinding">contentArray</string> + <string key="NSKeyPath">selection.identities</string> <int key="NSNibBindingConnectorVersion">2</int> </object> </object> - <int key="connectionID">300201</int> + <int key="connectionID">300444</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">newIdentity:</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="949861041"/> + </object> + <int key="connectionID">300450</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">identityOptionsWindow</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="370461416"/> + </object> + <int key="connectionID">300451</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">editOptions:</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="553755370"/> + </object> + <int key="connectionID">300452</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">cancelOptions:</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="871834199"/> + </object> + <int key="connectionID">300453</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">resetOptions:</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="669516699"/> + </object> + <int key="connectionID">300454</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">doneOptions:</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="932240937"/> + </object> + <int key="connectionID">300455</int> </object> </object> <object class="IBMutableOrderedSet" key="objectRecords"> @@ -702,13 +1693,13 @@ <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> <reference ref="499468804"/> - <reference ref="818868322"/> - <reference ref="774532696"/> <reference ref="675887072"/> <reference ref="505388869"/> <reference ref="700535463"/> <reference ref="426244837"/> - <reference ref="147207906"/> + <reference ref="949861041"/> + <reference ref="616284695"/> + <reference ref="263312988"/> </object> <reference key="parent" ref="224590347"/> </object> @@ -722,169 +1713,533 @@ <reference key="parent" ref="928852707"/> </object> <object class="IBObjectRecord"> - <int key="objectID">9</int> - <reference key="object" ref="147207906"/> + <int key="objectID">15</int> + <reference key="object" ref="426244837"/> <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="988096643"/> - <reference ref="80966883"/> - <reference ref="564144656"/> - <reference ref="401017936"/> + <reference ref="686991406"/> </object> <reference key="parent" ref="928852707"/> </object> <object class="IBObjectRecord"> - <int key="objectID">10</int> - <reference key="object" ref="988096643"/> + <int key="objectID">16</int> + <reference key="object" ref="505388869"/> <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="697375404"/> - <reference ref="1004662124"/> + <reference ref="720384657"/> </object> - <reference key="parent" ref="147207906"/> + <reference key="parent" ref="928852707"/> </object> <object class="IBObjectRecord"> - <int key="objectID">11</int> - <reference key="object" ref="697375404"/> + <int key="objectID">100008</int> + <reference key="object" ref="82820472"/> + <reference key="parent" ref="499468804"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">100015</int> + <reference key="object" ref="686991406"/> + <reference key="parent" ref="426244837"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">100016</int> + <reference key="object" ref="720384657"/> + <reference key="parent" ref="505388869"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-3</int> + <reference key="object" ref="714830734"/> + <reference key="parent" ref="0"/> + <string key="objectName">Application</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300118</int> + <reference key="object" ref="675887072"/> <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="325541546"/> + <reference ref="542766611"/> </object> - <reference key="parent" ref="988096643"/> + <reference key="parent" ref="928852707"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300119</int> + <reference key="object" ref="542766611"/> + <reference key="parent" ref="675887072"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300156</int> + <reference key="object" ref="700535463"/> + <reference key="parent" ref="928852707"/> </object> <object class="IBObjectRecord"> - <int key="objectID">18</int> - <reference key="object" ref="1004662124"/> + <int key="objectID">300183</int> + <reference key="object" ref="333357907"/> + <reference key="parent" ref="0"/> + <string key="objectName">Identities Array Controller</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300196</int> + <reference key="object" ref="307777557"/> + <reference key="parent" ref="0"/> + <string key="objectName">Time Formatter</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300206</int> + <reference key="object" ref="949861041"/> <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="618557697"/> + <reference ref="871232847"/> </object> - <reference key="parent" ref="988096643"/> + <reference key="parent" ref="928852707"/> </object> <object class="IBObjectRecord"> - <int key="objectID">15</int> - <reference key="object" ref="426244837"/> + <int key="objectID">300207</int> + <reference key="object" ref="871232847"/> + <reference key="parent" ref="949861041"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300216</int> + <reference key="object" ref="616284695"/> <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="686991406"/> + <reference ref="810829004"/> + <reference ref="836592269"/> + <reference ref="631507655"/> + <reference ref="282626403"/> </object> <reference key="parent" ref="928852707"/> </object> <object class="IBObjectRecord"> - <int key="objectID">16</int> - <reference key="object" ref="505388869"/> + <int key="objectID">300217</int> + <reference key="object" ref="810829004"/> + <reference key="parent" ref="616284695"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300218</int> + <reference key="object" ref="836592269"/> + <reference key="parent" ref="616284695"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300219</int> + <reference key="object" ref="631507655"/> <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="720384657"/> + <reference ref="1025403577"/> + <reference ref="917941739"/> + <reference ref="850969979"/> </object> - <reference key="parent" ref="928852707"/> + <reference key="parent" ref="616284695"/> </object> <object class="IBObjectRecord"> - <int key="objectID">100008</int> - <reference key="object" ref="82820472"/> - <reference key="parent" ref="499468804"/> + <int key="objectID">300220</int> + <reference key="object" ref="282626403"/> + <reference key="parent" ref="616284695"/> </object> <object class="IBObjectRecord"> - <int key="objectID">100015</int> - <reference key="object" ref="686991406"/> - <reference key="parent" ref="426244837"/> + <int key="objectID">300221</int> + <reference key="object" ref="1025403577"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="475156882"/> + </object> + <reference key="parent" ref="631507655"/> </object> <object class="IBObjectRecord"> - <int key="objectID">100016</int> - <reference key="object" ref="720384657"/> - <reference key="parent" ref="505388869"/> + <int key="objectID">300222</int> + <reference key="object" ref="917941739"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="519561276"/> + </object> + <reference key="parent" ref="631507655"/> </object> <object class="IBObjectRecord"> - <int key="objectID">100009</int> - <reference key="object" ref="80966883"/> - <reference key="parent" ref="147207906"/> + <int key="objectID">300223</int> + <reference key="object" ref="519561276"/> + <reference key="parent" ref="917941739"/> </object> <object class="IBObjectRecord"> - <int key="objectID">200009</int> - <reference key="object" ref="564144656"/> - <reference key="parent" ref="147207906"/> + <int key="objectID">300224</int> + <reference key="object" ref="475156882"/> + <reference key="parent" ref="1025403577"/> </object> <object class="IBObjectRecord"> - <int key="objectID">300009</int> - <reference key="object" ref="401017936"/> - <reference key="parent" ref="147207906"/> + <int key="objectID">300225</int> + <reference key="object" ref="850969979"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="968276158"/> + </object> + <reference key="parent" ref="631507655"/> </object> <object class="IBObjectRecord"> - <int key="objectID">-3</int> - <reference key="object" ref="714830734"/> + <int key="objectID">300226</int> + <reference key="object" ref="968276158"/> + <reference key="parent" ref="850969979"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300244</int> + <reference key="object" ref="355705187"/> <reference key="parent" ref="0"/> - <string key="objectName">Application</string> + <string key="objectName">Favorite Formatter</string> </object> <object class="IBObjectRecord"> - <int key="objectID">300018</int> - <reference key="object" ref="325541546"/> - <reference key="parent" ref="697375404"/> + <int key="objectID">300294</int> + <reference key="object" ref="370461416"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="1019868804"/> + </object> + <reference key="parent" ref="0"/> + <string key="objectName">Ticket Options Sheet</string> </object> <object class="IBObjectRecord"> - <int key="objectID">300019</int> - <reference key="object" ref="618557697"/> + <int key="objectID">300295</int> + <reference key="object" ref="1019868804"/> <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="609534695"/> + <reference ref="623163777"/> + <reference ref="404880622"/> + <reference ref="485004197"/> + <reference ref="932240937"/> + <reference ref="871834199"/> + <reference ref="282101470"/> + <reference ref="669516699"/> + <reference ref="958176038"/> + <reference ref="546844125"/> </object> - <reference key="parent" ref="1004662124"/> + <reference key="parent" ref="370461416"/> </object> <object class="IBObjectRecord"> - <int key="objectID">300118</int> - <reference key="object" ref="675887072"/> + <int key="objectID">300296</int> + <reference key="object" ref="282101470"/> <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="542766611"/> + <reference ref="373804676"/> + <reference ref="606962746"/> + <reference ref="415869872"/> + <reference ref="910622795"/> + <reference ref="552234083"/> + <reference ref="576071402"/> + <reference ref="240805237"/> + <reference ref="956800130"/> + <reference ref="54325332"/> </object> - <reference key="parent" ref="928852707"/> + <reference key="parent" ref="1019868804"/> </object> <object class="IBObjectRecord"> - <int key="objectID">300119</int> - <reference key="object" ref="542766611"/> - <reference key="parent" ref="675887072"/> + <int key="objectID">300298</int> + <reference key="object" ref="609534695"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="424319976"/> + </object> + <reference key="parent" ref="1019868804"/> </object> <object class="IBObjectRecord"> - <int key="objectID">300152</int> - <reference key="object" ref="774532696"/> + <int key="objectID">300299</int> + <reference key="object" ref="623163777"/> <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="958553500"/> + <reference ref="327568348"/> </object> - <reference key="parent" ref="928852707"/> + <reference key="parent" ref="1019868804"/> </object> <object class="IBObjectRecord"> - <int key="objectID">300153</int> - <reference key="object" ref="958553500"/> - <reference key="parent" ref="774532696"/> + <int key="objectID">300300</int> + <reference key="object" ref="404880622"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="775341038"/> + </object> + <reference key="parent" ref="1019868804"/> </object> <object class="IBObjectRecord"> - <int key="objectID">300154</int> - <reference key="object" ref="818868322"/> + <int key="objectID">300301</int> + <reference key="object" ref="485004197"/> <object class="NSMutableArray" key="children"> <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="872529405"/> + <reference ref="1047482753"/> </object> - <reference key="parent" ref="928852707"/> + <reference key="parent" ref="1019868804"/> </object> <object class="IBObjectRecord"> - <int key="objectID">300155</int> - <reference key="object" ref="872529405"/> - <reference key="parent" ref="818868322"/> + <int key="objectID">300302</int> + <reference key="object" ref="1047482753"/> + <reference key="parent" ref="485004197"/> </object> <object class="IBObjectRecord"> - <int key="objectID">300156</int> - <reference key="object" ref="700535463"/> - <reference key="parent" ref="928852707"/> + <int key="objectID">300303</int> + <reference key="object" ref="775341038"/> + <reference key="parent" ref="404880622"/> </object> <object class="IBObjectRecord"> - <int key="objectID">300183</int> - <reference key="object" ref="333357907"/> + <int key="objectID">300304</int> + <reference key="object" ref="327568348"/> + <reference key="parent" ref="623163777"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300305</int> + <reference key="object" ref="424319976"/> + <reference key="parent" ref="609534695"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300307</int> + <reference key="object" ref="373804676"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="84127609"/> + </object> + <reference key="parent" ref="282101470"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300308</int> + <reference key="object" ref="956800130"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="596249502"/> + </object> + <reference key="parent" ref="282101470"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300309</int> + <reference key="object" ref="606962746"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="583273626"/> + </object> + <reference key="parent" ref="282101470"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300310</int> + <reference key="object" ref="415869872"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="77611886"/> + </object> + <reference key="parent" ref="282101470"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300311</int> + <reference key="object" ref="910622795"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="878349972"/> + </object> + <reference key="parent" ref="282101470"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300312</int> + <reference key="object" ref="54325332"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="584202005"/> + </object> + <reference key="parent" ref="282101470"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300313</int> + <reference key="object" ref="552234083"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="629844970"/> + </object> + <reference key="parent" ref="282101470"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300314</int> + <reference key="object" ref="576071402"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="380679549"/> + </object> + <reference key="parent" ref="282101470"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300315</int> + <reference key="object" ref="240805237"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="638526338"/> + </object> + <reference key="parent" ref="282101470"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300316</int> + <reference key="object" ref="638526338"/> + <reference key="parent" ref="240805237"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300317</int> + <reference key="object" ref="380679549"/> + <reference key="parent" ref="576071402"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300318</int> + <reference key="object" ref="629844970"/> + <reference key="parent" ref="552234083"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300319</int> + <reference key="object" ref="584202005"/> + <reference key="parent" ref="54325332"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300320</int> + <reference key="object" ref="878349972"/> + <reference key="parent" ref="910622795"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300321</int> + <reference key="object" ref="77611886"/> + <reference key="parent" ref="415869872"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300322</int> + <reference key="object" ref="583273626"/> + <reference key="parent" ref="606962746"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300323</int> + <reference key="object" ref="596249502"/> + <reference key="parent" ref="956800130"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300324</int> + <reference key="object" ref="84127609"/> + <reference key="parent" ref="373804676"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300329</int> + <reference key="object" ref="932240937"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="870649207"/> + </object> + <reference key="parent" ref="1019868804"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300330</int> + <reference key="object" ref="870649207"/> + <reference key="parent" ref="932240937"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300331</int> + <reference key="object" ref="196152721"/> <reference key="parent" ref="0"/> - <string key="objectName">Identity Array Controller</string> + <string key="objectName">Identity Options Controller</string> </object> <object class="IBObjectRecord"> - <int key="objectID">300196</int> - <reference key="object" ref="307777557"/> + <int key="objectID">300334</int> + <reference key="object" ref="871834199"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="754483226"/> + </object> + <reference key="parent" ref="1019868804"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300335</int> + <reference key="object" ref="754483226"/> + <reference key="parent" ref="871834199"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300358</int> + <reference key="object" ref="669516699"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="362266618"/> + </object> + <reference key="parent" ref="1019868804"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300359</int> + <reference key="object" ref="362266618"/> + <reference key="parent" ref="669516699"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300370</int> + <reference key="object" ref="1031761104"/> <reference key="parent" ref="0"/> + <string key="objectName">Identities Controller</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300402</int> + <reference key="object" ref="958176038"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="196100637"/> + </object> + <reference key="parent" ref="1019868804"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300403</int> + <reference key="object" ref="196100637"/> + <reference key="parent" ref="958176038"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300407</int> + <reference key="object" ref="546844125"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="725579124"/> + </object> + <reference key="parent" ref="1019868804"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300408</int> + <reference key="object" ref="725579124"/> + <reference key="parent" ref="546844125"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300426</int> + <reference key="object" ref="263312988"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="659813048"/> + </object> + <reference key="parent" ref="928852707"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300427</int> + <reference key="object" ref="659813048"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="600123164"/> + </object> + <reference key="parent" ref="263312988"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300428</int> + <reference key="object" ref="600123164"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="354283131"/> + <reference ref="136217401"/> + <reference ref="553755370"/> + <reference ref="778570067"/> + </object> + <reference key="parent" ref="659813048"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300429</int> + <reference key="object" ref="354283131"/> + <reference key="parent" ref="600123164"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300430</int> + <reference key="object" ref="136217401"/> + <reference key="parent" ref="600123164"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300431</int> + <reference key="object" ref="553755370"/> + <reference key="parent" ref="600123164"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300432</int> + <reference key="object" ref="778570067"/> + <reference key="parent" ref="600123164"/> </object> </object> </object> @@ -894,30 +2249,86 @@ <bool key="EncodedWithXMLCoder">YES</bool> <string>-1.IBPluginDependency</string> <string>-2.IBPluginDependency</string> - <string>10.IBPluginDependency</string> - <string>10.ImportedFromIB2</string> - <string>100009.IBShouldRemoveOnLegacySave</string> - <string>11.IBPluginDependency</string> - <string>11.ImportedFromIB2</string> <string>15.IBPluginDependency</string> <string>15.ImportedFromIB2</string> <string>16.IBPluginDependency</string> <string>16.ImportedFromIB2</string> - <string>18.IBPluginDependency</string> - <string>18.ImportedFromIB2</string> - <string>200009.IBShouldRemoveOnLegacySave</string> - <string>300009.IBShouldRemoveOnLegacySave</string> - <string>300018.IBPluginDependency</string> - <string>300019.IBPluginDependency</string> <string>300118.IBPluginDependency</string> <string>300118.ImportedFromIB2</string> - <string>300152.IBPluginDependency</string> - <string>300153.IBPluginDependency</string> - <string>300154.IBPluginDependency</string> - <string>300155.IBPluginDependency</string> <string>300156.IBPluginDependency</string> <string>300183.IBPluginDependency</string> <string>300196.IBPluginDependency</string> + <string>300206.IBPluginDependency</string> + <string>300207.IBPluginDependency</string> + <string>300216.IBPluginDependency</string> + <string>300217.IBPluginDependency</string> + <string>300218.IBPluginDependency</string> + <string>300219.IBPluginDependency</string> + <string>300220.IBPluginDependency</string> + <string>300220.IBViewIntegration.shadowBlurRadius</string> + <string>300220.IBViewIntegration.shadowColor</string> + <string>300220.IBViewIntegration.shadowOffsetHeight</string> + <string>300220.IBViewIntegration.shadowOffsetWidth</string> + <string>300221.IBPluginDependency</string> + <string>300222.IBPluginDependency</string> + <string>300223.IBPluginDependency</string> + <string>300224.IBPluginDependency</string> + <string>300244.IBPluginDependency</string> + <string>300294.IBEditorWindowLastContentRect</string> + <string>300294.IBPluginDependency</string> + <string>300294.IBWindowTemplateEditedContentRect</string> + <string>300294.NSWindowTemplate.visibleAtLaunch</string> + <string>300294.windowTemplate.hasMaxSize</string> + <string>300294.windowTemplate.maxSize</string> + <string>300295.IBPluginDependency</string> + <string>300296.IBPluginDependency</string> + <string>300296.ImportedFromIB2</string> + <string>300298.IBPluginDependency</string> + <string>300299.IBPluginDependency</string> + <string>300300.IBPluginDependency</string> + <string>300301.IBPluginDependency</string> + <string>300302.IBPluginDependency</string> + <string>300303.IBPluginDependency</string> + <string>300304.IBPluginDependency</string> + <string>300305.IBPluginDependency</string> + <string>300307.IBPluginDependency</string> + <string>300307.ImportedFromIB2</string> + <string>300308.IBPluginDependency</string> + <string>300308.ImportedFromIB2</string> + <string>300309.IBPluginDependency</string> + <string>300309.ImportedFromIB2</string> + <string>300310.IBPluginDependency</string> + <string>300310.ImportedFromIB2</string> + <string>300311.IBPluginDependency</string> + <string>300311.ImportedFromIB2</string> + <string>300312.IBPluginDependency</string> + <string>300312.ImportedFromIB2</string> + <string>300313.IBPluginDependency</string> + <string>300313.ImportedFromIB2</string> + <string>300314.IBPluginDependency</string> + <string>300314.ImportedFromIB2</string> + <string>300315.IBPluginDependency</string> + <string>300315.ImportedFromIB2</string> + <string>300329.IBPluginDependency</string> + <string>300330.IBPluginDependency</string> + <string>300331.IBPluginDependency</string> + <string>300334.IBPluginDependency</string> + <string>300335.IBPluginDependency</string> + <string>300358.IBPluginDependency</string> + <string>300359.IBPluginDependency</string> + <string>300370.IBPluginDependency</string> + <string>300402.IBPluginDependency</string> + <string>300403.IBPluginDependency</string> + <string>300407.IBPluginDependency</string> + <string>300408.IBPluginDependency</string> + <string>300426.IBPluginDependency</string> + <string>300427.IBPluginDependency</string> + <string>300428.IBEditorWindowLastContentRect</string> + <string>300428.IBPluginDependency</string> + <string>300429.IBPluginDependency</string> + <string>300430.IBPluginDependency</string> + <string>300431.IBPluginDependency</string> + <string>300432.IBPluginDependency</string> <string>5.IBEditorWindowLastContentRect</string> <string>5.IBPluginDependency</string> <string>5.IBWindowTemplateEditedContentRect</string> @@ -932,53 +2343,105 @@ <string>6.ImportedFromIB2</string> <string>8.IBPluginDependency</string> <string>8.ImportedFromIB2</string> - <string>9.IBPluginDependency</string> - <string>9.ImportedFromIB2</string> </object> <object class="NSMutableArray" key="dict.values"> <bool key="EncodedWithXMLCoder">YES</bool> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <integer value="1" id="5"/> - <reference ref="5"/> + <reference ref="9"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> - <reference ref="5"/> - <reference ref="5"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <real value="0.000000e+00" id="75542549"/> + <reference ref="18538584"/> + <reference ref="75542549"/> + <reference ref="75542549"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{606, 541}, {491, 315}}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{606, 541}, {491, 315}}</string> - <reference ref="5"/> - <reference ref="5"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{360, 291}, {427, 378}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{360, 291}, {427, 378}}</string> + <integer value="0"/> + <reference ref="75542549"/> + <string>{10000, 354}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <reference ref="9"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{535, 102}, {198, 83}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{499, 142}, {491, 316}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{499, 142}, {491, 316}}</string> + <reference ref="9"/> + <reference ref="9"/> <string>{{503, 256}, {419, 465}}</string> - <reference ref="5"/> - <reference ref="5"/> + <reference ref="9"/> + <reference ref="9"/> <string>{600, 600}</string> <string>{419, 298}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> + <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="5"/> + <reference ref="9"/> </object> </object> <object class="NSMutableDictionary" key="unlocalizedProperties"> @@ -1001,7 +2464,7 @@ </object> </object> <nil key="sourceID"/> - <int key="maxID">300201</int> + <int key="maxID">300455</int> </object> <object class="IBClassDescriber" key="IBDocument.Classes"> <object class="NSMutableArray" key="referencedPartialClassDescriptions"> @@ -1023,23 +2486,33 @@ </object> </object> <object class="IBPartialClassDescription"> - <string key="className">KerberosTimeFormatter</string> + <string key="className">KerberosFavoriteFormatter</string> <string key="superclassName">NSFormatter</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="136421570"> <string key="majorKey">IBProjectSource</string> <string key="minorKey">../Sources/kim/agent/mac/KerberosFormatters.h</string> </object> </object> <object class="IBPartialClassDescription"> + <string key="className">KerberosTimeFormatter</string> + <string key="superclassName">NSFormatter</string> + <reference key="sourceIdentifier" ref="136421570"/> + </object> + <object class="IBPartialClassDescription"> <string key="className">SelectIdentityController</string> <string key="superclassName">NSWindowController</string> <object class="NSMutableDictionary" key="actions"> <bool key="EncodedWithXMLCoder">YES</bool> <object class="NSMutableArray" key="dict.sortedKeys"> <bool key="EncodedWithXMLCoder">YES</bool> - <string>add:</string> + <string>addToFavorites:</string> <string>cancel:</string> - <string>remove:</string> + <string>cancelOptions:</string> + <string>doneOptions:</string> + <string>editOptions:</string> + <string>newIdentity:</string> + <string>removeFromFavorites:</string> + <string>resetOptions:</string> <string>select:</string> </object> <object class="NSMutableArray" key="dict.values"> @@ -1048,37 +2521,50 @@ <string>id</string> <string>id</string> <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> + <string>id</string> </object> </object> <object class="NSMutableDictionary" key="outlets"> <bool key="EncodedWithXMLCoder">YES</bool> <object class="NSMutableArray" key="dict.sortedKeys"> <bool key="EncodedWithXMLCoder">YES</bool> + <string>actionPopupButton</string> <string>addIdentityButton</string> <string>cancelButton</string> <string>explanationTextField</string> <string>headerTextField</string> + <string>identitiesController</string> <string>identityArrayController</string> + <string>identityOptionsController</string> + <string>identityOptionsWindow</string> <string>identityTableColumn</string> <string>identityTableView</string> <string>kerberosIconImageView</string> - <string>removeIdentityButton</string> + <string>nameField</string> + <string>realmField</string> <string>selectIdentityButton</string> - <string>timeRemainingTableColumn</string> </object> <object class="NSMutableArray" key="dict.values"> <bool key="EncodedWithXMLCoder">YES</bool> + <string>NSPopUpButton</string> <string>NSButton</string> <string>NSButton</string> <string>NSTextField</string> <string>NSTextField</string> + <string>NSObjectController</string> <string>NSArrayController</string> + <string>NSObjectController</string> + <string>NSWindow</string> <string>NSTableColumn</string> <string>NSTableView</string> <string>BadgedImageView</string> + <string>NSTextField</string> + <string>NSTextField</string> <string>NSButton</string> - <string>NSButton</string> - <string>NSTableColumn</string> </object> </object> <object class="IBClassDescriptionSource" key="sourceIdentifier"> diff --git a/src/kim/agent/mac/resources/KerberosFormatters.strings b/src/kim/agent/mac/resources/KerberosFormatters.strings Binary files differnew file mode 100644 index 000000000..707ba5340 --- /dev/null +++ b/src/kim/agent/mac/resources/KerberosFormatters.strings |