//*****************************************************************************
//
//	PanelController.h.  
//
//		Preferences logic.
//
//			by	Felipe A. Rodriguez		
//
//	This code is supplied "as is" the author makes no warranty as to its 
//	suitability for any purpose.  This code is free and may be distributed 
//	in accordance with the terms of the:
//		
//			GNU GENERAL PUBLIC LICENSE
//			Version 2, June 1991
//			copyright (C) 1989, 1991 Free Software Foundation, Inc.
// 			675 Mass Ave, Cambridge, MA 02139, USA
//
//*****************************************************************************

#import "SelectPanelController.h"
#import "../Coordinator.h"
#import "../DLDelegate.h"


 

@implementation SelectPanelController

//*****************************************************************************
//
//		sent to us after nib objects are unarchived and init'd 
//
//*****************************************************************************
 
- awakeFromNib
{
	[[[[[[[[DLBrowser setTitled:NO] 		// create and configure nxbrowser
					setHorizontalScrollButtonsEnabled:NO]
					setDelegate:[[NXApp delegate] docLDelegate]]
					setTarget:[[NXApp delegate] docLDelegate]]
					setAction:@selector(browserHit:)]
					setDoubleAction:@selector(browserDoubleClick:)]
					setMinColumnWidth:200]
					setMaxVisibleColumns:1];

    [DLPathField setStringValue:NXGetDefaultValue([NXApp appName], LIBPATH)];
	[self initDList];										// load browser

    return self;
}
//*****************************************************************************
//
// 		initialize the hotlist and reinit if path to it is changed 
//
//*****************************************************************************

- initDList 
{
char *sC;
id DList = [[DLBrowser delegate] DList];

				//	cell selection in hotList should persist between sessions
				//	so recall previous selection
	sC = NXCopyStringBuffer(NXGetDefaultValue([NXApp appName],SELCELL));		
	selCell = atoi(sC);
	free(sC);
	[DLBrowser loadColumnZero];		// NXBrowser s/load cols from its delegate
	if([DList count] > 0)			// if hotList path is valid
		{
		mat = [DLBrowser matrixInColumn:0];		
		[DLBrowser useScrollButtons:NO];		
		if(!(selCell < [DList count]))
			selCell = 0;
		if(selCell < [DList count])
			{
			[mat selectCellAt:selCell :0];
			[mat scrollCellToVisible:selCell :0];
			}
		}													

	return self;
}
//*****************************************************************************
//
//		document directory path changed
//
//*****************************************************************************
 
- setDListPath:sender
{				// write an entry to defaults database
	if(!NXWriteDefault([NXApp appName], LIBPATH, [sender stringValue]))
		[[NXApp delegate] showAlert:"ddbWriteError"];
	[self resetDLBrowser];

    return self; 
}
//*****************************************************************************
//
//		select a document List path
//
//*****************************************************************************
 
- selectDListPath:sender
{				
id	theOpenPanel;   
const char *filter[2] = {"Gate", NULL};		// filter for Gate doc path's

	theOpenPanel = [OpenPanel new];
	[theOpenPanel setTitle:"Documents"];
	if(NX_OKTAG == [theOpenPanel runModalForDirectory:
						NXGetDefaultValue([NXApp appName], LIBPATH) file:NULL 	
						types:filter])
		{
		if(!NXWriteDefault([NXApp appName], LIBPATH, [theOpenPanel directory]))
			[[NXApp delegate] showAlert:"ddbWriteError"];
		[DLPathField setStringValue:[theOpenPanel directory]];
		[self resetDLBrowser];
		}

    return self;
}
//*****************************************************************************
//
//		reset preferences document List browswer
//
//*****************************************************************************
 
- resetDLBrowser
{						
	[DLBrowser loadColumnZero];		// NXBrowser s/load cols from its delegate
	[[[NXApp delegate] docLDelegate] initDList];
	mat = [DLBrowser matrixInColumn:0];
	[mat selectCellAt:[[[NXApp delegate] docLDelegate] hLSelectedCell]:0];

    return self;
}
//*****************************************************************************
//
//		returns the inspector panel we control
//
//*****************************************************************************

- inspectorPanel
{
    return 	[DLPathField window];
}

@end
