[zephyrchat-cvs] zchat/zChat ZChatAppController.h,1.15,1.16 ZChatAppController.mm,1.18,1.19 ZChatFri
Status: Alpha
                
                Brought to you by:
                
                    akosut
                    
                
            | 
      
      
      From: <ak...@us...> - 2003-04-07 21:02:03
      
     | 
| Update of /cvsroot/zephyrchat/zchat/zChat
In directory sc8-pr-cvs1:/tmp/cvs-serv11946
Modified Files:
	ZChatAppController.h ZChatAppController.mm 
	ZChatFriendsController.h ZChatFriendsController.mm 
Log Message:
Custom status messages work (mostly).
Index: ZChatAppController.h
===================================================================
RCS file: /cvsroot/zephyrchat/zchat/zChat/ZChatAppController.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- ZChatAppController.h	7 Apr 2003 20:37:33 -0000	1.15
+++ ZChatAppController.h	7 Apr 2003 21:01:52 -0000	1.16
@@ -44,7 +44,7 @@
 - (IBAction)showFriendsWindow:(id)sender;
 
 - (IBAction)connect:(id)sender;
-- (IBAction)connectWithTerminal:(NSString *)terminal;
+- (void)connectWithTerminal:(NSString *)terminal;
 - (IBAction)disconnect:(id)sender;
 - (void)zephyrAbort:(zephyrlib::ZephyrStatus)status;
 
Index: ZChatAppController.mm
===================================================================
RCS file: /cvsroot/zephyrchat/zchat/zChat/ZChatAppController.mm,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- ZChatAppController.mm	7 Apr 2003 20:37:33 -0000	1.18
+++ ZChatAppController.mm	7 Apr 2003 21:01:53 -0000	1.19
@@ -151,9 +151,13 @@
 }
 
 - (void)setTerminal:(NSString *)status {
-    _mgr->SetTerminal([status stlString], new ZChatAppControllerUpdateCallback);
-    _busy = true;
-    [[NSNotificationCenter defaultCenter] postNotificationName:ZChatStatusNotification object:self];
+    if (_mgr == NULL) {
+        [self connectWithTerminal:status];
+    } else {
+        _mgr->SetTerminal([status stlString], new ZChatAppControllerUpdateCallback);
+        _busy = true;
+        [[NSNotificationCenter defaultCenter] postNotificationName:ZChatStatusNotification object:self];
+    }
 }
 
 
@@ -161,7 +165,7 @@
     [self connectWithTerminal:[_friends defaultTerminal]];
 }
 
-- (IBAction)connectWithTerminal:(NSString *)terminal {
+- (void)connectWithTerminal:(NSString *)terminal {
     NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];
 
     delete _mgr;
Index: ZChatFriendsController.h
===================================================================
RCS file: /cvsroot/zephyrchat/zchat/zChat/ZChatFriendsController.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- ZChatFriendsController.h	7 Apr 2003 20:37:33 -0000	1.15
+++ ZChatFriendsController.h	7 Apr 2003 21:01:54 -0000	1.16
@@ -27,6 +27,10 @@
     IBOutlet NSButton *_reloadButton;
 
     IBOutlet NSProgressIndicator *_busyIndicator;
+
+    IBOutlet NSWindow *_statusSheet;
+    IBOutlet NSButton *_statusOKButton;
+    IBOutlet NSTextField *_statusTextField;
     
     NSMutableArray *_data;
     NSTimer *_timer;
Index: ZChatFriendsController.mm
===================================================================
RCS file: /cvsroot/zephyrchat/zchat/zChat/ZChatFriendsController.mm,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -d -r1.20 -r1.21
--- ZChatFriendsController.mm	7 Apr 2003 20:37:33 -0000	1.20
+++ ZChatFriendsController.mm	7 Apr 2003 21:01:55 -0000	1.21
@@ -183,7 +183,7 @@
     // Check for existing title
     id <NSMenuItem> item = [_statusMenu itemWithTitle:status];
     if (item != NULL) {
-        if ([item tag] == away ? 2 : 1 || [item tag] == away ? 222 : 111) {
+        if (([item tag] == (away ? 2 : 1)) || ([item tag] == (away ? 222 : 111))) {
             [_statusMenu selectItem:item];
             return;
         }
@@ -210,43 +210,52 @@
 
 - (IBAction)changeStatus:(id)sender {
     id <NSMenuItem> item = [sender selectedItem];
-    NSString *terminal = nil;
 
     switch ([item tag]) {
         case -1:
             [ZChatApp disconnect:nil];
-            return;
+            break;
                 
         case -2:
-            terminal = @"";
+            [ZChatApp zephyrHide:nil];
             break;
 
         case 1:
         case 111:
-            terminal = [NSString stringWithFormat:@"+%@", [item title]];
+            [ZChatApp setTerminal:[NSString stringWithFormat:@"+%@", [item title]]];
             break;
 
         case 2:
         case 222:
-            terminal = [NSString stringWithFormat:@"-%@", [item title]];
+            [ZChatApp setTerminal:[NSString stringWithFormat:@"-%@", [item title]]];
             break;
 
         case 11:
         case 22:
             /* Haul out the heavy artillery... */
-            // TODO
+            [NSApp beginSheet:_statusSheet modalForWindow:[self window] modalDelegate:self
+               didEndSelector:@selector(_changeStatusSheetDidEnd:returnCode:contextInfo:)
+                  contextInfo:reinterpret_cast<void *>([item tag])];
             break;
     }
+}
 
-    if (terminal != nil) {
-        if ([ZChatApp mgr] != nil) {
-            [ZChatApp setTerminal:terminal];
-        } else {
-            [ZChatApp connectWithTerminal:terminal];
-        }
+- (void)_changeStatusSheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo {
+    if (returnCode == NSOKButton) {
+        bool away = reinterpret_cast<int>(contextInfo) == 22;
+        NSString *status = [_statusTextField stringValue];
+
+        NSAssert([status length] > 0, @"Custom status cannot be empty");
+
+        [ZChatApp setTerminal:[NSString stringWithFormat:@"%c%@", away ? '-' : '+', status]];
     }
 }
 
+- (void)controlTextDidChange:(NSNotification *)notification {
+    if ([notification object] == _statusTextField) {
+        [_statusOKButton setEnabled:[[_statusTextField stringValue] length] > 0];
+    }
+}
 
 - (void)_loginNotification:(NSNotification *)notification {
     [_reloadButton setEnabled:YES];
 |