This is AppController.m in view mode; [Download] [Up]
#import "AppController.h" #import <MiscFoundation/MiscSortedCollection.h> #import "TestObject.h" static NSString *opSeparator = @"\n----------------------------------------------------------------------\n"; @interface NSText(LogExtensions) - (void)printString:(NSString *)aString; @end @implementation NSText(LogExtensions) - (void)printString:(NSString *)aString { NSRange theRange; theRange = NSMakeRange([[self string] length],0); [self replaceCharactersInRange:theRange withString:aString]; theRange = NSMakeRange([[self string] length],0); [self scrollRangeToVisible:theRange]; } @end @implementation AppController - (void)applicationDidFinishLaunching:(NSNotification *)notification { numberSkipList = [[MiscMutableSortedCollection numberCollection] retain]; stringSkipList = [[MiscMutableSortedCollection stringCollection] retain]; objectSkipList = [[MiscMutableSortedCollection collection] retain]; [window makeKeyAndOrderFront:nil]; } - (void)delete { id object; if([radio selectedTag] == 1){ object = [valueField stringValue]; [stringSkipList removeAllObjectsOrderedSameAs:object]; [textView printString:[(MiscSortedCollection *)stringSkipList description]]; } else if([radio selectedTag] == 0){ object = [NSNumber numberWithFloat:[valueField floatValue]]; [numberSkipList removeAllObjectsOrderedSameAs:object]; [textView printString:[(MiscSortedCollection *)numberSkipList description]]; } else { object = [TestObject objectWithString:[valueField stringValue]]; [objectSkipList removeAllObjectsOrderedSameAs:object]; [textView printString:[(MiscSortedCollection *)objectSkipList description]]; } } - (void)insert { id object; if([radio selectedTag] == 1){ object = [valueField stringValue]; [stringSkipList insertObject:object]; [textView printString:[(MiscSortedCollection *)stringSkipList description]]; } else if([radio selectedTag] == 0){ object = [NSNumber numberWithFloat:[valueField floatValue]]; [numberSkipList insertObject:object]; [textView printString:[(MiscSortedCollection *)numberSkipList description]]; } else { object = [TestObject objectWithString:[valueField stringValue]]; [objectSkipList insertObject:object]; [textView printString:[(MiscSortedCollection *)objectSkipList description]]; } } - (void)before { id object, result; if([radio selectedTag] == 1){ object = [valueField stringValue]; result = [stringSkipList objectBefore:object]; } else if([radio selectedTag] == 0){ object = [NSNumber numberWithFloat:[valueField floatValue]]; result = [numberSkipList objectBefore:object]; } else { object = [TestObject objectWithString:[valueField stringValue]]; result = [objectSkipList objectBefore:object]; } if(result) [textView printString:[(NSObject *)result description]]; else [textView printString:@"Nil object"]; } - (void)same { id object, resultArray; if([radio selectedTag] == 1){ object = [valueField stringValue]; resultArray = [stringSkipList allObjectsOrderedSameAs:object]; } else if([radio selectedTag] == 0){ object = [NSNumber numberWithFloat:[valueField floatValue]]; resultArray = [numberSkipList allObjectsOrderedSameAs:object]; } else { object = [TestObject objectWithString:[valueField stringValue]]; resultArray = [objectSkipList allObjectsOrderedSameAs:object]; } [textView printString:[(NSArray *)resultArray description]]; } - (void)removeAll:(id)sender { [textView printString:opSeparator]; if([radio selectedTag] == 1){ [stringSkipList removeAllObjects]; [textView printString:[(MiscSortedCollection *)stringSkipList description]]; } else if([radio selectedTag] == 0){ [numberSkipList removeAllObjects]; [textView printString:[(MiscSortedCollection *)numberSkipList description]]; } else { [objectSkipList removeAllObjects]; [textView printString:[(MiscSortedCollection *)objectSkipList description]]; } } - (void)showSkipList:(id)sender { [textView printString:opSeparator]; if([radio selectedTag] == 1){ [textView printString:[(MiscSortedCollection *)stringSkipList description]]; } else if([radio selectedTag] == 0){ [textView printString:[(MiscSortedCollection *)numberSkipList description]]; } else { [textView printString:[(MiscSortedCollection *)objectSkipList description]]; } } - (void)clear:(id)sender { [textView setString:@""]; } - (void)performOp:(id)sender { [textView printString:opSeparator]; switch([opRadio selectedTag]){ case 0: [self insert]; break; case 1: [self delete]; break; case 2: [self before]; break; case 3: [self same]; break; default: break; } [valueField selectText:self]; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.