This is HDrawApp.m in view mode; [Download] [Up]
/* HDrawApp By Paul Kunz May 1992
* Global object for application incorporating HippoDraw.
*
* Copyright (C) 1992 The Board of Trustees of
* The Leland Stanford Junior University. All Rights Reserved.
*/
#import "Draw.subproj/draw.h"
#import "HDrawApp.h"
const char HDrawApp_h_rcsid[] = HDRAWAPP_H_ID;
const char HDrawApp_m_rcsid[] = "$Id: HDrawApp.m,v 2.57.2.2 1994/02/08 20:28:36 rensing Exp $";
#import "HGraphicView.h"
#import "InspectAxes.h"
#import "InspectCut.h"
#import "InspectFunc.h"
#import "InspectPFunc.h"
#import "InspectPlot.h"
#import "InspectStat.h"
#import "InspectTuple.h"
#import "NewInspector.h"
#import "SpreadSheetMgr.h"
@implementation HDrawApp
/* Addition Methods */
+ allocFromZone:(NXZone *)aZone
{
NXZone *zone;
zone = NXCreateZone(vm_page_size, vm_page_size, YES);
NXNameZone(zone, "HippoDraw");
self = [super allocFromZone:zone];
return self;
}
+ alloc
{
return [self allocFromZone:NULL];
}
- init
{
Box *box;
Panel *inspectorPanel;
[super init];
NXNameObject( "HDrawInstance", self, NXApp );
drawInstance = [[DrawApp allocFromZone:[self zone]] init];
theNewInspector = [[NewInspector allocFromZone:[self zone]] init ];
inspectTuple = [[InspectTuple allocFromZone:[self zone]] initInspFor:self];
inspectPlot = [[InspectPlot allocFromZone:[self zone]] initInspFor:self];
inspectAxes = [[InspectAxes allocFromZone:[self zone]] initInspFor:self];
inspectStat = [[InspectStat allocFromZone:[self zone]] initInspFor:self];
inspectCut = [[InspectCut allocFromZone:[self zone]] initInspFor:self];
inspectFunc = [[InspectFunc allocFromZone:[self zone]] initInspFor:self];
inspectPFunc = [[InspectPFunc allocFromZone:[self zone]]
initInspFor:self];
/* Get the original Draw Inspector Panel and merge it into our Inspector */
inspectorPanel = [drawInstance inspectorPanel];
box = [drawInstance contentBox];
[theNewInspector addView:box
withName:"Graphics"
withSupervisor:[inspectorPanel delegate]];
[theNewInspector showPanelWithName:"Data Selection"];
[theNewInspector orderFrontPanel:self];
return self;
}
- appDidInit:(Application *)sender
{
[[NXApp appListener ] setServicesDelegate:self];
return [drawInstance appDidInit:sender];
}
- loadMinuit:sender
{
NXBundle *bundle;
id fitter;
char buffer[MAXPATHLEN+1];
if ( minuitLoaded ) return self;
bundle = [NXBundle bundleForClass:[self class]];
if ( [bundle getPath:buffer forResource:"Minuit" ofType:"bundle"] ) {
bundle = [[NXBundle alloc] initForDirectory:buffer];
fitter = [[[bundle classNamed:"Minuit"]
allocFromZone:[self zone]] init];
[inspectPFunc setFitter:fitter];
} else {
NXRunAlertPanel( "Error",
"Can not find Minuit bundle", "Ok", NULL, NULL );
}
minuitLoaded = YES;
return self;
}
- addToAvailFuncs:sender
{
return [inspectPFunc addToAvailFuncs:sender];
}
- (BOOL)validateCommand:(MenuCell *)menuCell
/*
* The only command DrawApp itself controls is saveAll:.
* Save All is enabled only if there are any documents open.
* Within HippoDraw, loadMinuit: needs also to be handled.
*/
{
SEL action = [menuCell action];
if (action == @selector(saveAll:)) {
return [drawInstance validateCommand:menuCell];
}
return YES;
}
- info:sender
{
NXBundle *bundle;
char buffer[MAXPATHLEN+1];
if (!infoPanel) {
NXZone *zone = NXCreateChildZone([self zone],
vm_page_size, vm_page_size, YES);
NXNameZone(zone, "HippoInfoPanel");
bundle = [NXBundle bundleForClass:[self class]];
if ( [bundle getPath:buffer forResource:"InfoPanel" ofType:"nib"] ) {
[NXApp loadNibFile:buffer owner:self
withNames:NO fromZone:zone];
}
NXMergeZone(zone);
}
[infoPanel orderFront:self];
return self;
}
- legal:sender
{
NXBundle *bundle;
char buffer[MAXPATHLEN+1];
if( ! legalPanel ){
NXZone *zone = NXCreateChildZone([self zone],
vm_page_size, vm_page_size, YES);
NXNameZone(zone, "LegalPanel");
bundle = [NXBundle bundleForClass:[self class]];
if ( [bundle getPath:buffer forResource:"Legal" ofType:"nib"] ) {
[NXApp loadNibFile:buffer owner:self
withNames:NO fromZone:zone];
}
NXMergeZone(zone);
}
[legalPanel makeKeyAndOrderFront:sender];
return self;
}
- cernPanel:sender
{
NXBundle *bundle;
char buffer[MAXPATHLEN+1];
if( ! cernPanel ){
NXZone *zone = NXCreateChildZone([self zone],
vm_page_size, vm_page_size, YES);
NXNameZone(zone, "cernPanel");
bundle = [NXBundle bundleForClass:[self class]];
if ( [bundle getPath:buffer forResource:"cern" ofType:"nib"] ) {
[NXApp loadNibFile:buffer owner:self
withNames:NO fromZone:zone];
}
NXMergeZone(zone);
}
[cernPanel makeKeyAndOrderFront:sender];
return self;
}
- open:sender
{
return [drawInstance open:sender];
}
- setCurrentGraphic:sender
{
return [drawInstance setCurrentGraphic:sender];
}
- terminate:sender
{
return [drawInstance terminate:sender];
}
- newInspector
{
return theNewInspector;
}
- orderFrontTools:sender
{
[drawInstance orderFrontTools:sender];
return self;
}
- orderFrontTupleInsp:sender
{
theNewInspector = [ self newInspector];
[theNewInspector orderFrontPanel:self];
return self;
}
- addTuple:(ntuple) nt
{
return [inspectTuple addTuple:nt];
}
- addPlotOfType:(graphtype_t) type
{
[[[drawInstance currentDocument] view] addPlotOfType:type];
return self;
}
- (Window *)documentWindow
{
return [[[drawInstance currentDocument] view] window];
}
/* Public methods internal to Hippo.bproj */
- currentInspector
{
return [theNewInspector currentInspector];
}
- inspectAxes
{
return inspectAxes;
}
- inspectCut
{
return inspectCut;
}
- inspectFunc
{
return inspectFunc;
}
- inspectPFunc
{
return inspectPFunc;
}
- inspectPlot
{
return inspectPlot;
}
- inspectTuple
{
return inspectTuple;
}
- replaceNtuple:(ntuple)oldnt with:(ntuple)newnt andFree:(BOOL)flag
{
[inspectTuple replaceNtuple:oldnt with:newnt andFree:flag];
return self;
}
- openTuple:sender
{
[inspectTuple openTuple:sender];
return self;
}
- openTupleAsText:sender
{
[inspectTuple openTupleAsText:sender];
return self;
}
- openTuple:pasteBoard userData:(const char *)args error:(char **)errorMsg
{
DrawDocument *drawdoc;
drawdoc = [self newDocument];
[[drawdoc view] openTuple:pasteBoard userData:args
error:errorMsg];
return self;
}
- closeTuple:sender
{
[inspectTuple closeTuple:sender];
return self;
}
- newDocument
{
id drawdoc, view;
drawdoc = [DrawDocument new:[HGraphicView class]];
view = [drawdoc view];
[view setGridSpacing:10];
[view setGridVisible:YES];
[view setGridEnabled:YES];
[drawdoc clean: self]; /* new documents are NOT dirty */
return drawdoc;
}
- showTupleAsTable:sender
{
if ( !ssmanager) {
ssmanager = [SpreadSheetMgr new:self];
}
if ( ![inspectTuple currentTuple] ) {
NXRunAlertPanel("Alert", "No opened n-tuple",
"OK", NULL, NULL );
return self;
}
[ssmanager tupleToSpreadSheet:[inspectTuple currentTuple]];
[[ssmanager window] makeKeyAndOrderFront:self];
return self;
}
- new:sender
{
DrawDocument *drawdoc;
drawdoc = [self newDocument];
return self;
}
- (int)app:sender openFile:(const char *)path type:(const char *)type
/*
* This method is performed whenever a user double-clicks on an icon
* in the Workspace Manager representing a Draw program document.
*/
{
BOOL flag;
flag = [drawInstance app:sender openFile:path type:type];
if ( flag ) {
return YES;
}
if (type && !strcmp(type, "hippo")) {
flag = [ self appOpenHippoFile: path];
return flag;
}
return NO;
}
- app:sender powerOffIn:(int)ms andSave:(int)andSave
{
return [drawInstance app:sender powerOffIn:ms andSave:andSave];
}
- (BOOL)menuItemUpdate:(MenuCell *)menuCell
{
return [drawInstance menuItemUpdate:menuCell];
}
- (int)appOpenHippoFile:(const char *)path
{
DrawDocument *currentDoc;
int irc;
currentDoc = [drawInstance currentDocument];
if ( !currentDoc ) {
currentDoc = [self newDocument];
}
irc = [inspectTuple openTupleFile:path by:YES];
if ( irc == HD_REPLACE ) {
[inspectTuple bindDisplays];
}
[[currentDoc view] reDrawPlot];
[drawInstance setHaveOpenedDocument:YES];
return YES;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.