diff options
author | Justin Anderson <jander@mit.edu> | 2008-09-23 22:20:04 +0000 |
---|---|---|
committer | Justin Anderson <jander@mit.edu> | 2008-09-23 22:20:04 +0000 |
commit | ca50f2b4f47afccb424c470344c78da0c04d00b7 (patch) | |
tree | 8ec8c7a7cc27ca24b40bbc83aaa39a72dc80ac41 /src | |
parent | ef05efb0c1cfb734437b55ec5f8390c2fb19a5ed (diff) | |
download | krb5-ca50f2b4f47afccb424c470344c78da0c04d00b7.tar.gz krb5-ca50f2b4f47afccb424c470344c78da0c04d00b7.tar.xz krb5-ca50f2b4f47afccb424c470344c78da0c04d00b7.zip |
KIM Identity selection dialog work. Updated to match changes to KIM API
ticket: 6055
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@20748 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src')
-rw-r--r-- | src/kim/agent/mac/Identities.h | 6 | ||||
-rw-r--r-- | src/kim/agent/mac/Identities.m | 99 | ||||
-rw-r--r-- | src/kim/agent/mac/KerberosAgentController.m | 4 | ||||
-rw-r--r-- | src/kim/agent/mac/KerberosFormatters.h | 40 | ||||
-rw-r--r-- | src/kim/agent/mac/KerberosFormatters.m | 110 | ||||
-rw-r--r-- | src/kim/agent/mac/SelectIdentityController.h | 9 | ||||
-rw-r--r-- | src/kim/agent/mac/SelectIdentityController.m | 36 | ||||
-rw-r--r-- | src/kim/agent/mac/resources/English.lproj/SelectIdentity.xib | 220 |
8 files changed, 484 insertions, 40 deletions
diff --git a/src/kim/agent/mac/Identities.h b/src/kim/agent/mac/Identities.h index 556d0b075..82819f8ee 100644 --- a/src/kim/agent/mac/Identities.h +++ b/src/kim/agent/mac/Identities.h @@ -22,6 +22,8 @@ * or implied warranty. */ +#import <Cocoa/Cocoa.h> + @interface Identity : NSObject { kim_identity kimIdentity; int state; @@ -29,6 +31,8 @@ int favorite; } +@property(readonly) NSString *principal; +@property(readonly) NSString *timeRemaining; @property int state; @property cc_time_t expirationTime; @property(readonly) int favorite; @@ -47,7 +51,7 @@ NSConnection *threadConnection; } -@property(readonly) NSArray *identities; +@property(readonly, copy) NSArray *identities; - (int) update; diff --git a/src/kim/agent/mac/Identities.m b/src/kim/agent/mac/Identities.m index f950bc13e..211d980ee 100644 --- a/src/kim/agent/mac/Identities.m +++ b/src/kim/agent/mac/Identities.m @@ -23,6 +23,7 @@ */ #import "Identities.h" +#import <Kerberos/kim.h> @implementation Identity @@ -67,6 +68,80 @@ return (!err && kim_comparison_is_equal_to (comparison)); } +// --------------------------------------------------------------------------- + +- (NSString *)principal +{ + kim_error err = KIM_NO_ERROR; + kim_string display_string = NULL; + NSString *result = nil; + + err = kim_identity_get_display_string(kimIdentity, &display_string); + + if (!err) { + result = [NSString stringWithCString:display_string encoding:NSUTF8StringEncoding]; + } + else { + result = @"-"; + } + return result; +} + +// --------------------------------------------------------------------------- + +- (NSDate *)expirationDate +{ + return [NSDate dateWithTimeIntervalSince1970:expirationTime]; +} + +// --------------------------------------------------------------------------- + +- (NSString *)timeRemaining +{ + NSString *result = nil; + + if (expirationTime > 0) { + time_t now = time(NULL); + time_t lifetime = expirationTime - now; + 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"; + } + + + NSLog(@"timeRemaining = %@ (expirationTime == %ld)", result, expirationTime); + return result; +} + +- (NSString *)description +{ + NSString *result = nil; + kim_error err = KIM_NO_ERROR; + kim_string display_name = NULL; + + err = kim_identity_get_display_string(kimIdentity, &display_name); + + if (!err) { + result = [NSString stringWithCString:display_name encoding:NSUTF8StringEncoding]; + } + return result; +} + +@end + +@interface Identities () + +@property(readwrite, copy) NSArray *identities; + @end @implementation Identities @@ -131,14 +206,15 @@ } if (!err) { - kim_favorite_identities kimFavoriteIdentities = NULL; + kim_preferences kimPreferences = NULL; + kim_options kimOptions = NULL; kim_count i; kim_count count = 0; - err = kim_favorite_identities_create (&kimFavoriteIdentities); + err = kim_preferences_create(&kimPreferences); if (!err) { - err = kim_favorite_identities_get_number_of_identities (kimFavoriteIdentities, + err = kim_preferences_get_number_of_favorite_identities(kimPreferences, &count); } @@ -146,8 +222,10 @@ kim_identity kimIdentity = NULL; Identity *identity = NULL; - err = kim_favorite_identities_get_identity_at_index (kimFavoriteIdentities, - i, &kimIdentity); + err = kim_preferences_get_favorite_identity_at_index(kimPreferences, + i, + &kimIdentity, + &kimOptions); if (!err) { identity = [[[Identity alloc] initWithFavoriteIdentity: kimIdentity] autorelease]; @@ -162,7 +240,7 @@ kim_identity_free (&kimIdentity); } - kim_favorite_identities_free (&kimFavoriteIdentities); + kim_preferences_free(&kimPreferences); } if (!err) { @@ -270,8 +348,8 @@ } if (!err) { - [identity setState: state]; - [identity setExpirationTime: expirationTime]; + identity.state = state; + identity.expirationTime = expirationTime; } } @@ -285,9 +363,8 @@ } if (!err) { - if (identities) { [identities release]; } - - identities = [[NSArray alloc] initWithArray: newIdentities]; + /* Use @property setter to trigger KVO notifications */ + self.identities = newIdentities; if (!identities) { err = ENOMEM; } } diff --git a/src/kim/agent/mac/KerberosAgentController.m b/src/kim/agent/mac/KerberosAgentController.m index 9313a8c14..20b74015a 100644 --- a/src/kim/agent/mac/KerberosAgentController.m +++ b/src/kim/agent/mac/KerberosAgentController.m @@ -34,7 +34,9 @@ { SelectIdentityController *controller = [[SelectIdentityController alloc] init]; int result = [controller runWindow]; - + if (result != 0) { + NSLog(@"SelectIdentityController -runWindow result was %d", result); + } } diff --git a/src/kim/agent/mac/KerberosFormatters.h b/src/kim/agent/mac/KerberosFormatters.h new file mode 100644 index 000000000..2d5336fce --- /dev/null +++ b/src/kim/agent/mac/KerberosFormatters.h @@ -0,0 +1,40 @@ +/* + * Copyright 2008 Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and + * distribute this software and its documentation for any purpose and + * without fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright notice and + * this permission notice appear in supporting documentation, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + */ + +#import <Cocoa/Cocoa.h> + + +@interface KerberosTimeFormatter : NSFormatter { + +} + +- (NSString *)stringForObjectValue:(id)anObject; + +- (BOOL)getObjectValue:(id *)anObject + forString:(NSString *)string + errorDescription:(NSString **)error; + +- (NSAttributedString *)attributedStringForObjectValue:(id)anObject + withDefaultAttributes:(NSDictionary *)attributes; +@end diff --git a/src/kim/agent/mac/KerberosFormatters.m b/src/kim/agent/mac/KerberosFormatters.m new file mode 100644 index 000000000..e1675bb70 --- /dev/null +++ b/src/kim/agent/mac/KerberosFormatters.m @@ -0,0 +1,110 @@ +/* + * Copyright 2008 Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and + * distribute this software and its documentation for any purpose and + * without fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright notice and + * this permission notice appear in supporting documentation, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + */ + +#import "KerberosFormatters.h" + +#define EXPIRED_STRING @"Expired" + +@implementation KerberosTimeFormatter + +/* + * For display of Kerberos expiration times. + * Converts an NSDate into an NSString like "09:53" for 9 hours and 53 minutes + * in the future. Returns @"Expired" if expiration date is before now. + */ +- (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])]; + } + 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; + } + } + + 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. + */ + +- (BOOL)getObjectValue:(id *)anObject + forString:(NSString *)string + errorDescription:(NSString **)error +{ + NSArray *tokens = [string componentsSeparatedByString:@":"]; + *anObject = nil; + + 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 (*anObject == nil) { + return false; + } + return true; +} + +- (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]; +} +@end diff --git a/src/kim/agent/mac/SelectIdentityController.h b/src/kim/agent/mac/SelectIdentityController.h index 7fd4025e8..741f897f6 100644 --- a/src/kim/agent/mac/SelectIdentityController.h +++ b/src/kim/agent/mac/SelectIdentityController.h @@ -24,10 +24,12 @@ #import <Cocoa/Cocoa.h> #import "BadgedImageView.h" - +#import "Identities.h" @interface SelectIdentityController : NSWindowController { + IBOutlet NSArrayController *identityArrayController; + IBOutlet BadgedImageView *kerberosIconImageView; IBOutlet NSTextField *headerTextField; IBOutlet NSTextField *explanationTextField; @@ -39,6 +41,9 @@ IBOutlet NSButton *removeIdentityButton; IBOutlet NSButton *selectIdentityButton; IBOutlet NSButton *cancelButton; + + Identities *identities; + NSTimer *refreshTimer; } - (IBAction) add: (id) sender; @@ -49,4 +54,6 @@ - (int) runWindow; +- (void) timedRefresh:(NSTimer *)timer; + @end diff --git a/src/kim/agent/mac/SelectIdentityController.m b/src/kim/agent/mac/SelectIdentityController.m index ac3dc0726..e7453a906 100644 --- a/src/kim/agent/mac/SelectIdentityController.m +++ b/src/kim/agent/mac/SelectIdentityController.m @@ -33,7 +33,12 @@ { if ((self = [super initWithWindowNibName: windowNibName])) { NSLog (@"SelectIdentityController initializing"); - + identities = [[Identities alloc] init]; + [identities addObserver:self + forKeyPath:@"identities" + options:NSKeyValueObservingOptionNew + context:@"SelectIdentityController"]; + refreshTimer = [NSTimer scheduledTimerWithTimeInterval:60.0 target:self selector:@selector(timedRefresh:) userInfo:nil repeats:true]; } return self; @@ -50,6 +55,9 @@ - (void) dealloc { + [refreshTimer release]; + [identities removeObserver:self forKeyPath:@"identities"]; + [identities release]; [super dealloc]; } @@ -64,31 +72,37 @@ - (void) windowDidLoad { - [explanationTextField setStringValue: @"Some explanation text"]; + + [explanationTextField setStringValue: @"Some explanation text"]; + } // --------------------------------------------------------------------------- - (IBAction) add: (id) sender { + NSLog(@"Add identity"); } // --------------------------------------------------------------------------- - (IBAction) remove: (id) sender { + NSLog(@"Remove identity"); } // --------------------------------------------------------------------------- - (IBAction) select: (id) sender { + NSLog(@"Select identity: %@", identityArrayController.selectedObjects.description); } // --------------------------------------------------------------------------- - (IBAction) cancel: (id) sender { + NSLog(@"Cancel identity selection"); } // --------------------------------------------------------------------------- @@ -108,5 +122,23 @@ return 0; } +// --------------------------------------------------------------------------- + +- (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]; + } + else { + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; + } +} + +- (void) timedRefresh:(NSTimer *)timer +{ + [identityArrayController rearrangeObjects]; +} + @end diff --git a/src/kim/agent/mac/resources/English.lproj/SelectIdentity.xib b/src/kim/agent/mac/resources/English.lproj/SelectIdentity.xib index 938c63362..8e912b203 100644 --- a/src/kim/agent/mac/resources/English.lproj/SelectIdentity.xib +++ b/src/kim/agent/mac/resources/English.lproj/SelectIdentity.xib @@ -2,9 +2,9 @@ <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.02"> <data> <int key="IBDocument.SystemTarget">1050</int> - <string key="IBDocument.SystemVersion">9E17</string> - <string key="IBDocument.InterfaceBuilderVersion">670</string> - <string key="IBDocument.AppKitVersion">949.33</string> + <string key="IBDocument.SystemVersion">9F33</string> + <string key="IBDocument.InterfaceBuilderVersion">672</string> + <string key="IBDocument.AppKitVersion">949.34</string> <string key="IBDocument.HIToolboxVersion">352.00</string> <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> <bool key="EncodedWithXMLCoder">YES</bool> @@ -132,6 +132,7 @@ <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> <double key="NSMaxWidth">1.000000e+03</double> @@ -166,6 +167,7 @@ <reference key="NSTableView" ref="988096643"/> </object> <object class="NSTableColumn" id="1004662124"> + <string key="NSIdentifier">timeRemaining</string> <double key="NSWidth">1.003135e+02</double> <double key="NSMinWidth">1.000000e+02</double> <double key="NSMaxWidth">1.500000e+02</double> @@ -187,7 +189,7 @@ </object> <object class="NSTextFieldCell" key="NSDataCell" id="618557697"> <int key="NSCellFlags">1140981312</int> - <int key="NSCellFlags2">71435264</int> + <int key="NSCellFlags2">-2076048384</int> <string key="NSContents">Text Cell</string> <reference key="NSSupport" ref="26"/> <reference key="NSControlView" ref="988096643"/> @@ -323,7 +325,7 @@ <object class="NSButton" id="818868322"> <reference key="NSNextResponder" ref="928852707"/> <int key="NSvFlags">292</int> - <string key="NSFrame">{{42, 30}, {22, 22}}</string> + <string key="NSFrame">{{43, 30}, {22, 22}}</string> <reference key="NSSuperview" ref="928852707"/> <bool key="NSEnabled">YES</bool> <object class="NSButtonCell" key="NSCell" id="872529405"> @@ -391,6 +393,26 @@ <string key="NSMinSize">{419, 320}</string> <string key="NSMaxSize">{600, 622}</string> </object> + <object class="NSArrayController" id="333357907"> + <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> + </object> + <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> </object> <object class="IBObjectContainer" key="IBDocument.Objects"> <object class="NSMutableArray" key="connectionRecords"> @@ -484,22 +506,6 @@ <int key="connectionID">300169</int> </object> <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">remove:</string> - <reference key="source" ref="262677138"/> - <reference key="destination" ref="818868322"/> - </object> - <int key="connectionID">300170</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">add:</string> - <reference key="source" ref="262677138"/> - <reference key="destination" ref="774532696"/> - </object> - <int key="connectionID">300171</int> - </object> - <object class="IBConnectionRecord"> <object class="IBOutletConnection" key="connection"> <string key="label">identityTableView</string> <reference key="source" ref="262677138"/> @@ -523,6 +529,139 @@ </object> <int key="connectionID">300181</int> </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">identityArrayController</string> + <reference key="source" ref="262677138"/> + <reference key="destination" ref="333357907"/> + </object> + <int key="connectionID">300184</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">content: arrangedObjects</string> + <reference key="source" ref="988096643"/> + <reference key="destination" ref="333357907"/> + <object class="NSNibBindingConnector" key="connector" id="355877009"> + <reference key="NSSource" ref="988096643"/> + <reference key="NSDestination" ref="333357907"/> + <string key="NSLabel">content: arrangedObjects</string> + <string key="NSBinding">content</string> + <string key="NSKeyPath">arrangedObjects</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300185</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: arrangedObjects.principal</string> + <reference key="source" ref="697375404"/> + <reference key="destination" ref="333357907"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="697375404"/> + <reference key="NSDestination" ref="333357907"/> + <string key="NSLabel">value: arrangedObjects.principal</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">arrangedObjects.principal</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300187</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> + <int key="connectionID">300189</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> + <int key="connectionID">300191</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> + <int key="connectionID">300197</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: arrangedObjects.expirationDate</string> + <reference key="source" ref="1004662124"/> + <reference key="destination" ref="333357907"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="1004662124"/> + <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"/> + </object> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300198</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">selectionIndexes: selectionIndexes</string> + <reference key="source" ref="988096643"/> + <reference key="destination" ref="333357907"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="988096643"/> + <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">300199</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">enabled: canRemove</string> + <reference key="source" ref="818868322"/> + <reference key="destination" ref="333357907"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="818868322"/> + <reference key="NSDestination" ref="333357907"/> + <string key="NSLabel">enabled: canRemove</string> + <string key="NSBinding">enabled</string> + <string key="NSKeyPath">canRemove</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300200</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">enabled: canInsert</string> + <reference key="source" ref="774532696"/> + <reference key="destination" ref="333357907"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="774532696"/> + <reference key="NSDestination" ref="333357907"/> + <string key="NSLabel">enabled: canInsert</string> + <string key="NSBinding">enabled</string> + <string key="NSKeyPath">canInsert</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">300201</int> + </object> </object> <object class="IBMutableOrderedSet" key="objectRecords"> <object class="NSArray" key="orderedObjects"> @@ -736,6 +875,17 @@ <reference key="object" ref="700535463"/> <reference key="parent" ref="928852707"/> </object> + <object class="IBObjectRecord"> + <int key="objectID">300183</int> + <reference key="object" ref="333357907"/> + <reference key="parent" ref="0"/> + <string key="objectName">Identity Array Controller</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">300196</int> + <reference key="object" ref="307777557"/> + <reference key="parent" ref="0"/> + </object> </object> </object> <object class="NSMutableDictionary" key="flattenedProperties"> @@ -766,6 +916,8 @@ <string>300154.IBPluginDependency</string> <string>300155.IBPluginDependency</string> <string>300156.IBPluginDependency</string> + <string>300183.IBPluginDependency</string> + <string>300196.IBPluginDependency</string> <string>5.IBEditorWindowLastContentRect</string> <string>5.IBPluginDependency</string> <string>5.IBWindowTemplateEditedContentRect</string> @@ -809,9 +961,11 @@ <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{606, 810}, {491, 315}}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{606, 810}, {491, 315}}</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>{{503, 256}, {419, 465}}</string> @@ -847,7 +1001,7 @@ </object> </object> <nil key="sourceID"/> - <int key="maxID">300182</int> + <int key="maxID">300201</int> </object> <object class="IBClassDescriber" key="IBDocument.Classes"> <object class="NSMutableArray" key="referencedPartialClassDescriptions"> @@ -869,6 +1023,14 @@ </object> </object> <object class="IBPartialClassDescription"> + <string key="className">KerberosTimeFormatter</string> + <string key="superclassName">NSFormatter</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBProjectSource</string> + <string key="minorKey">../Sources/kim/agent/mac/KerberosFormatters.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> <string key="className">SelectIdentityController</string> <string key="superclassName">NSWindowController</string> <object class="NSMutableDictionary" key="actions"> @@ -896,6 +1058,7 @@ <string>cancelButton</string> <string>explanationTextField</string> <string>headerTextField</string> + <string>identityArrayController</string> <string>identityTableColumn</string> <string>identityTableView</string> <string>kerberosIconImageView</string> @@ -909,6 +1072,7 @@ <string>NSButton</string> <string>NSTextField</string> <string>NSTextField</string> + <string>NSArrayController</string> <string>NSTableColumn</string> <string>NSTableView</string> <string>BadgedImageView</string> @@ -922,6 +1086,14 @@ <string key="minorKey">../Sources/kim/agent/mac/SelectIdentityController.h</string> </object> </object> + <object class="IBPartialClassDescription"> + <string key="className">SelectIdentityController</string> + <string key="superclassName">NSWindowController</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBUserSource</string> + <string key="minorKey"/> + </object> + </object> </object> </object> <int key="IBDocument.localizationMode">0</int> |