root/tags/2D16/JVBuddyInspector.m

Revision 2603, 4.9 kB (checked in by eridius, 3 years ago)

Do a little judicious renaming.
And here is a test of a potential Trac bug: whee!
if there is a [[BR]] then the bug is there.
Test two: whee!
Note that there was a space on that one

Line 
1 #import <ChatCore/MVChatConnection.h>
2 #import <ChatCore/NSStringAdditions.h>
3 #import <AddressBook/AddressBook.h>
4
5 #import "MVConnectionsController.h"
6 #import "JVBuddyInspector.h"
7
8 @implementation JVBuddy (JVBuddyInspection)
9 - (id <JVInspector>) inspector {
10         return [[[JVBuddyInspector alloc] initWithBuddy:self] autorelease];
11 }
12 @end
13
14 #pragma mark -
15
16 @implementation JVBuddyInspector
17 - (id) initWithBuddy:(JVBuddy *) buddy {
18         if( ( self = [self init] ) ) {
19                 _buddy = [buddy retain];
20         }
21         return self;
22 }
23
24 - (void) dealloc {
25         [[NSNotificationCenter defaultCenter] removeObserver:self];
26
27         [_buddy release];
28         _buddy = nil;
29
30         [super dealloc];
31 }
32
33 #pragma mark -
34
35 - (NSView *) view {
36         if( ! _nibLoaded ) _nibLoaded = [NSBundle loadNibNamed:@"JVBuddyInspector" owner:self];
37         return view;
38 }
39
40 - (NSSize) minSize {
41         return NSMakeSize( 250., 300. );
42 }
43
44 - (NSString *) title {
45         return [_buddy compositeName];
46 }
47
48 - (NSString *) type {
49         return NSLocalizedString( @"Buddy", "buddy inspector type" );
50 }
51
52 - (void) willLoad {
53         NSEnumerator *enumerator = [[[MVConnectionsController defaultController] connections] objectEnumerator];
54         MVChatConnection *connection = nil;
55
56         while( ( connection = [enumerator nextObject] ) )
57                 if( [connection type] == MVChatConnectionIRCType )
58                         [servers addItemWithTitle:[connection server]];
59
60         [removeNickname setTransparent:NO];
61         [removeNickname setHidden:YES];
62
63         [picture setImage:[_buddy picture]];
64         [firstName setObjectValue:[_buddy firstName]];
65         [lastName setObjectValue:[_buddy lastName]];
66         [nickname setObjectValue:[_buddy givenNickname]];
67         [email setObjectValue:[_buddy primaryEmail]];
68
69         [self changeServer:servers];
70 }
71
72 #pragma mark -
73
74 - (IBAction) changeServer:(id) sender {
75         if( [[sender selectedItem] tag] ) {
76                 [_activeUsers autorelease];
77                 _activeUsers = [[NSMutableArray arrayWithArray:[_buddy users]] retain];
78                 [[nicknames tableColumnWithIdentifier:@"nickname"] setEditable:NO];
79                 [addNickname setEnabled:NO];
80         } else {
81                 [_activeUsers autorelease];
82                 _activeUsers = [[NSMutableArray array] retain];
83
84                 NSEnumerator *enumerator = [[_buddy users] objectEnumerator];
85                 MVChatUser *user = nil;
86
87                 while( ( user = [enumerator nextObject] ) )
88                         if( [[servers titleOfSelectedItem] caseInsensitiveCompare:[user serverAddress]] == NSOrderedSame )
89                                 [_activeUsers addObject:user];
90
91                 [[nicknames tableColumnWithIdentifier:@"nickname"] setEditable:YES];
92                 [addNickname setEnabled:YES];
93         }
94
95         [nicknames deselectAll:nil];
96         [nicknames reloadData];
97 }
98
99 #pragma mark -
100
101 - (IBAction) addNickname:(id) sender {
102         [_activeUsers addObject:[NSNull null]];
103         [nicknames noteNumberOfRowsChanged];
104         [nicknames selectRow:([_activeUsers count] - 1) byExtendingSelection:NO];
105         [nicknames editColumn:0 row:([_activeUsers count] - 1) withEvent:nil select:NO];
106 }
107
108 - (IBAction) removeNickname:(id) sender {
109         if( [nicknames selectedRow] == -1 || [nicknames editedRow] != -1 ) return;
110         [_buddy removeUser:[_activeUsers objectAtIndex:[nicknames selectedRow]]];
111         [_activeUsers removeObjectAtIndex:[nicknames selectedRow]];
112         [nicknames noteNumberOfRowsChanged];
113 }
114
115 #pragma mark -
116
117 - (IBAction) editCard:(id) sender {
118         [_buddy editInAddressBook];
119 }
120
121 #pragma mark -
122
123 - (IBAction) changeBuddyIcon:(id) sender {
124         [_buddy setPicture:[sender image]];
125 }
126
127 - (IBAction) changeFirstName:(id) sender {
128         [_buddy setFirstName:[sender stringValue]];
129 }
130
131 - (IBAction) changeLastName:(id) sender {
132         [_buddy setLastName:[sender stringValue]];
133 }
134
135 - (IBAction) changeNickname:(id) sender {
136         [_buddy setGivenNickname:[sender stringValue]];
137 }
138
139 - (IBAction) changeEmail:(id) sender {
140         [_buddy setPrimaryEmail:[sender stringValue]];
141 }
142
143 #pragma mark -
144
145 - (int) numberOfRowsInTableView:(NSTableView *) view {
146         return [_activeUsers count];
147 }
148
149 - (id) tableView:(NSTableView *) view objectValueForTableColumn:(NSTableColumn *) column row:(int) row {
150         if( [[_activeUsers objectAtIndex:row] isMemberOfClass:[NSNull class]] ) return @"";
151         if( [[servers selectedItem] tag] )
152                 return [NSString stringWithFormat:@"%@ (%@)", [[_activeUsers objectAtIndex:row] nickname], [[_activeUsers objectAtIndex:row] serverAddress]];
153         return [[_activeUsers objectAtIndex:row] nickname];
154 }
155
156 - (void) tableView:(NSTableView *) view setObjectValue:(id) object forTableColumn:(NSTableColumn *) column row:(int) row {
157         if( ! [(NSString *)object length] ) {
158                 [_activeUsers removeObjectAtIndex:row];
159                 [nicknames noteNumberOfRowsChanged];
160                 return;
161         }
162
163         NSString *server = [servers titleOfSelectedItem];
164         MVChatUser *user = [MVChatUser wildcardUserWithNicknameMask:[NSString stringWithFormat:@"%@@%@", object, server] andHostMask:nil];
165
166         if( [[_activeUsers objectAtIndex:row] isMemberOfClass:[NSNull class]] ) {
167                 [_buddy addUser:user];
168                 [_activeUsers replaceObjectAtIndex:row withObject:user];
169         } else {
170                 [_buddy replaceUser:[_activeUsers objectAtIndex:row] withUser:user];
171                 [_activeUsers replaceObjectAtIndex:row withObject:user];
172         }
173 }
174
175 - (void) tableViewSelectionDidChange:(NSNotification *) notification {
176         [removeNickname setHidden:( [nicknames selectedRow] == -1 )];
177         [removeNickname highlight:NO];
178 }
179 @end
Note: See TracBrowser for help on using the browser.