root/tags/2C11/JVBuddyInspector.m

Revision 1823, 5.1 kB (checked in by timothy, 4 years ago)

Moved Colloquy to a pre-compiled header. Removed all #imports that are part of the Cocoa, WebKit? and AGRegex frameworks. Removed all @class declarations that are part of the Cocoa frameworks.

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         NSMutableSet *addresses = [NSMutableSet set];
54         NSEnumerator *enumerator = [[[MVConnectionsController defaultManager] connections] objectEnumerator];
55         MVChatConnection *connection = nil;
56         NSString *address = nil;
57
58         while( ( connection = [enumerator nextObject] ) )
59                 [addresses addObject:[connection server]];
60
61         enumerator = [addresses objectEnumerator];
62         while( ( address = [enumerator nextObject] ) )
63                 [servers addItemWithTitle:address];
64
65         [picture setImage:[_buddy picture]];
66         [firstName setObjectValue:[_buddy firstName]];
67         [lastName setObjectValue:[_buddy lastName]];
68         [nickname setObjectValue:[_buddy givenNickname]];
69         [email setObjectValue:[_buddy primaryEmail]];
70
71         [self changeServer:servers];
72 }
73
74 #pragma mark -
75
76 - (IBAction) changeServer:(id) sender {
77         if( [[sender selectedItem] tag] ) {
78                 [_activeNicknames autorelease];
79                 _activeNicknames = [[NSMutableArray arrayWithArray:[[_buddy nicknames] allObjects]] retain];
80                 [[nicknames tableColumnWithIdentifier:@"nickname"] setEditable:NO];
81                 [addNickname setEnabled:NO];
82         } else {
83                 [_activeNicknames autorelease];
84                 _activeNicknames = [[NSMutableArray array] retain];
85
86                 NSEnumerator *enumerator = [[_buddy nicknames] objectEnumerator];
87                 NSURL *url = nil;
88
89                 while( ( url = [enumerator nextObject] ) )
90                         if( [[servers titleOfSelectedItem] caseInsensitiveCompare:[url host]] == NSOrderedSame )
91                                 [_activeNicknames addObject:url];
92
93                 [[nicknames tableColumnWithIdentifier:@"nickname"] setEditable:YES];
94                 [addNickname setEnabled:YES];
95         }
96
97         [nicknames deselectAll:nil];
98         [nicknames reloadData];
99 }
100
101 #pragma mark -
102
103 - (IBAction) addNickname:(id) sender {
104         [_activeNicknames addObject:[NSNull null]];
105         [nicknames noteNumberOfRowsChanged];
106         [nicknames selectRow:([_activeNicknames count] - 1) byExtendingSelection:NO];
107         [nicknames editColumn:0 row:([_activeNicknames count] - 1) withEvent:nil select:NO];
108 }
109
110 - (IBAction) removeNickname:(id) sender {
111         if( [nicknames selectedRow] == -1 || [nicknames editedRow] != -1 ) return;
112         [_buddy removeNickname:[_activeNicknames objectAtIndex:[nicknames selectedRow]]];
113         [_activeNicknames removeObjectAtIndex:[nicknames selectedRow]];
114         [nicknames noteNumberOfRowsChanged];
115 }
116
117 #pragma mark -
118
119 - (IBAction) editCard:(id) sender {
120         [_buddy editInAddressBook];
121 }
122
123 #pragma mark -
124
125 - (IBAction) changeBuddyIcon:(id) sender {
126         [_buddy setPicture:[sender image]];
127 }
128
129 - (IBAction) changeFirstName:(id) sender {
130         [_buddy setFirstName:[sender stringValue]];
131 }
132
133 - (IBAction) changeLastName:(id) sender {
134         [_buddy setLastName:[sender stringValue]];
135 }
136
137 - (IBAction) changeNickname:(id) sender {
138         [_buddy setGivenNickname:[sender stringValue]];
139 }
140
141 - (IBAction) changeEmail:(id) sender {
142         [_buddy setPrimaryEmail:[sender stringValue]];
143 }
144
145 #pragma mark -
146
147 - (int) numberOfRowsInTableView:(NSTableView *) view {
148         return [_activeNicknames count];
149 }
150
151 - (id) tableView:(NSTableView *) view objectValueForTableColumn:(NSTableColumn *) column row:(int) row {
152         if( [[_activeNicknames objectAtIndex:row] isMemberOfClass:[NSNull class]] ) return @"";
153         if( [[servers selectedItem] tag] )
154                 return [NSString stringWithFormat:@"%@ (%@)", [[_activeNicknames objectAtIndex:row] user], [[_activeNicknames objectAtIndex:row] host]];
155         return [[_activeNicknames objectAtIndex:row] user];
156 }
157
158 - (void) tableView:(NSTableView *) view setObjectValue:(id) object forTableColumn:(NSTableColumn *) column row:(int) row {
159         if( ! [(NSString *)object length] ) {
160                 [_activeNicknames removeObjectAtIndex:row];
161                 [nicknames noteNumberOfRowsChanged];
162                 return;
163         }
164
165         NSString *server = [servers titleOfSelectedItem];
166         NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"irc://%@@%@", [object stringByEncodingIllegalURLCharacters], [server stringByEncodingIllegalURLCharacters]]];
167
168         if( [[_activeNicknames objectAtIndex:row] isMemberOfClass:[NSNull class]] ) {
169                 [_buddy addNickname:url];
170                 [_activeNicknames replaceObjectAtIndex:row withObject:url];
171         } else {
172                 [_buddy replaceNickname:[_activeNicknames objectAtIndex:row] withNickname:url];
173                 [_activeNicknames replaceObjectAtIndex:row withObject:url];
174         }
175 }
176
177 - (void) tableViewSelectionDidChange:(NSNotification *) notification {
178         [removeNickname setTransparent:( [nicknames selectedRow] == -1 )];
179         [removeNickname highlight:NO];
180 }
181 @end
Note: See TracBrowser for help on using the browser.