
// RootWindow.m
// Subclass of Window to work in conjunction with the ReplacementWindow
// class in creating poor-person's hypercard-type applications.
// 
// Created by Ali Ozer, Nov 21, 1989

#import "RootWindow.h"

#import <libc.h>
#import <appkit/Application.h>
#import <appkit/View.h>

@implementation RootWindow
    
- makeContentView:view
{
	if (originalContentView == nil) {
		[NXApp setAutoupdate:YES];
		originalContentView = [self contentView];
		originalTitle = malloc(strlen([self title])+1);
		strcpy (originalTitle, [self title]);
	}
	newContentView = view;
	return self;
}

- replace:sender
{
	newContentView = originalContentView;
	return self;
}
    
- update
{
	if (newContentView) {
		id newLastWindow = [newContentView window];
		
		if (!newLastWindow) {			// Go back to original
			[self setTitle:originalTitle];
		} else {						// Else replace with new
			[newContentView removeFromSuperview];
			[self setTitle:[newLastWindow title]];
		}
		
		if (lastWindow) {				// Restore previous window's content		
    		[lastWindow setContentView:[self setContentView:newContentView]];
		} else {
			[self setContentView:newContentView];
		}
		lastWindow = newLastWindow;
		newContentView = nil;
		[self display];
	}
	
	return [super update];
}

- free
{
	if (originalTitle) free (originalTitle);
	return [super free];
}

- write:(NXTypedStream *)stream
{
	[super write:stream];
	NXWriteObjectReference(stream, lastWindow);
	NXWriteObjectReference(stream, previousWindow);
	NXWriteObjectReference(stream, newContentView);
	NXWriteObjectReference(stream, originalContentView);
	NXWriteType(stream, "*", &originalTitle);
	return self;
}

- read:(NXTypedStream *)stream
{
	[super read:stream];
	lastWindow = NXReadObject(stream);
	previousWindow = NXReadObject(stream);
	newContentView = NXReadObject(stream);
	originalContentView =  NXReadObject(stream);
	NXReadType(stream,"*",&originalTitle);
	return self;
}

@end

