/Volumes/Plantain/MyDocuments/Projects/MacTrek/MacTrek/App/MessagesDataSource.m

00001 //
00002 //  MessagesDataSource.m
00003 //  MacTrek
00004 //
00005 //  Created by Aqua on 02/06/2006.
00006 //  Copyright 2006 __MyCompanyName__. 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     [notificationCenter addObserver:self selector:@selector(newMessage:) name:@"SP_S_MESSAGE"];
00029     [notificationCenter addObserver:self selector:@selector(newMessage:) name:@"SPW_MESSAGE"];
00030     [notificationCenter addObserver:self selector:@selector(newMessageInDictionairy:) name:@"SP_MESSAGE"];
00031     
00032     // warnings are sent to a seperate text field now
00033     //[notificationCenter addObserver:self selector:@selector(newMessage:) name:@"SP_WARNING"];
00034     
00035     // used only for debug...
00036     //[notificationCenter addObserver:self selector:@selector(newMessage:) name:@"SP_MOTD"];
00037     //[notificationCenter addObserver:self selector:@selector(newMessage:) name:@"SP_MOTD_SERVER_INFO"];
00038 
00039 }
00040 
00041 - (void) newMessageInDictionairy:(NSDictionary*)package {
00042 
00043     NSString *message = [package objectForKey:@"message"];
00044 //    NSNumber *flags   = [package objectForKey:@"flags"];
00045 //    NSNumber *from    = [package objectForKey:@"from"];
00046 //    NSNumber *to      = [package objectForKey:@"to"]; 
00047 
00048     // i think we should do something with the flags ...
00049     // handle colours etc.
00050     // $$ see IncommingMessageHandler in JTrek
00051     
00052     [self newMessage:message];
00053 }
00054 
00055 // tie this to events that change messages
00056 - (void) newMessage:(NSString *)message {
00057     
00058     // test for new
00059     if (universe == nil) {        
00060         return;
00061     }
00062     
00063     if (message == nil) {        
00064         return;
00065     }
00066     
00067     // add it
00068     NSLog(@"MessagesDataSource.newMessage (%@)", message);
00069     [messages addObject:message];
00070     if ([messages count] > maxMessages) {
00071         [messages removeObjectAtIndex:0];
00072     }
00073     
00074     // show it
00075     // $$ performance hog, reload it not that often or make our own view....
00076     // [messagesList reloadData];
00077     // make the last row visible
00078     [messagesList scrollRowToVisible:[messages count] - 1];
00079 }
00080 
00081 - (int)numberOfRowsInTableView:(NSTableView *)aTableView {
00082     return [messages count];
00083 }
00084 
00085 - (id)tableView:(NSTableView *)aTableView
00086     objectValueForTableColumn:(NSTableColumn *)aTableColumn
00087             row:(int)rowIndex {
00088 
00089     NSString *message = [messages objectAtIndex:rowIndex];
00090     //NSLog(@"MessagesDataSource.valueForRow (%@)", message);
00091     return message;
00092 }
00093 
00094 @end

Generated on Fri Jul 28 19:15:14 2006 for MacTrek by  doxygen 1.4.7