This is EmInspectorManager.m in view mode; [Download] [Up]
//
// $Id: EmInspectorManager.m,v 1.7 1997/10/31 04:51:44 nygard Exp $
//
//
// This file is a part of Empire, a game of exploration and conquest.
// Copyright (C) 1996 Steve Nygard
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// You may contact the author by:
// e-mail: nygard@telusplanet.net
//
#import "Empire.h"
RCSID ("$Id: EmInspectorManager.m,v 1.7 1997/10/31 04:51:44 nygard Exp $");
#import "EmInspectorManager.h"
#import "EmInspector.h"
#import "ObjectExtensions.h"
#import "City.h"
static EmInspectorManager *_instance = nil;
//======================================================================
// The Inspector Manager provides an interface for inspecting game
// objects and keeping the inspectors up to date.
//======================================================================
@implementation EmInspectorManager
+ instance
{
if (_instance == nil)
{
_instance = [[EmInspectorManager alloc] init];
}
return _instance;
}
//----------------------------------------------------------------------
- init
{
NSString *nibFile;
BOOL loaded;
[super init];
subject = nil;
currentInspector = nil;
nibFile = @"InspectorPanel.nib";
loaded = [NSBundle loadNibNamed:nibFile owner:self];
if (loaded == NO)
{
NSLog (@"Could not load %@.", nibFile);
[super dealloc];
return nil;
}
return self;
}
//----------------------------------------------------------------------
- (void) dealloc
{
SNRelease (revertButton);
SNRelease (okButton);
[super dealloc];
}
//----------------------------------------------------------------------
- (void) awakeFromNib
{
[revertButton retain];
[okButton retain];
subject = nil;
player = p_neutral;
[revertButton removeFromSuperview];
[okButton removeFromSuperview];
currentInspectorView = defaultView;
}
//----------------------------------------------------------------------
- (void) showPanel
{
[inspectorPanel orderFront:self];
}
//----------------------------------------------------------------------
- (void) modeDidChange:sender
{
[inspectorPanel orderFront:self];
[self player:player selectThing:subject];
}
//----------------------------------------------------------------------
- (void) player:(Player)p selectThing:anObject
{
int mode;
NSString *inspectorClassName = nil;
EmInspector *inspector;
NSView *inspectorView;
NSString *titleString;
Class inspectorClass;
if (anObject != subject && currentInspector != nil)
{
[currentInspector willStopInspecting];
}
subject = anObject;
player = p;
if (subject != nil)
titleString = [NSString stringWithFormat:@"%@ Inspector", NSStringFromClass ([subject class])];
else
titleString = @"No Selection";
[inspectorPanel setTitle:titleString];
mode = [modePopup indexOfSelectedItem];
//NSLog (@"mode: %d, subject: %@, anObject: %@", mode, subject, anObject);
NSAssert (mode >= 0 && mode <= 1, @"Invalid inspector mode.");
if (anObject == nil)
{
switch (mode)
{
case 0:
inspectorClassName = @"NoAttributesInspector";
break;
case 1:
inspectorClassName = @"NoUnitsInspector";
break;
}
}
else
{
switch (mode)
{
case 0:
inspectorClassName = [anObject attributesInspectorClassName];
break;
case 1:
inspectorClassName = [anObject unitsInspectorClassName];
break;
}
}
inspectorClass = NSClassFromString (inspectorClassName);
inspector = [inspectorClass instance];
[inspector setSubject:subject];
inspectorView = [inspector inspectorView];
NSAssert (inspectorView != nil, @"Inspector view was nil!");
//NSLog (@"Replacing %@ with %@", currentInspectorView, inspectorView);
[[inspectorPanel contentView] replaceSubview:currentInspectorView with:inspectorView];
currentInspector = inspector;
currentInspectorView = inspectorView;
if ([inspector wantsButtons])
{
[[inspectorPanel contentView] addSubview:revertButton];
[[inspectorPanel contentView] addSubview:okButton];
}
else
{
[revertButton removeFromSuperview];
[okButton removeFromSuperview];
}
[inspector revert];
//[inspectorPanel display];
//[inspectorPanel setNeedsDisplay:YES];
}
//----------------------------------------------------------------------
- (Player) player
{
return player;
}
//----------------------------------------------------------------------
- (void) setOkButtonEnabled:(BOOL)flag
{
[okButton setEnabled:flag];
}
//----------------------------------------------------------------------
- (void) setRevertButtonEnabled:(BOOL)flag
{
[revertButton setEnabled:flag];
}
//----------------------------------------------------------------------
- (void) revert:sender
{
[inspectorPanel setDocumentEdited:NO];
[currentInspector revert];
}
//----------------------------------------------------------------------
- (void) ok:sender
{
[inspectorPanel setDocumentEdited:NO];
[currentInspector ok];
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.