// InformerInspector.m
//
// History :
//		10.02.1992 : created by Max Tardiveau


#import "InformerInspector.h"

@implementation InformerInspector


////////////////////////////////////////////////////////////////
// Override this method for inspectors that also list items.

- fillList:theMatrix fromCell:theCell
{
return self;
}

////////////////////////////////////////////////////////////////
// This method should rarely need to be overridden. It just loads
// the .nib file "Main.nib" and returns the view containing the
// inspector.

- loadEverythingFrom:(char *)theDir
{
char	tmpchar[512];

sprintf(tmpchar, "%s/Main.nib", theDir);
if ([NXApp loadNibFile:tmpchar owner:self withNames:NO] == NIL)
	return NIL;

return MyView;
}

////////////////////////////////////////////////////////////////
// You should always override this method : put all the update
// stuff in there.

- doUpdateForCell:theCell
{
return self;
}

////////////////////////////////////////////////////////////////
//

- mainView
{
return MyView;
}

////////////////////////////////////////////////////////////////
//

- fillSubList:theMatrix ofCell:theCell pointer:(void *)thePointer
{
[self fillSubList:theMatrix ofCell:theCell pointer:thePointer secPointer:NULL 
																string:NULL];

return self;
}

////////////////////////////////////////////////////////////////
//

- fillSubList:theMatrix ofCell:theCell pointer:(void *)thePointer
													string:(char *)theString
{
[self fillSubList:theMatrix ofCell:theCell pointer:thePointer secPointer:NULL 
															string:theString];

return self;
}

////////////////////////////////////////////////////////////////
//

- fillSubList:theMatrix ofCell:theCell pointer:(void *)thePointer
						secPointer:(void *)secPointer string:(char *)theString
{
struct stat 		myStat;
DIR					*myDirStream;
struct direct 		*myDir;
char				tmpName[256];
char				tmpChar[512];
char				*tmpcharptr;
id					newCell;
int					tmpInt;


myDirStream = opendir([theCell getDir]);
if (myDirStream == NIL)
	{
	fprintf(stderr, "InformerInspector : could not find directory.\n");
	return self;
	}
for (myDir = readdir(myDirStream); myDir != NULL;
								myDir = readdir(myDirStream))
	{
	if (myDir->d_name[0] == '.')		// Don't display . dirs
		continue;
	
	tmpInt = strlen(myDir->d_name);		// Don't display .nib dirs
	if ( ! strcmp(&myDir->d_name[tmpInt - 4], ".nib"))
		continue;
	
	sprintf(tmpChar, "%s/%s", [theCell getDir], myDir->d_name);
	stat(tmpChar, &myStat);
	if (myStat.st_mode & S_IFDIR)		// It is a directory
		{
		[theMatrix addRow];
		strncpy(tmpName, myDir->d_name, 255);	// The name for now
		newCell = [theMatrix cellAt:([theMatrix cellCount] -1) :0];
		if (strlen(myDir->d_name) > 5)			//  Check if .item dir
			{
			strncpy(tmpChar, myDir->d_name, 511);
			tmpcharptr = tmpChar;
			tmpcharptr += (strlen(tmpcharptr) - 5);
			if ( ! strcmp(tmpcharptr, ".item"))	// It is a .item
				{
				[newCell setLeaf:YES];
				*tmpcharptr = '\0';				// Remove .item ending
				strncpy(tmpName, tmpChar, 255);
				}
			else if ( ! strcmp(tmpcharptr, ".list")) // It is a .list
				{
				[newCell setIsList:YES];
				*tmpcharptr = '\0';				// Remove .list ending
				strncpy(tmpName, tmpChar, 255);
				}
			}
		sprintf(tmpChar, "%s/%s", [theCell getDir], myDir->d_name);
		[newCell setDir:tmpChar];
		[newCell setStringValue:tmpName];		// Give the cell its name
		[newCell setFreePointer:thePointer];
		[newCell setSecondaryPointer:secPointer];
		if (theString)
			[newCell setFreeString:theString];
		}
	}


return self;
}

////////////////////////////////////////////////////////////////
// By default, we want no update. Override this if you inspector
// needs to be updated regularly.

- (int) updateInterval
{
return 0;
}

////////////////////////////////////////////////////////////////
//

- setMaster:theMaster
{
MyMaster = theMaster;
return self;
}

@end
