00001
00002
00003
00004
00005
00006
00007
00008
00009 #import "PlayerListDataSource.h"
00010
00011
00012 @implementation PlayerListDataSource
00013
00014
00015 - (id) init {
00016 self = [super init];
00017 if (self != nil) {
00018 universe = nil;
00019 players = [[NSMutableArray alloc] init];
00020 universe = [Universe defaultInstance];
00021 [self refreshData];
00022 }
00023 return self;
00024 }
00025
00026 - (void) awakeFromNib {
00027 [notificationCenter addObserver:self selector:@selector(refreshData) name:@"SP_PLAYER_INFO"
00028 object:nil useLocks:NO useMainRunLoop:YES];
00029
00030
00031 [toField removeAllItems];
00032 [toField addItemWithTitle:@"ALL"];
00033 [toField addItemWithTitle:@"FED"];
00034 [toField addItemWithTitle:@"KLI"];
00035 [toField addItemWithTitle:@"ORI"];
00036 [toField addItemWithTitle:@"ROM"];
00037 [toField addItemWithTitle:@"GOD"];
00038 [toField selectItemWithTitle:@"ALL"];
00039 }
00040
00041
00042 - (void) refreshData {
00043
00044
00045
00046
00047
00048 if (universe == nil) {
00049 return;
00050 }
00051
00052 bool changed = NO;
00053
00054
00055 for (int i = 0; i < UNIVERSE_MAX_PLAYERS; i++) {
00056 Player *player = [universe playerWithId:i];
00057 if ([player status] != PLAYER_FREE) {
00058 if (![players containsObject:player]) {
00059 [players addObject:player];
00060 changed = YES;
00061 [toField addItemWithTitle:[player mapChars]];
00062 } else {
00063 if ([players containsObject: player]) {
00064 [players removeObject:player];
00065 changed = YES;
00066 [toField removeItemWithTitle:[player mapChars]];
00067 }
00068 }
00069 }
00070 }
00071
00072
00073
00074 if (changed) {
00075
00076
00077 [playerList reloadData];
00078 } else {
00079 NSLog(@"PlayerListDataSource.refresh skipping, no change detected");
00080 }
00081
00082 }
00083
00084 - (int)numberOfRowsInTableView:(NSTableView *)aTableView {
00085 return [players count];
00086 }
00087
00088 - (id)tableView:(NSTableView *)aTableView
00089 objectValueForTableColumn:(NSTableColumn *)aTableColumn
00090 row:(int)rowIndex {
00091
00092 Player *player = [players objectAtIndex:rowIndex];
00093
00094 if ([[aTableColumn identifier] isEqualToString:@"id"]) {
00095 return [player mapChars];
00096 } else {
00097 return [player longName];
00098 }
00099 }
00100
00101 @end