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.