/***************************************************************************
 * CLASS:		MiscDVInspector (MiscDragViewInspector)
 * Copyright (C) 1995 Robert Todd Thomas
 * Use is governed by the MiscKit license
 * 
 *	See the header file for more info about this class.
 ***************************************************************************/
 
#import "MiscViews.subproj/MiscIconWell.h"
#import "MiscDVInspector.h"


@implementation MiscDVInspector

// Load the Inspector.

- init
{
    char buf[MAXPATHLEN + 1];
    id bundle;
    
    [super init];
    
    bundle = [NXBundle bundleForClass:[MiscDragView class]];

    [bundle getPath: buf forResource: "MiscDVInspector" ofType:"nib"];

    [NXApp loadNibFile:buf owner:self withNames:NO fromZone:[self zone]];
		   
    return self;
}



// This is called to set the options located on the inspector to
// be the same as the current selected object.

- revert: sender
{	
	// set all the radio buttons for dragging options
	
	[ [optionMatrix cellAt: 0 :0] setState:[object allowSourceDragging] ];	
   	[ [optionMatrix cellAt: 1 :0] setState:[object allowDestinationDragging] ];	
	[optionMatrix display];	// get matrix to redisplay values

	// set icon stuff

	[ [iconMatrix cellAt: 1 :0] setEnabled:[object allowDestinationDragging] ];

	[ [iconMatrix cellAt: 0 :0] setStringValue:[object imageName] ];
	[ [iconMatrix cellAt: 1 :0] setStringValue:[object acceptingImageName] ];

	// set the border type
	
	[borderMatrix selectCellWithTag: [object borderType] ];
	[borderMatrix display];
		
    return [super revert:sender];
}



// This method is called when one of the radio buttons in the inspector
// is clicked. The object is then notified of the change so that
// it can change it's state.

- optionsChanged: sender
{
  BOOL  state = [ [sender selectedCell] state];
  
  	switch ([ [sender selectedCell] tag])
    {
	  case 0:					
	  	[object setAllowSourceDragging: state];
		break;
	  case 1: 					
	  	[object setAllowDestinationDragging: state];
		break;
	 }
	[window disableFlushWindow];
	[self revert: sender];
	[window reenableFlushWindow];
	return [super ok: sender];
}

- iconsChanged: sender
{	const char *str;
	if(str=[[iconMatrix cellAt: 0 :0] stringValue])
		[object setImageByName:str];
	if(str=[[iconMatrix cellAt: 1 :0] stringValue])
		[object setAcceptingImageByName:str];
	return [super ok: sender];
}

- borderChanged: sender
{	[object setBorderType: [ [borderMatrix selectedCell] tag] ];
	[object display];
	
	return [super ok: sender];
}



// Determines whether the inspector panel will have an "OK" and
// "Revert" button. 
- (BOOL)wantsButtons
{	return NO;
}

@end


@implementation MiscDragView (IBInspector)

- (const char *)getInspectorClassName
{
	return "MiscDVInspector";
}

@end

@implementation MiscIconWell (IBInspector)

- (const char *)getInspectorClassName
{	return "MiscIWInspector";
}
@end

@implementation MiscIWInspector

// Load the Inspector.

- init
{
    char buf[MAXPATHLEN + 1];
    id bundle;
    
    [super init];
    
    bundle = [NXBundle bundleForClass:[MiscDragView class]];

    [bundle getPath: buf forResource: "MiscIWInspector" ofType:"nib"];

    [NXApp loadNibFile:buf owner:self withNames:NO fromZone:[self zone]];
		   
    return self;
}



// This is called to set the options located on the inspector to
// be the same as the current selected object.

- revert: sender
{	
	// set all the check buttons for dragging options
	
	[ [optionMatrix cellAt: 0 :0] setState:[object allowMFDragging] ];	
   	[ [optionMatrix cellAt: 1 :0] setState:[object allowDoubleClickLaunch] ];	
	[optionMatrix display];	// get matrix to redisplay values

	// string stuff ("icon" misleading)

	[ [iconMatrix cellAt: 0 :0] setStringValue:[object fileTypes] ];
	[ [iconMatrix cellAt: 1 :0] setStringValue:[object defaultName] ];

	// set the border type
	
	[borderMatrix selectCellWithTag: [object borderType] ];
	[borderMatrix display];
		
    return [super revert:sender];
}



// This method is called when one of the radio buttons in the inspector
// is clicked. The object is then notified of the change so that
// it can change it's state.

- optionsChanged: sender
{
  BOOL  state = [ [sender selectedCell] state];
  
  	switch ([ [sender selectedCell] tag])
    {
	  case 0:					
	  	[(MiscIconWell*)object setAllowMFDragging: state];
		break;
	  case 1: 					
	  	[(MiscIconWell*)object setAllowDoubleClickLaunch: state];
		break;
	 }
	[window disableFlushWindow];
	[self revert: sender];
	[window reenableFlushWindow];
	return [super ok: sender];
}

- iconsChanged: sender
{	const char *str;
	if(str=[[iconMatrix cellAt: 0 :0] stringValue])
		[object setFileTypes:str];
	if(str=[[iconMatrix cellAt: 1 :0] stringValue])
		[(MiscIconWell*)object setDefaultName:str];
	return [super ok: sender];
}

- borderChanged: sender
{	[object setBorderType: [ [borderMatrix selectedCell] tag] ];
	[object display];
	
	return [super ok: sender];
}



// Determines whether the inspector panel will have an "OK" and
// "Revert" button. 
- (BOOL)wantsButtons
{	return NO;
}

@end

