This is KVTableController.m in view mode; [Download] [Up]
#import <appkit/appkit.h> #import <dbkit/dbkit.h> #import <misckit/misckit.h> #import "KVTableController.h" #import "KVPair.h" @implementation KVTableController NXAtom KVTableKeyIdentifier; NXAtom KVTableValueIdentifier; //----------------------------------------------------------- // INIT & FREE //----------------------------------------------------------- + initialize { KVTableKeyIdentifier = NXUniqueString("KVTable-KeyIdentifier"); KVTableValueIdentifier=NXUniqueString("KVTable-ValueIdentifier"); return self; } - init { [super init]; kvPairs=[[MiscList allocFromZone:[self zone]] init]; delimiter=','; return self; } - free { [kvPairs freeObjects]; kvPairs=[kvPairs free]; return [super free]; } //----------------------------------------------------------- // I-VAR //----------------------------------------------------------- - setTableView:(DBTableView *)aView; { tableView=aView; [[tableView columnAt:0] setIdentifier:(id)KVTableKeyIdentifier]; [[tableView columnAt:1] setIdentifier:(id)KVTableValueIdentifier]; [tableView setDataSource:self]; [tableView reloadData:self]; return self; } - (DBTableView *)tableView; { return tableView; } - setDelimiter:(char)delim; { delimiter=delim; return self; } - (char)delimiter; { return delimiter; } - setDelegate:anObject; { delegate=anObject; return self; } - delegate; { return delegate; } - (MiscList *)kvPairs; { return kvPairs; } //----------------------------------------------------------- // Add //----------------------------------------------------------- - addEmptyRow:sender; { int row=[kvPairs count]; [kvPairs addObject:[[KVPair allocFromZone:[self zone]] init]]; if(sender) { [tableView reloadData:self]; [tableView selectRow:row byExtension:NO]; } return self; } - addPair:(KVPair *)pair; { [kvPairs addObject:[pair copyFromZone:[self zone]]]; [tableView reloadData:self]; return self; } - addPairFromString:(const char *)strg; { KVPair *new=[[KVPair allocFromZone:[self zone]] init:strg delimiter:delimiter]; [new cleanupWithDelimiter:delimiter]; [kvPairs addObject:new]; [tableView reloadData:self]; return self; } //----------------------------------------------------------- // REMOVE //----------------------------------------------------------- - removeSelectedRow:sender; { int row=[tableView selectedRow]; if(row<0) return nil; [kvPairs removeObjectAt:row]; if(sender) [tableView reloadData:self]; return self; } - empty:sender; { [kvPairs freeObjects]; [kvPairs empty]; if(sender) [tableView reloadData:self]; return self; } //----------------------------------------------------------- // Data Source Protocol //----------------------------------------------------------- - (unsigned int)rowCount; { return [kvPairs count]; } - getValueFor:identifier at:(unsigned int)aPosition into:aValue; { if((NXAtom)identifier==KVTableKeyIdentifier) [aValue setStringValue:[[kvPairs objectAt:aPosition] key]]; else [aValue setStringValue:[[kvPairs objectAt:aPosition] value]]; return self; } - setValueFor:identifier at:(unsigned int)aPosition from:aValue; { if((NXAtom)identifier==KVTableKeyIdentifier) [[kvPairs objectAt:aPosition] takeKeyFrom:aValue]; else [[kvPairs objectAt:aPosition] takeValueFrom:aValue]; [[kvPairs objectAt:aPosition] cleanupWithDelimiter:delimiter]; if([delegate respondsTo:@selector(kvTableController:valueDidChangeFor:at:)]) [delegate kvTableController:self valueDidChangeFor:identifier at:aPosition]; return self; } //----------------------------------------------------------- // DELEGATION METHODS //----------------------------------------------------------- - kvTableController:sender valueDidChangeFor:identifier at:(unsigned int)position; { return self; } //----------------------------------------------------------- // THAT'S IT //----------------------------------------------------------- @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.