This is Scroll.m in view mode; [Download] [Up]
#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];
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.