This is XText0.m in view mode; [Download] [Up]
#import "XText0.h" #import "XTAction.h" #import "ErrorStream.h" #import <objc/objc.h> #import <appkit/Window.h> #import <appkit/publicWraps.h> @implementation XText0 struct WindowGuts { @defs(Window); }; /* everything except the setInitialAction/setErrorStream is copied straight out of Window's getFieldEditor:for: method */ + newFieldEditorFor:win initialAction:action estream:errs { id editor = nil; if ([win isKindOf: [Window class]]) { editor = ((struct WindowGuts *)win)->fieldEditor; if (editor == nil) { editor = [[self allocFromZone:[win zone]] init]; [editor setCharFilter: &NXFieldFilter]; [editor setSelectable: YES]; [editor setFontPanelEnabled: NO]; [editor setInitialAction:action]; if (errs) [editor setErrorStream:errs]; ((struct WindowGuts *)win)->fieldEditor = editor; } } return editor; } - initFrame:(const NXRect *)frameRect text:(const char *)theText alignment:(int)mode { [super initFrame:frameRect text:theText alignment:mode]; nextAction = nil; initialAction = nil; errorStream = [ErrorStream default]; return self; } /* We want to make sure that unrecognized messages are reported nicely, since it's easy to generate them while your experimenting. */ - doesNotRecognize:(SEL)sel { char msg[100]; sprintf(msg, "No method for %.48s on this text object", sel_getName(sel)); [errorStream report: msg]; return self; } /* Egregious paranoia: don't set the error stream to something that can't report errors... */ - setErrorStream:errs { if ([errs respondsTo: @selector(report:)]) errorStream = errs; else [errorStream report:"Invalid argument to setErrorStream:"]; return self; } - errorStream { return errorStream; } - setInitialAction:action { initialAction = nextAction = action; return self; } - initialAction { return initialAction; } - setNextAction:action { nextAction = action; return self; } - keyDown:(NXEvent *)event { id temp; temp = nextAction; nextAction = initialAction; if (temp) { temp = [temp applyTo:self event:event]; if (vFlags.disableAutodisplay) { [self setAutodisplay:YES]; [self display]; } if (sp0.cp == spN.cp) [self setSel:sp0.cp :sp0.cp]; // hack to make caret reappear } return temp ? self : [super keyDown:event]; } - unboundKey { NXBeep(); return self; } - disableAutodisplay { // There seems to be a bug with turning off autodisplay in text fields, // so try to avoid doing it. if (charFilterFunc != &NXFieldFilter) [self setAutodisplay:NO]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.