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:
@@ -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
|
||||||
|
Reference in New Issue
Block a user