Пример #1
0
// The event handler for the main menu
McoStatus	ToneTab::DoEvents(short item, Point clickPoint, WindowCode *wc, int32 *numwc, void **data,Boolean &changed)
{
int					didit = 0;
int		i,j;
McoStatus 			status = MCO_SUCCESS;	
short 				item2 = item - startNum;
Str255				prompt;
StandardFileReply 	soutReply,sinReply;
Str255				outname = "\p";
SFTypeList			filelist;
Str255				inname;
Rect r1;
short	iType;
Handle	iHandle;
WindowPtr	oldP;

GetPort(&oldP);
SetPort( dp ) ;

	// no codes passed back
	*numwc = 0;
	
	for (i=0; i<numControls; i++) 
		{
		status = controls[i]->DoEvents(item,clickPoint,wc,numwc,data,changed,&didit);
		if (status) return status;
		if (changed) 
			{
			doc->changedLinearTone = 1;
			last_changed = 1;
			CopyOutofControl(i);
			CopyIntoControl(i);
			}
		else last_changed = 0;		
		if (didit) return status;
		}

	if (item2 == EXPORT)
		{
		if (doc->calCurves)
			{
			GetIndString(prompt,PROMPT_STRINGS,STANDARD_PROMPT);
			StandardPutFile(prompt, outname, &soutReply);
			if(soutReply.sfGood)
				{
				memcpy(outname, soutReply.sfFile.name, *(soutReply.sfFile.name)+1);	
				PathNameFromDirID(soutReply.sfFile.parID, soutReply.sfFile.vRefNum, outname);
				ptocstr(outname);
				status = doc->calCurves->exportTone((char*)outname);
				if (status) McoErrorAlert(status);
				else 
					{
					FileFormat ff;
	
					ff.setInfo(&soutReply.sfFile,MONACO_SIG,'TEXT');
					}
				}
			}
		}
	else if (item2 == IMPORT)
		{
		if (doc->calCurves)
			{	
			filelist[0] = 'TEXT';
			StandardGetFile(0L, 1, filelist, &sinReply);
			if(sinReply.sfGood)	
				{
				memcpy(inname, sinReply.sfFile.name, *(sinReply.sfFile.name)+1);
				PathNameFromDirID(sinReply.sfFile.parID, sinReply.sfFile.vRefNum, inname);
				ptocstr(inname);	
				status = doc->calCurves->importTone((char*)inname);
				if (status) McoErrorAlert(status);
				else 
					{
					CopyIntoControl(-1);
					doc->changedLinearTone = 1;
					}
				status = MCO_SUCCESS;
				}
			}
		}
	else
		{
		GetDItem (dp, DESCRIPTION+startNum, &iType, (Handle*)&iHandle, &r1);
		GetIText(iHandle,inname);
		if (inname[0] > 100) inname[0] = 100;
		ptocstr(inname);
		strcpy(doc->printData->setting.toneDesc,(char*)inname);
		}
	SetPort(oldP);		
	return status;
}
Пример #2
0
Boolean AskUserForGetFileName(char* prompt_string,    
							short numTypes, 
							OSType typeList[],
							//
							char* pathOfFileSelected,  
							short maxPathLength,
							FSSpec *specPtr,
							MyCustomNavItemsData *myCustomItemsDataPtr)
{
	OSStatus err = 0;
	NavDialogCreationOptions  dialogOptions;
	NavTypeListHandle inTypeList = 0;
	NavEventUPP inEventProc = 0;
	NavPreviewUPP inPreviewProc = 0;
	NavObjectFilterUPP inFilterProc = 0;
	Ptr inClientData = (Ptr)myCustomItemsDataPtr;
	NavDialogRef navDialogRef = 0;
	NavReplyRecord replyRecord;
	Boolean gotReply = false;
	
	FSSpec fsSpec;
	char pathName[256]="";
	
	CFStringRef windowTitleCFStrRef = 0;
	CFStringRef clientNameCFStrRef = 0;
	
	if(specPtr) memset(specPtr,0,sizeof(specPtr));
	if(pathOfFileSelected && maxPathLength > 0) pathOfFileSelected[0] = 0;

	err = NavGetDefaultDialogCreationOptions(&dialogOptions);
	if(err) return false;
	
	// for now don't customize the dialogs, may want to do this later
	/*if(myCustomItemsDataPtr && myCustomItemsDataPtr->ditlResID) {
		inEventProc = GetMyNavEventHandlerUPP();
	}*/

	if(prompt_string && prompt_string[0]) {
		windowTitleCFStrRef = CFStringCreateWithCString(NULL, prompt_string, kCFStringEncodingMacRoman);
		dialogOptions.windowTitle = windowTitleCFStrRef;
	}
	
	// set the client name so the system can remember the last place the user looked
	clientNameCFStrRef  = CFStringCreateWithCString(NULL, "GNOME", kCFStringEncodingMacRoman);
	dialogOptions.clientName = clientNameCFStrRef;
	
	//inTypeList = MyCreateNavTypeListHandle(gMySignature,numTypes,typeList);	// for now allow all files to be shown, filtering is messed up on 10.6
	
	//err = NavCreateChooseFileDialog (&dialogOptions,inTypeList,inEventProc,inPreviewProc,inFilterProc,inClientData,&navDialogRef);
	err = NavCreateChooseFileDialog (&dialogOptions,inTypeList,inEventProc,inPreviewProc,inFilterProc,NULL,&navDialogRef);
	if(err) return false;
	
	InitCursor();
	err = NavDialogRun(navDialogRef);
	SetWatchCursor();
	if(err) goto done;
	
	err = NavDialogGetReply(navDialogRef,&replyRecord);
	if(err) goto done;
	
	gotReply = true;
	
	err = AEGetNthPtr(&(replyRecord.selection), 1, typeFSS, NULL, NULL, &fsSpec, sizeof(fsSpec), NULL);
	if(err) goto done;
	
	(void)PathNameFromDirID(fsSpec.parID,fsSpec.vRefNum,pathName);//GetPathWithDelimiterFromDirID
	mypstrcatJM((StringPtr)pathName,fsSpec.name);
	my_p2cstr(pathName);
	
	if(strlen(pathName) < maxPathLength){
		strcpy(pathOfFileSelected,pathName);
	}
	else  {
		err = -1; // path is too long to return
	}
		
	if(!err && specPtr)  *specPtr = fsSpec;
	
done:
	if(inTypeList) {DisposeHandle((Handle)inTypeList); inTypeList = 0;}
	if(windowTitleCFStrRef) { CFRelease(windowTitleCFStrRef);  windowTitleCFStrRef = 0;}
	if(clientNameCFStrRef) { CFRelease(clientNameCFStrRef);  clientNameCFStrRef = 0;}

	if(gotReply) NavDisposeReply(&replyRecord);
	
	NavDialogDispose(navDialogRef);
	
	if(gotReply && !err) return true;
	return false;
	
} /* end MyGetMacFile() */
Пример #3
0
// Open a gammut surface dialog, use info passed in data if data is valid
McoStatus AllWins::openGammutSurface1(void)
{
	GamutSurfaceWin 	*gamutsurf;
	int32		maxwinnum  = 0;
	McoStatus	state = MCO_SUCCESS;
	int i;
	Str255		patchFName;
	RawData		*raw;
	

	StandardFileReply 	sinReply;
	SFTypeList			filelist;
	Str255				inname;
	FILE 				*fs;
	if (!QD3D_Present) return MCO_NO_QD3D;
	if (xyztorgb == NULL) return MCO_FAILURE;

	
	// raw is deleted by the window
	raw = new RawData();	
	
	filelist[0] = 'TEXT';
	StandardGetFile(nil, 1, filelist, &sinReply);
	if(sinReply.sfGood == 0)
		return MCO_CANCEL;
		
	copy_str(patchFName,sinReply.sfFile.name);

	memcpy(inname, sinReply.sfFile.name, *(sinReply.sfFile.name)+1);
	PathNameFromDirID(sinReply.sfFile.parID, sinReply.sfFile.vRefNum, inname);
	ptocstr(inname);	
	
	fs = fopen( (char*)inname, "r" );
	if(!fs)
		return MCO_FILE_OPEN_ERROR;
		
	raw->loadData(fs);
	
	fclose(fs);
	
	//for (i=0; i<tempdoc->_condata.smooth; i++) raw->smooth_patch();
	
	maxwinnum = 0;
	for (i=0; i<numWins; i++) if (wins[i]->isMyWindowType(GammutSurfaceTherm1))
		{
		if (wins[i]->WinNum >= maxwinnum) maxwinnum = wins[i]->WinNum+1;
		}
		
	memcpy(inname, sinReply.sfFile.name, *(sinReply.sfFile.name)+1);	

	// the flag after raw indicates that the window should delete raw
	gamutsurf = new GamutSurfaceWin(0L,raw,1,GammutSurfaceTherm1,maxwinnum,inname);
	if (gamutsurf == 0L) return MCO_MEM_ALLOC_ERROR;
	if (gamutsurf->error == MCO_MEM_ALLOC_ERROR)
		{
		McoErrorAlert(gamutsurf->error);
		delete gamutsurf;
		return MCO_SUCCESS;
		}
	if (gamutsurf->error != MCO_SUCCESS) 
		{
		state = gamutsurf->error;
		delete gamutsurf;
		return state;
		}
	

	return AddWin(gamutsurf,0L);
}
Пример #4
0
Boolean AskUserForPutFileName(char* promptStr, char* defaultName, char* pathOfFileSelected, short maxPathLength, FSSpec *specPtr, MyCustomNavItemsData *myCustomItemsDataPtr)
{
	OSStatus err = 0;
	
	NavDialogCreationOptions  dialogOptions;
   	OSType inFileType = 'TEXT'; // what will happen if we always just say TEXT and change our mind later ? (perhaps it will add .txt) ?
   	OSType inFileCreator = kNavGenericSignature;
	NavEventUPP inEventProc = 0;
	Ptr inClientData = (Ptr)myCustomItemsDataPtr;
	NavDialogRef navDialogRef = 0;
	NavReplyRecord replyRecord;
	Boolean gotReply = false;
	
	FSSpec fsSpec;
	char pathName[256]="";
	char theFileName[256]="";
	
	CFStringRef windowTitleCFStrRef = 0;
	CFStringRef clientNameCFStrRef = 0;
	CFStringRef saveFileNameCFStrRef = 0;
	
	if(specPtr) memset(specPtr,0,sizeof(specPtr));
	if(pathOfFileSelected && maxPathLength > 0) pathOfFileSelected[0] = 0;
	
	err = NavGetDefaultDialogCreationOptions(&dialogOptions);
	if(err) return false;
	
	// for now don't customize the dialogs, may want to do this later
	/*if(myCustomItemsDataPtr && myCustomItemsDataPtr->ditlResID) {
		inEventProc = GetMyNavEventHandlerUPP();
	}*/

	if(promptStr && promptStr[0]) {
		windowTitleCFStrRef = CFStringCreateWithCString(NULL, promptStr,kCFStringEncodingMacRoman);
		dialogOptions.windowTitle = windowTitleCFStrRef;
	}
	
	// set the client name so the system can remember the last place the user looked
	clientNameCFStrRef  = CFStringCreateWithCString(NULL,"GNOME",kCFStringEncodingMacRoman);
	dialogOptions.clientName = clientNameCFStrRef;
	
	if(defaultName && defaultName[0]) {
		saveFileNameCFStrRef = CFStringCreateWithCString(NULL, defaultName,kCFStringEncodingMacRoman);
		dialogOptions.saveFileName = saveFileNameCFStrRef;
	}
	
	//err = NavCreatePutFileDialog(&dialogOptions,inFileType,inFileCreator,inEventProc,inClientData,&navDialogRef);
	err = NavCreatePutFileDialog(&dialogOptions,inFileType,inFileCreator,inEventProc,NULL,&navDialogRef);
	if(err) return false;
	
	InitCursor();
	err = NavDialogRun(navDialogRef);
	SetWatchCursor();
	if(err) goto done;
	
	err = NavDialogGetReply(navDialogRef,&replyRecord);
	if(err) goto done;
	
	gotReply = true;
	
	err = AEGetNthPtr(&(replyRecord.selection), 1, typeFSS, NULL, NULL, &fsSpec, sizeof(fsSpec), NULL);
	if(err) goto done;
	
	(void)PathNameFromDirID(fsSpec.parID,fsSpec.vRefNum,pathName); // GetPathWithDelimiterFromDirID
	mypstrcatJM((StringPtr)pathName,fsSpec.name);
	my_p2cstr(pathName);
	
	(void)CFStringGetCString(replyRecord.saveFileName,theFileName,256,kCFStringEncodingMacRoman);
	
	if( (strlen(pathName) + 1 + strlen(theFileName)) < maxPathLength){
		strcpy(pathOfFileSelected,pathName);
		strcat(pathOfFileSelected,":");
		strcat(pathOfFileSelected,theFileName);
	}
	else  {
		err = -1; // path is too long to return
	}
	
	if(!err && specPtr)  *specPtr = fsSpec;
	
done:
	if(windowTitleCFStrRef) { CFRelease(windowTitleCFStrRef);  windowTitleCFStrRef = 0;}
	if(clientNameCFStrRef) { CFRelease(clientNameCFStrRef);  clientNameCFStrRef = 0;}
	if(saveFileNameCFStrRef) { CFRelease(saveFileNameCFStrRef);  saveFileNameCFStrRef = 0;}

	if(gotReply) NavDisposeReply(&replyRecord);
	
	NavDialogDispose(navDialogRef);
	
	if(gotReply && !err) return true;
	return false;
 	
}