This is RTFDChat.m in view mode; [Download] [Up]
#import "RTFDChat.h"
#import "ServerText.h"
#import "ClientText.h"
#import "ClientScroller.h"
#import <appkit/appkit.h>
#import <sys/param.h>
#define XOFFSET 10.0 // Offset of subsequent windows
#define YOFFSET -20.0
#define MAXSIZE 1.0e38 // Maximum size of a text object
@implementation RTFDChat
+ newFromNib
{
RTFDChat *instance = [[RTFDChat alloc] init];
NXBundle *myBundle = [NXBundle bundleForClass:[self class]];
char nibPath[MAXPATHLEN+1];
[myBundle getPath:nibPath forResource:"RTFDChat" ofType:"nib"];
if ([NXApp loadNibFile:nibPath owner:instance withNames:NO])
{
return instance;
}
[instance free];
return nil;
}
- setup
{
NXSize textSize = {MAXSIZE, MAXSIZE};
Window *talkWin = [splitView window];
NXRect winFrame, winLoc;
[[document superview] setAutoresizeSubviews:YES];
[(ServerText *)document setVertResizable:YES];
[(ServerText *)document setHorizResizable:NO];
[(ServerText *)document setGraphicsImportEnabled:YES];
[(ServerText *)document setMonoFont:NO];
[(ServerText *)document setOpaque:YES];
[(ServerText *)document setAutosizing:NX_WIDTHSIZABLE];
[(ServerText *)document setMaxSize:&textSize];
[splitView setDelegate:self];
[splitView addSubview:scrollText :NX_BELOW relativeTo:nil];
if ([NXApp mainWindow])
{
[[NXApp mainWindow] getFrame:&winFrame];
[[talkWin class] getContentRect:&winLoc
forFrameRect:&winFrame style:[talkWin style]];
[talkWin moveTo:NX_X(&winLoc) + XOFFSET :NX_Y(&winLoc) + YOFFSET];
}
[talkWin makeKeyAndOrderFront:self];
[talkWin setMiniwindowIcon:"NTKwindow"];
return self;
}
- (BOOL)clientIsDying:sender
{
[[[sender superview] superview] removeFromSuperview];
[splitView display];
[self removeClientUName:[[[sender superview] superview] clientUName]
forCode:[[[sender superview] superview] connectionCode]];
[[document window] setDocEdited:NO];
return YES;
}
- (View *)createClientViewWith:(View *)aDocument
{
NXRect frame;
ClientScroller *newScroller;
if (![aDocument respondsTo:@selector(addClientText:)])
return nil;
[splitView getFrame:&frame];
newScroller = [[ClientScroller alloc] initFrame:&frame];
[(ServerText *)aDocument addClientText:[newScroller docView]];
// [[newScroller docView] sizeToFit];
return newScroller;
}
- (View *)addClientViewWith:(View *)aDocument
from:(const char *)aClientUName
forCode:(const char *)aCode
{
ClientScroller *newScroller;
char *key = [self keyFor:aClientUName:aCode];
newScroller = (ClientScroller *)[self createClientViewWith:aDocument];
[newScroller setClientUName:aClientUName];
[splitView addSubview:newScroller :NX_BELOW relativeTo:nil];
[splitView display];
strcpy(connectionUName, aClientUName);
[[splitView window] setTitle:topic];
[[splitView window] setDocEdited:YES];
[newScroller setConnectionCode:aCode];
[clientTable insertKey:key value:newScroller];
// free(key); we should really do that! Leaks will appear.
return newScroller;
}
@end
@implementation RTFDChat(NXSplitViewDelegate)
- splitView:sender
getMinY:(NXCoord *)minY maxY:(NXCoord *)maxY
ofSubviewAt:(int)offset
{
*minY += 80.0;
*maxY -= 80.0;
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.