#import "Briefcase.h"
#import "BriefDoc.h"
#import "PrefDelegate.h"

#import "Utility.h"

#import <appkit/MenuCell.h>
#import <appkit/OpenPanel.h>

@implementation Briefcase:MultApp

/* Canon Information Systems is not responsible for anything anyone does with this   */
/* code, nor are they responsible for the correctness of this code.  Basically, this */
/* has very little to do with the company I work for, and you can't blame them.      */

/* This file is best read in a window as wide as this comment, and with tab settings */
/* of 4 spaces and indent setting of 4 spaces (at least, that's what I use).		 */

/* You are welcome to do as you would with this file under the following conditions. */
/* First, I accept no blame for anything that goes wrong no matter how you use it,   */
/* no matter how catastrophic, not even if it stems from a bug in my code.			 */
/* Second, please keep my notices on it when/if you distribute it.					 */
/* Third, if you discover any bugs or have any comments, PLEASE TELL ME!  Code won't */
/* get better without people picking it apart and giving the writer feedback.        */
/* Fourth, if you modify it, please keep a notice that your version is based on mine */
/* in the source files (and keep the notice that mine is based on four other pieces  */
/* of code :<).  Thanks, and have fun.  - Subrata Sircar, ssircar@canon.com			 */

/* This class is an instance of the application delegate class.		*/
/* It handles the drag and drop functions, and the communication	*/
/* with the Workspace.												*/

/* Version 1.0b		Apr-19-92		Third Public Release	*/
/* Version 2.0b		Jan-19-93		Fourth Public Release	*/

#define MY_VERSION		200

/* Target/Action Methods */

- addFile:sender
/*
 * Called by pressing Add File... in the Document menu.
 * Use the OpenPanel to get filenames and add them to the current document
 */
{
	char tempBuf[8192];
	char fileBuf[MAXPATHLEN+1];
    const char *directory;
    const char *const *files;
    static const char *const myType[1] = {NULL};
    id openpanel = [[OpenPanel new] allowMultipleFiles:YES];

    tempBuf[0] = '\0';
	directory = [[self currentDocument] directory];
    if (directory && (*directory == '/')) [openpanel setDirectory:directory];
    if ([openpanel runModalForTypes:myType]) {
		files = [openpanel filenames];
		directory = [openpanel directory];
		while (files && *files) {
	/* Get pathnames and add them to the current Document */
			sprintf(fileBuf,"%s/%s\n",directory,*files);
			strcat(tempBuf,fileBuf);
			files++;
		}
		[[self currentDocument] addFiles:tempBuf];
    }

    return self;
}


/* Automatic update methods */

- (BOOL)validateCommand:menuCell
/*
 * Validate the "Add Files" menu item if we have a current document
 */
{
    if ([super validateCommand:menuCell]) {
		if ([menuCell action] == @selector(addFile:)) return [self currentDocument] ? YES : NO;
		else return YES;
	} else return NO;
}


/* Application Delegate Methods */

- appWillInit:sender
/*
 * Insert our document class instead of whatever our superclass uses
 */
{
	[[self class] setDocClass:[BriefDoc class]];
	[super appWillInit:self];
	[[self class] setVersion:MY_VERSION];
	
    return self;
}

@end
