ftp.nice.ch/peanuts/GeneralData/Documents/books/AlexNeXTSTEPSource.tar.gz#/NSProgramming/Chapter6_Events/ControlDemo/ControlDemo.m

This is ControlDemo.m in view mode; [Download] [Up]

#import <appkit/appkit.h>

// a minimal program to demonstrate how
// to add controls to a window

main()
{
	// create an application object
	// to establish connection to
	// Window Server
	id NXApp = [Application new];
	id theWindow;
	id theMenu;
	id theButton;
	id theSlider;
	id theTextField;
	id theForm;
	id targetWindow;
	NXRect theRect;

	// create a window that's at 125, 125
	// and is 200 by 300 pixels
	NXSetRect(&theRect, 125, 125, 200, 300);
	theWindow = [ [Window alloc]
		initContent:&theRect
		style: NX_TITLEDSTYLE
		backing:NX_BUFFERED
		buttonMask:NX_MINIATURIZEBUTTONMASK
		defer:YES];

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

	// resize menu to accomodate menu option
	[theMenu sizeToFit];
	[NXApp setMainMenu:theMenu];

	// create a button that's 80 by 20
	NXSetRect(&theRect, 0, 0, 80, 20);
	theButton = [ [Button alloc]
		initFrame:&theRect];
	// set the title for the button
	[theButton setTitle:"Press Here"];
	// since the button is a view, we need
	// to install it as the subview of the
	// window's contentview or else it
	// won't draw
	[ [theWindow contentView]
		addSubview: theButton];

	// create the target window for the button
	targetWindow = [ [Window alloc]
		initContent:NULL
		style: NX_RESIZEBARSTYLE
		backing:NX_BUFFERED
		buttonMask:NX_MINIATURIZEBUTTONMASK
		defer:YES];
	// make  window target of button
	[theButton setTarget:targetWindow];
	// when pressed, button sends
	// makeKeyAndOrderFront: message
	// to the window 
	[theButton setAction:@selector
		(makeKeyAndOrderFront:)];

	// create a horizontal slider 100 x 15
	NXSetRect(&theRect, 0, 100, 100, 15);
	theSlider = [ [Slider alloc]
		initFrame:&theRect];
	// set the min value to 0.0
	[theSlider setMinValue:0.0];
	// set the max value to 10.0
	[theSlider setMaxValue:10.0];
	[ [theWindow contentView]
		addSubview:theSlider];

	// create a textfield that's 75 by 20
	NXSetRect(&theRect, 0, 150, 75, 20);
	theTextField = [ [TextField alloc]
		initFrame:&theRect];
	// make the text editable
	[theTextField setEditable:YES];
	[ [theWindow contentView]
		addSubview:theTextField];

	// make the textfield the target of
	// the slider and vice versa
	[theSlider setMinValue:0.0];
	[theSlider setMaxValue:10.0];
	[theSlider setTarget:theTextField];
	[theSlider setAction:
		@selector(takeFloatValueFrom:)];
	[theTextField setTarget:theSlider];
	[theTextField setAction:
		@selector(takeFloatValueFrom:)];

	// create a form that's 150 by 100
	NXSetRect(&theRect, 0, 200, 150, 100);
	theForm = [ [Form alloc]
		initFrame:&theRect];
	// add three entries to the form
	[theForm addEntry: "Name"];
	[theForm addEntry: "Address"];
	[theForm addEntry: "Phone"];
	// set the size of the form
	[theForm sizeToFit];
	[ [theWindow contentView]
		addSubview:theForm];

	[theForm setTarget:theButton];
	// button should act as though
	// it had been cliked
	[theForm setAction:
		@selector(performClick:)];

	// send the window to the front
	// and display it
	[theWindow makeKeyAndOrderFront:nil];

	// go into event loop to wait for events
	[NXApp run];
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.