This is Document.m in view mode; [Download] [Up]
/* * This sourcecode is part of FileSpy, a logfile observing utility. * Copyright (C) 1996 Felix Rauch * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Notice that this program may not be possessed, used, copied, * distributed or modified by people having to do with nuclear * weapons. See the file CONDITIONS for details. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * To contact the original author, try: * e-mail: Felix.Rauch@nice.ch * Traditional mail: Felix Rauch * Sempacherstrasse 33 * 8032 Zurich * Switzerland */ // Most of this has been taken from YapDocument.m #import "Document.h" #define MAXSIZE 1.0e38 // Maximum size of a text object @implementation Document + new:sender; { id docWin; /* Window belonging to this document. */ id textObj; /* The text object we put in the window. */ NXRect textFrame; /* The frame of the text object in our window */ self = [[Document allocFromZone:[self newZone]] init]; if (![NXApp loadNibSection:"Document.nib" owner:self withNames:NO fromZone:[self zone]]) { NXLogError ("Can't find Document.nib!"); [self free]; return nil; } docWin = [document window]; [[document docView] getFrame:&textFrame]; [docWin setDelegate:sender]; textObj = [[Text alloc] initFrame:&textFrame]; [[document setDocView:textObj] free]; [document setAutoresizeSubviews:YES]; [textObj setVertResizable:YES]; // Grow down as you type [textObj setHorizResizable:NO]; // But not sideways [textObj setAutosizing:NX_WIDTHSIZABLE]; // Size horizontally when resized [textObj setMonoFont:YES]; [textObj setOpaque:YES]; [textObj setMinSize:&textFrame.size]; NX_WIDTH(&textFrame) = NX_HEIGHT(&textFrame) = MAXSIZE; [textObj setMaxSize:&textFrame.size]; // Can grow [textObj setSel:0:0]; // Set the selection [textObj setDelegate:self]; [textObj sizeToFit]; [textObj setEditable:NO]; [self setDocument:document]; [self setWindow:docWin]; // make the new instance familiar with the window return self; } /* * The next two methods allow us to cache/reuse zones. */ static id zoneList = nil; + (NXZone *)newZone { if (!zoneList || ![zoneList count]) { return NXCreateZone(vm_page_size, vm_page_size, YES); } else { return (NXZone *)[zoneList removeLastObject]; } } + (void)reuseZone:(NXZone *)aZone { if (!zoneList) zoneList = [List new]; [zoneList addObject:(id)aZone]; } - free { NXZone *docZone = [self zone]; [super free]; [Document reuseZone:docZone]; return nil; } - scrollView { return document; } - setDocument:doc { document = doc; return self; } - setWindow:window { myWin = window; return self; } - window { return myWin; } - moveWindowTo:(NXCoord)x:(NXCoord)y { [myWin moveTo:x:y]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.