This is LineAndCharacterRange.m in view mode; [Download] [Up]
/* LineAndCharacterRange.m created by ovidiu on Sat 29-Mar-1997 */ #import <AppKit/AppKit.h> #import "Document.h" #import "LineAndCharacterRange.h" @implementation LineAndCharacterRange // Class variables static id sharedInstance = nil; + sharedInstance { if (!sharedInstance) { sharedInstance = [self new]; if (![NSBundle loadNibNamed:@"LineRange" owner:sharedInstance]) { NSLog(@"Failed to load LineRange.nib"); [sharedInstance release]; sharedInstance = nil; return nil; } } return sharedInstance; } - init { [super init]; if (!sharedInstance) sharedInstance = self; else [self release]; return sharedInstance; } - (void)awakeFromNib { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; useLineRange = [defaults boolForKey:@"LineRange"]; autoupdate = [defaults boolForKey:@"AutoUpdate"]; [lineCharacterMatrix selectCellAtRow:!useLineRange column:0]; [autoUpdateButton setState:autoupdate]; [[rangeField window] setFrameAutosaveName:@"Line Range Window"]; } - (void)buttonsChanged:sender { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setBool:![lineCharacterMatrix selectedRow] forKey:@"LineRange"]; [defaults setBool:[autoUpdateButton state] forKey:@"AutoUpdate"]; } - (void)select:sender { Document* document = [Document currentDocument]; NSArray* selectionArray = [[rangeField stringValue] componentsSeparatedByString:@":"]; int a = -1, b = -1, count = [selectionArray count]; a = [[selectionArray objectAtIndex:0] intValue]; if (count == 2) b = [[selectionArray objectAtIndex:1] intValue]; if (b == -1) b = a; else if (a > b) { int tmp = a; a = b; b = tmp; } if (a < 0 && b < 0) { [[lineCharacterMatrix window] orderOut:nil]; return; } if (![lineCharacterMatrix selectedRow]) [document selectFromLine:a toEndLine:b]; else [document selectFromChar:a toEndChar:b]; [[lineCharacterMatrix window] orderOut:nil]; } - (void)updateInfo { Document* document; document = [Document currentDocument]; if (![lineCharacterMatrix selectedRow]) { int startLine, endLine; [document getStartLine:&startLine endLine:&endLine]; if (startLine != endLine) [rangeField setStringValue: [NSString stringWithFormat:@"%d:%d", startLine, endLine]]; else [rangeField setStringValue: [NSString stringWithFormat:@"%d", startLine]]; } else { NSRange range = [document selectionRange]; if (range.length) [rangeField setStringValue: [NSString stringWithFormat:@"%d:%d", range.location, range.location + range.length]]; else [rangeField setStringValue: [NSString stringWithFormat:@"%d", range.location]]; } } - (void)showPanel { [self updateInfo]; [[rangeField window] makeFirstResponder:rangeField]; [[lineCharacterMatrix window] makeKeyAndOrderFront:nil]; } - (BOOL)useLineRange { return useLineRange; } - (BOOL)autoupdate { return autoupdate; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.