This is eTLiteralUI.m in view mode; [Download] [Up]
/////////////////////////////////////////////////////////////////////////////// // FILENAME: eTLiteralUI.m // SUMMARY: Implementation of an inspector for eTLiteral // SUPERCLASS: eTLiteralUI:eTImageUI:Object // INTERFACE: eTLiteralUI.nib // PROTOCOLS: <Inspectable> // AUTHOR: Rohit Khare and Tom Zavisca // COPYRIGHT: (c) 1994 California Institure of Technology, eText Project /////////////////////////////////////////////////////////////////////////////// // IMPLEMENTATION COMMENTS // See the overrides for the <Inspectable> API. /////////////////////////////////////////////////////////////////////////////// // HISTORY // 07/24/94: Created. First actual implementation. /////////////////////////////////////////////////////////////////////////////// #import "eTLiteralUI.h" @implementation eTLiteralUI // id literalPanel; // id literalView; // id etLiteral; // id repText; // int currentFmt; // BOOL textDirty; +new { static eTLiteralUI *ui = nil; if (!ui) { ui = [[eTLiteralUI alloc] init]; } return ui; } - init { char buf[MAXPATHLEN]; NXBundle *bundle; [super init]; bundle = [NXBundle bundleForClass:[eTLiteralUI class]]; if ( [bundle getPath:buf forResource:"eTLiteralUI" ofType:"nib"] ) { [NXApp loadNibFile:buf owner:self withNames:NO]; } else { NXLogError("NIB not found: eTLiteralUI"); } literalView = [literalPanel contentView]; [repText setDelegate:self]; textDirty=NO; currentFmt=HTMD_FMT; // don't worry, activateI.. should be callled :) return self; } - free {return self;} ////////////////// Inspectable API #define HTML_REP NXUniqueString("HTML Representation") #define TeXD_REP NXUniqueString("LaTeX Representation") #define C_REP NXUniqueString("C Code Representation") #define ASCII_REP NXUniqueString("ASCII Representation") - (const NXAtom *) types { static NXAtom *types = NULL; if (!types) { int i; const NXAtom *superTypes = [super types]; for(i=0;superTypes[i];i++); i++; // make room for terminating NULL types = malloc(i+5 * sizeof(NXAtom)); types[0] = HTML_REP; types[1] = TeXD_REP; types[2] = C_REP; types[3] = ASCII_REP; for(i=0;superTypes[i];i++) types[i+4] = superTypes[i]; types[i+4] = NULL; } return types; } - resignInspector: (View *) oldInspector ofType: (const char *) type { if (oldInspector == literalView) { // we have to swap OUT the old.... [self resetRep:self]; } else [super resignInspector:oldInspector ofType:type]; return self; } - activateInspector: (View *) newInspector ofType: (const char *) aType { NXAtom type; type = NXUniqueString(aType); if (newInspector == literalView) { //and ring in the NEW... if(type==HTML_REP) [self changeFormatTo:HTMD_FMT]; else if(type==TeXD_REP) [self changeFormatTo:TeXD_FMT]; else if(type==C_REP) [self changeFormatTo:C_FMT]; else if(type==ASCII_REP) [self changeFormatTo:ASCII_FMT]; else NXLogError("Massive Inspector Failure: asked eTLiteralUI to activate %s", type); } else [super activateInspector:newInspector ofType:type]; return self; } - inspectorForType:(const char *) aType { NXAtom type; type = NXUniqueString(aType); if((type==HTML_REP) || (type==TeXD_REP) || (type==C_REP) || (type== ASCII_REP)) return literalView; else return [super inspectorForType:type]; } - (const char *)inspectorTitle {return NXUniqueString("Literal Element");} //////////////////////// - setAnnotation:newLiteral {[self resetRep:self]; etLiteral=newLiteral; return [super setAnnotation:newLiteral];} -resetRep: sender { if(textDirty) { [etLiteral setRep:currentFmt fromStream:[repText stream] length:[repText textLength]]; textDirty=NO; } return self; } -changeFormatTo:(int) newFormat { const char *buf; currentFmt = newFormat; if (buf = [etLiteral theRepForFormat:currentFmt]) { [repText setText:buf]; textDirty = NO; } else { [repText setText:""]; } return self; } -textDidChange: sender { textDirty=YES; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.