/* MiscInspectorManager.m created by todd on Sun 05-May-1996 */

#import <AppKit/AppKit.h>
#import "MiscInspectorController.h"
#import "MiscInspectorNibManager.h"
#import "MiscInspectorManager.h"

// Class variables (static)
static Class _inspectorNibManagerClass = nil;


@implementation MiscInspectorManager

/*" 
	MiscInspectorManager doesn't do much (yet) except provide
   access to it's inspector controller. Later on it'll control
   the switch views in the inspector window, etc.
"*/


//-------------------------------------------------------------------
// Class initialization
//-------------------------------------------------------------------

+ (void) initialize
{
	if (self == [MiscInspectorManager class]) {
		[self setInspectorNibManagerClass:[MiscInspectorNibManager class]];
	}
}


//-------------------------------------------------------------------
// Our default inspector manager
//-------------------------------------------------------------------

+ (MiscInspectorManager*) defaultInspectorManager
/*"
	Returns the current inspector manager if one exists. If it doesn't
	it tries to use the inspector nib manager returned by 
	#inspectorNibManagerClass to load and create one. We return nil 
	if for some reason we couldn't find nor load the inspector
	manager.
"*/
{
	MiscInspectorManager* ourInspectorManager;
	
	// Try to find an existing one.
	ourInspectorManager = 
		[MiscWindowManager windowManagerOfClass:[self class]];

	// If it doesn't exist then load it by loading our inspector nib 
	// manager.		
	if (ourInspectorManager == nil) {
		MiscInspectorNibManager* inspectorNibManager;
		
		// We use initWithBundle: instead of just init because
		// the inspector manager may reside in a different bundle
		// than the nib manager.
		inspectorNibManager = [[[self inspectorNibManagerClass] alloc]
            initWithBundle:[NSBundle bundleForClass:[self class]]];

		// Should probably check whether the object created is
		// a subclass of MiscInspectorManager I suppose.
		ourInspectorManager = [inspectorNibManager inspectorManager];
	}
	
	return ourInspectorManager;
}
	
//-------------------------------------------------------------------
// Our inspector nib manager class
//-------------------------------------------------------------------

+ (Class) inspectorNibManagerClass
/*"
	Returns the info nib manager class that will be loaded to create
	a new instance of ourself. Our #defaultInfoWindowManager uses this
	method to allocate and initialize our info window manager if it
	doesn't already exist.
"*/
{
	return _inspectorNibManagerClass;
}


+ (void) setInspectorNibManagerClass:(Class)newInspectorNibManagerClass
{
	_inspectorNibManagerClass = newInspectorNibManagerClass;
}


//-------------------------------------------------------------------
// Initialization/deallocation
//-------------------------------------------------------------------


- (id) init
/*"
	Sets us so we are not released when the inspector window is closed.
"*/
{
    BOOL error = ([super init] == nil);

    if (!error) {
        [self setReleasedWhenWindowClosed:NO];

        if (error) {
            [self autorelease];
        }
    }

    return error ? nil : self;
}


- (MiscInspectorController*) inspectorController
/*"
	Returns our inspector controller or nil if we don't have one (you should
	though).
"*/
{
    return (MiscInspectorController*)
        [self controllerOfClass:[MiscInspectorController class]];
}

@end
