// 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; }
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() */
// 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); }
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; }