App/MessagesDataSource.m

00001 //
00002 //  MessagesDataSource.m
00003 //  MacTrek
00004 //
00005 //  Created by Aqua on 02/06/2006.
00006 //  Copyright 2006 Luky Soft. All rights reserved.
00007 //
00008 
00009 #import "MessagesDataSource.h"
00010 
00011 
00012 @implementation MessagesDataSource
00013 
00014 int maxMessages = 10; // $$ reduce a bit to avoid heavy load during reload..
00015 NSMutableArray *messages = nil;
00016 
00017 - (id) init {
00018     self = [super init];
00019     if (self != nil) {
00020         universe = [Universe defaultInstance];
00021         messages = [[NSMutableArray alloc] init];
00022         [self newMessage:@"Client started"];
00023     }
00024     return self;
00025 }
00026 
00027 - (void) awakeFromNib {
00028     // $$ this could be quite heavy for the runloop....
00029     [notificationCenter addObserver:self selector:@selector(newMessage:) name:@"SP_S_MESSAGE" 
00030                              object:nil useLocks:NO useMainRunLoop:YES];
00031     [notificationCenter addObserver:self selector:@selector(newMessage:) name:@"SPW_MESSAGE" 
00032                              object:nil useLocks:NO useMainRunLoop:YES];
00033     [notificationCenter addObserver:self selector:@selector(newMessageInDictionairy:) name:@"SP_MESSAGE" 
00034                              object:nil useLocks:NO useMainRunLoop:YES];
00035     
00036     // warnings are sent to a seperate text field now
00037     //[notificationCenter addObserver:self selector:@selector(newMessage:) name:@"SP_WARNING"];
00038     
00039     // used only for debug...
00040     //[notificationCenter addObserver:self selector:@selector(newMessage:) name:@"SP_MOTD"];
00041     //[notificationCenter addObserver:self selector:@selector(newMessage:) name:@"SP_MOTD_SERVER_INFO"];
00042 
00043 }
00044 
00045 - (void) newMessageInDictionairy:(NSDictionary*)package {
00046 
00047     NSString *message = [package objectForKey:@"message"];
00048 //    NSNumber *flags   = [package objectForKey:@"flags"];
00049 //    NSNumber *from    = [package objectForKey:@"from"];
00050 //    NSNumber *to      = [package objectForKey:@"to"]; 
00051 
00052     // i think we should do something with the flags ...
00053     // handle colours etc.
00054     // $$ see IncommingMessageHandler in JTrek
00055     
00056     [self newMessage:message];
00057 }
00058 
00059 // tie this to events that change messages
00060 - (void) newMessage:(NSString *)message {
00061     
00062     // test for new
00063     if (universe == nil) {        
00064         return;
00065     }
00066     
00067     if (message == nil) {        
00068         return;
00069     }
00070     
00071     // add it
00072     NSLog(@"MessagesDataSource.newMessage (%@)", message);
00073     [messages addObject:message];
00074     if ([messages count] > maxMessages) {
00075         [messages removeObjectAtIndex:0];
00076     }
00077     
00078     // show it
00079     // $$ performance hog, reload it not that often or make our own view....
00080     [messagesList reloadData];
00081     // make the last row visible
00082     [messagesList scrollRowToVisible:[messages count] - 1];
00083 }
00084 
00085 - (int)numberOfRowsInTableView:(NSTableView *)aTableView {
00086     return [messages count];
00087 }
00088 
00089 - (id)tableView:(NSTableView *)aTableView
00090     objectValueForTableColumn:(NSTableColumn *)aTableColumn
00091             row:(int)rowIndex {
00092 
00093     NSString *message = [messages objectAtIndex:rowIndex];
00094     //NSLog(@"MessagesDataSource.valueForRow (%@)", message);
00095     return message;
00096 }
00097 
00098 @end

Generated on Sat Aug 26 21:14:07 2006 for MacTrek by  doxygen 1.4.7