X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a4e3cdf025cc39f02032e6950e30d62659aab88d..8064223b7b1b3657363b7a635c381b9269d95e55:/src/mac/carbon/dirdlg.cpp diff --git a/src/mac/carbon/dirdlg.cpp b/src/mac/carbon/dirdlg.cpp index a17768a61b..5caa7f6b4b 100644 --- a/src/mac/carbon/dirdlg.cpp +++ b/src/mac/carbon/dirdlg.cpp @@ -1,31 +1,34 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: dirdlg.cpp +// Name: src/mac/carbon/dirdlg.cpp // Purpose: wxDirDialog // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 // RCS-ID: $Id$ // Copyright: (c) Stefan Csomor -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #include "wx/wxprec.h" #if wxUSE_DIRDLG -#include "wx/utils.h" -#include "wx/dialog.h" #include "wx/dirdlg.h" -#include "wx/cmndata.h" +#ifndef WX_PRECOMP + #include "wx/utils.h" + #include "wx/dialog.h" + #include "wx/cmndata.h" +#endif // WX_PRECOMP + #include "wx/filename.h" #include "wx/mac/private.h" #ifdef __DARWIN__ - #include + #include #else - #include + #include #endif IMPLEMENT_CLASS(wxDirDialog, wxDialog) @@ -45,15 +48,15 @@ static pascal void NavEventProc( wxDirDialog * data = ( wxDirDialog *) ioUserData ; if ( inSelector == kNavCBStart ) { - if (data && !data->GetPath().IsEmpty() ) + if (data && !data->GetPath().empty() ) { // Set default location for the modern Navigation APIs // Apple Technical Q&A 1151 - FSSpec theFSSpec; - wxMacFilename2FSSpec(data->GetPath(), &theFSSpec); + FSRef theFile; + wxMacPathToFSRef(data->GetPath(), &theFile); AEDesc theLocation = { typeNull, NULL }; - if (noErr == ::AECreateDesc(typeFSS, &theFSSpec, sizeof(FSSpec), &theLocation)) - ::NavCustomControl(ioParams->context, kNavCtlSetLocation, (void *) &theLocation); + if (noErr == ::AECreateDesc(typeFSRef, &theFile, sizeof(FSRef), &theLocation)) + ::NavCustomControl(ioParams->context, kNavCtlSetLocation, (void *) &theLocation); } } } @@ -61,34 +64,34 @@ static pascal void NavEventProc( wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message, const wxString& defaultPath, - long style, + long WXUNUSED(style), const wxPoint& WXUNUSED(pos), const wxSize& WXUNUSED(size), const wxString& WXUNUSED(name)) { wxASSERT_MSG( NavServicesAvailable() , wxT("Navigation Services are not running") ) ; m_message = message; - m_dialogStyle = style; m_parent = parent; m_path = defaultPath; } int wxDirDialog::ShowModal() { - NavDialogRef dialog; + NavDialogRef dialog = NULL; NavDialogCreationOptions options; NavReplyRecord reply ; bool disposeReply = false ; OSStatus err = noErr; - + err = NavGetDefaultDialogCreationOptions(&options); - if (err == noErr) + options.optionFlags &= ~kNavAllowMultipleFiles; + if (err == noErr) { - wxMacCFStringHolder message(m_message, m_font.GetEncoding()); + wxCFStringRef message(m_message, GetFont().GetEncoding()); options.message = message; err = NavCreateChooseFolderDialog(&options, sStandardNavEventFilter , NULL, this , &dialog); - if (err == noErr) - { + if (err == noErr) + { err = NavDialogRun(dialog); if ( err == noErr ) { @@ -97,16 +100,16 @@ int wxDirDialog::ShowModal() } } } - - if ( err == noErr ) - { + + if ( err == noErr ) + { if ( reply.validRecord ) { FSRef folderInfo; AEDesc specDesc ; - + OSErr err = ::AECoerceDesc( &reply.selection , typeFSRef, &specDesc); - if ( err != noErr ) + if ( err != noErr ) { m_path = wxEmptyString ; } @@ -114,10 +117,10 @@ int wxDirDialog::ShowModal() { folderInfo = **(FSRef**) specDesc.dataHandle; m_path = wxMacFSRefToPath( &folderInfo ) ; - if (specDesc.dataHandle != nil) + if (specDesc.dataHandle != nil) { ::AEDisposeDesc(&specDesc); - } + } } } else @@ -125,14 +128,17 @@ int wxDirDialog::ShowModal() err = paramErr ; // could be any error, only used for giving back wxID_CANCEL } } - + if ( disposeReply ) ::NavDisposeReply(&reply); - + // apparently cancelling shouldn't change m_path if ( err != noErr && err != userCanceledErr ) m_path = wxEmptyString ; - + + if ( dialog ) + ::NavDialogDispose(dialog); + return (err == noErr) ? wxID_OK : wxID_CANCEL ; }