applied patch 1216005 : message and new NavDirDialog

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35042 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2005-07-31 18:32:04 +00:00
parent 5324268eab
commit 516d38cdfd

View File

@@ -50,57 +50,65 @@ wxDirDialog::wxDirDialog(wxWindow *parent,
int wxDirDialog::ShowModal() int wxDirDialog::ShowModal()
{ {
NavDialogOptions mNavOptions; NavDialogRef dialog;
NavObjectFilterUPP mNavFilterUPP = NULL; NavDialogCreationOptions options;
NavReplyRecord mNavReply; NavReplyRecord reply ;
bool disposeReply = false ;
OSStatus err = noErr;
::NavGetDefaultDialogOptions(&mNavOptions); err = NavGetDefaultDialogCreationOptions(&options);
if (err == noErr)
{
wxMacCFStringHolder message(m_message, m_font.GetEncoding());
options.message = message;
err = NavCreateChooseFolderDialog(&options, NULL, NULL, NULL, &dialog);
if (err == noErr)
{
err = NavDialogRun(dialog);
if ( err == noErr )
{
err = NavDialogGetReply(dialog, &reply);
disposeReply = true ;
}
}
}
mNavReply.validRecord = false; if ( err == noErr )
mNavReply.replacing = false; {
mNavReply.isStationery = false; if ( reply.validRecord )
mNavReply.translationNeeded = false; {
mNavReply.selection.descriptorType = typeNull; FSRef folderInfo;
mNavReply.selection.dataHandle = nil; AEDesc specDesc ;
mNavReply.keyScript = smSystemScript;
mNavReply.fileTranslation = nil;
// Set default location, the location OSErr err = ::AECoerceDesc( &reply.selection , typeFSRef, &specDesc);
// that's displayed when the dialog if ( err != noErr )
// first appears {
m_path = wxEmptyString ;
}
else
{
folderInfo = **(FSRef**) specDesc.dataHandle;
m_path = wxMacFSRefToPath( &folderInfo ) ;
if (specDesc.dataHandle != nil)
{
::AEDisposeDesc(&specDesc);
}
}
}
else
{
err = paramErr ; // could be any error, only used for giving back wxID_CANCEL
}
}
OSErr err = ::NavChooseFolder( if ( disposeReply )
NULL, ::NavDisposeReply(&reply);
&mNavReply,
&mNavOptions,
NULL,
mNavFilterUPP,
0L); // User Data
if ( (err != noErr) && (err != userCanceledErr) ) { // apparently cancelling shouldn't change m_path
if ( err != noErr && err != userCanceledErr )
m_path = wxEmptyString ; m_path = wxEmptyString ;
return wxID_CANCEL ;
}
if (mNavReply.validRecord) { // User chose a folder return (err == noErr) ? wxID_OK : wxID_CANCEL ;
FSRef folderInfo;
AEDesc specDesc ;
OSErr err = ::AECoerceDesc( &mNavReply.selection , typeFSRef, &specDesc);
if ( err != noErr ) {
m_path = wxEmptyString ;
return wxID_CANCEL ;
}
folderInfo = **(FSRef**) specDesc.dataHandle;
if (specDesc.dataHandle != nil) {
::AEDisposeDesc(&specDesc);
}
m_path = wxMacFSRefToPath( &folderInfo ) ;
return wxID_OK ;
}
return wxID_CANCEL;
} }
#endif #endif