#import <appkit/appkit.h>

// minimal program to demonstrate
// a text object and scrolling

main()
{
	id NXApp = [Application new];
	id theWindow;
	id theMenu;
	id theText; 
	id theScrollView;
	NXRect theRect;
	NXSize theSize;
	id otherWindow, otherText;
	NXSize otherSize;

	// create the window
	NXSetRect(&theRect, 200.0, 300.0, 350.0, 150.0);
	theWindow = [ [Window alloc]
		initContent:&theRect
		style: NX_TITLEDSTYLE
		backing:NX_BUFFERED
		buttonMask:NX_MINIATURIZEBUTTONMASK
		defer:YES];
	[theWindow setBackgroundGray:NX_WHITE];

	// create a scrollview
	NXSetRect(&theRect, 0.0, 0.0, 350.0, 150.0);
	theScrollView = [ [ScrollView alloc]
		initFrame:&theRect];
	[theScrollView
		setVertScrollerRequired:YES];
	[theScrollView
		setHorizScrollerRequired:NO];
	[ [theWindow contentView]
		addSubview :theScrollView];
	
	// get the size of the content view
	[theScrollView getContentSize:&theSize];

	// create another text object
	NXSetRect(&theRect, 0.0, 0.0,
		theSize.width, theSize.height);
	theText = [ [Text alloc] initFrame:&theRect
		text:"Text in scrollview"
		alignment:NX_LEFTALIGNED];
	[theText setOpaque:YES];
	// notify superview when frame
	// rectangle changes -- allows scrollview
	// to update the scrollers
	[theText notifyAncestorWhenFrameChanged:YES];
	[theText setVertResizable:YES];
	[theText setHorizResizable:NO];
	// select all the text

	// create min and max size of text
	theSize.width = 0.0;
	[theText setMinSize:&theSize];
	theSize.height = 1000000;
	[theText setMaxSize:&theSize];

	// set the text as docview of scrollview
	[theScrollView setDocView:theText];

	// create other window
	NXSetRect(&theRect, 100.0, 100.0, 350.0, 150.0);
	otherWindow = [ [Window alloc]
		initContent:&theRect
		style: NX_TITLEDSTYLE
		backing:NX_BUFFERED
		buttonMask:NX_MINIATURIZEBUTTONMASK
		defer:YES];
	[theWindow setBackgroundGray:NX_WHITE];

	// create other text
	NXSetRect(&theRect, 0.0, 0.0, 350.0, 150.0);
	otherText = [ [Text alloc]
		initFrame:&theRect
		text:"Text without scrollview"
		alignment:NX_LEFTALIGNED];
	[otherText setOpaque:YES];
	[ [otherWindow contentView]
		addSubview:otherText];

	// create min and max size of text
	otherSize.width = 0.0;
	[otherText setMinSize:&otherSize];
	otherSize.height = 1000000;
	[theText setMaxSize:&otherSize];

	// create the menu
	theMenu = [ [Menu alloc]
		initTitle: [NXApp appName] ];
	[theMenu addItem:"Quit"
		action:@selector(terminate:)
		keyEquivalent:'q'];
	[theMenu sizeToFit];
	[NXApp setMainMenu:theMenu];

	// display both windows
	[theWindow makeKeyAndOrderFront:nil];
	// set the selection in the text
	[theText setSel:0 :0];
	[otherWindow orderFront:nil];

	// Enter event loop
	[NXApp run];
}
