This is Controller.m in view mode; [Download] [Up]
#import "Controller.h" #import "Ruler.h" #import "RuledScrollView.h" #import "CrosshairView.h" #import "DragPSView.h" // DRAGGEDFILENAME #import <appkit/Application.h> // NXApp #import <appkit/Matrix.h> #import <appkit/MenuCell.h> #import <appkit/NXImage.h> #import <appkit/publicWraps.h> // NXBeep @implementation Controller - appDidInit:sender { xSize = 700.0; ySize = 300.0; [self setupTileView]; [[ruledScrollView window] orderFront:NULL]; return self; } - setupTileView /* called by appDidInit */ { NXRect viewRect, rulerViewRect; id ruler; [ruledScrollView setVertScrollerRequired:YES]; [ruledScrollView setHorizScrollerRequired:YES]; [ruledScrollView setBorderType:NX_BEZEL]; NXSetRect(&viewRect, 0, 0, xSize, ySize); // create the docView and place it within its scrollView crosshairView = [[CrosshairView alloc] initFrame:&viewRect]; [ruledScrollView setDocView:crosshairView]; // here we retrieve the topRuler (added by setTopRuler) // so that we can set some of its attributes ruler = [ruledScrollView topRuler]; // set spacing for inches on top ruler (on printout - appears smaller on-screen) [[ruler setScaleSpacing:72] setInverted:YES]; [ruler setDraggableRuler:YES]; // Create a Ruler for the bottom - this is how we could add a ruler // programmatically. The height is set to 20 points // (its width will be set to main view's size) NXSetRect(&rulerViewRect, (NXCoord) 0, (NXCoord) 0, (NXCoord) 0, (NXCoord) 20); ruler = [[Ruler alloc] initFrame:&rulerViewRect]; [ruledScrollView addRulerView:ruler toEdge:BOTTOMEDGE]; // retrieve the Ruler for the leftside (added by setLeftRuler) // set width to 25 points (its height will be set to main view's size) ruler = [ruledScrollView leftRuler]; [[ruler setAlignment:NX_LEFTALIGNED] setOrientation:VERTICAL]; [[[ruler setBackgroundGray:NX_DKGRAY] setUnits:"V"] setBorder:5]; [ruler setDraggableRuler:YES]; // IMPORTANT: We must send a setSize message every // time the size of the main view is changed [ruledScrollView setSize]; return self; } - toggleRulers:sender { if ([ruledScrollView isRulerVisible:LEFTEDGE]) { [ruledScrollView hideRuler:LEFTEDGE]; [ruledScrollView hideRuler:RIGHTEDGE]; [ruledScrollView hideRuler:TOPEDGE]; [ruledScrollView hideRuler:BOTTOMEDGE]; [ruledScrollView setSize]; [rulerToggleMenuCell setTitleNoCopy:(const char *)"Turn Rulers On"]; } else { [ruledScrollView showRuler:LEFTEDGE]; [ruledScrollView showRuler:RIGHTEDGE]; [ruledScrollView showRuler:TOPEDGE]; [ruledScrollView showRuler:BOTTOMEDGE]; [ruledScrollView setSize]; [rulerToggleMenuCell setTitleNoCopy:(const char *)"Turn Rulers Off"]; } return self; } - setSize:sender { [ruledScrollView setSizeIfNeeded]; return self; } - cleanAndTerminate:sender { // remove the temp dragging file before terminating remove((const char *)DRAGGEDFILENAME); [NXApp terminate:self]; return self; } - xZoomIn:sender; { if (xSize <1000) { NXRect viewRect; xSize += 100.0; NXSetRect(&viewRect, 0, 0, xSize, ySize); [[ruledScrollView docView] setFrame:&viewRect]; [ruledScrollView setSize]; } else NXBeep(); return self; } - xZoomOut:sender; { if (xSize > 100) { NXRect viewRect; xSize -= 100.0; NXSetRect(&viewRect, 0, 0, xSize, ySize); [[ruledScrollView docView] setFrame:&viewRect]; [ruledScrollView setSize]; } else NXBeep(); return self; } - yZoomIn:sender; { if (ySize < 1000) { NXRect viewRect; ySize += 100.0; NXSetRect(&viewRect, 0, 0, xSize, ySize); [[ruledScrollView docView] setFrame:&viewRect]; [ruledScrollView setSize]; } else NXBeep(); return self; } - yZoomOut:sender; { if (ySize > 100) { NXRect viewRect; ySize -= 100.0; NXSetRect(&viewRect, 0, 0, xSize, ySize); [[ruledScrollView docView] setFrame:&viewRect]; [ruledScrollView setSize]; } else NXBeep(); return self; } - zoomSet:sender { NXRect viewRect; xSize = ySize = [[sender selectedCell] tag]; ySize -= 100.0; NXSetRect(&viewRect, 0, 0, xSize, ySize); [[ruledScrollView docView] setFrame:&viewRect]; [ruledScrollView setSize]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.