ftp.nice.ch/pub/next/developer/resources/palettesfor2.xx/Plotter.s.tar.gz#/_Plotter/Plotter/PlotController.m

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

/* PlotController.m -- Implementation file for the PlotController class */

#import "PlotController.h"
#import "PlotView.h"
#import <appkit/Application.h>
#import <appkit/Listener.h>
#import <appkit/Pasteboard.h>
#import <appkit/Window.h>
#import <appkit/ScrollView.h>
#import <appkit/Text.h>
#import <stdlib.h> 
#import <string.h> 
#include <mach.h>

@implementation PlotController

- appDidInit:sender 
/*
 * Responds to a message that's sent just before the application
 * gets the first event.  PlotController initializes its inputText
 * instance variable.  It makes itself the inputText's delegate and
 * the services delegate for the application.  It also ensures that 
 * the application's single window becomes the key window.
 */
{
	inputText = [theScrollView docView];
	[inputText setDelegate:self];
	[[NXApp appListener] setServicesDelegate:self];
	[[thePlotView window] makeKeyAndOrderFront:self]; 
	return self;
}

- textDidGetKeys:theText isEmpty:(BOOL)flag
/*
 * Responds to a message the Text object sends when its text changes.
 * PlotController causes the PlotView to clear itself when the text changes.
 */
{
	return [thePlotView clear:self];
}

- requestPlot:(id)pasteboard userData:(const char *)userData error: (char **)msg
/*
 * Responds to a request from another application for the plotting service.
 * PlotController copies the data from the supplied pasteboard into the Text object
 * and then sends a plot: message to the PlotView.
 */
{
	char	*data, *scratch;
	int	 length;

	[NXApp activateSelf:NO]; 
	[pasteboard types];
	if ([pasteboard readType:NXAsciiPboardType data:&data length:&length]) {
		if(scratch = malloc(length+1)) {
			strncpy(scratch, data, length);
			scratch[length]='\0';
			[[inputText selectAll:self] replaceSel:scratch];
			free(scratch);
		}
		vm_deallocate(task_self(), (vm_address_t)data, (vm_size_t)length);
		[thePlotView plot:self];
	}
	return self;
}


- plotView:sender providePoints:(NXStream **)stream
/*
 * Responds to a message the PlotView sends requesting the points to plot.  
 * PlotController responds by giving the PlotView access to the Text 
 * object's stream.
 */
{
	*stream = [inputText stream];
	return self;
}

- plotView:sender pointDidChange:(NXPoint *)aPoint
/*
 * Responds to a message the PlotView sends notifying its delegate 
 * that a point has been added.  PlotController responds by adding the point to
 * the end of the list in the Text object.
 */
{
	int	endPos;
	char	buffer[100];

	sprintf(buffer, "%d, %d\n", (int)aPoint->x, (int)aPoint->y);
	endPos = [inputText byteLength];
	[inputText setSel:endPos :endPos];
	[inputText scrollSelToVisible];
	[inputText replaceSel:buffer];
	return self;
}

@end



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