X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e9576ca53db96b462ed4c0b4bdf47d64c40203e4..e795e8b56f213f97745636a017609091746894a0:/src/mac/carbon/dirdlg.cpp?ds=sidebyside diff --git a/src/mac/carbon/dirdlg.cpp b/src/mac/carbon/dirdlg.cpp index 095621b978..be7e5c6aa6 100644 --- a/src/mac/carbon/dirdlg.cpp +++ b/src/mac/carbon/dirdlg.cpp @@ -1,42 +1,110 @@ ///////////////////////////////////////////////////////////////////////////// // Name: dirdlg.cpp // Purpose: wxDirDialog -// Author: AUTHOR +// Author: Stefan Csomor // Modified by: -// Created: ??/??/98 +// Created: 1998-01-01 // RCS-ID: $Id$ -// Copyright: (c) AUTHOR -// Licence: wxWindows licence +// Copyright: (c) Stefan Csomor +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "dirdlg.h" -#endif +#include "wx/wxprec.h" + +#if wxUSE_DIRDLG -#include "wx/defs.h" #include "wx/utils.h" #include "wx/dialog.h" #include "wx/dirdlg.h" #include "wx/cmndata.h" -#if !USE_SHARED_LIBRARY -IMPLEMENT_CLASS(wxDirDialog, wxDialog) +#include "wx/mac/private.h" + +#ifdef __DARWIN__ + #include +#else + #include #endif -wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message, - const wxString& defaultPath, - long style, const wxPoint& pos) +IMPLEMENT_CLASS(wxDirDialog, wxDialog) + +wxDirDialog::wxDirDialog(wxWindow *parent, + const wxString& message, + const wxString& defaultPath, + long 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; + m_path = defaultPath; } int wxDirDialog::ShowModal() { - // TODO - return wxID_CANCEL; + NavDialogRef dialog; + NavDialogCreationOptions options; + NavReplyRecord reply ; + bool disposeReply = false ; + OSStatus err = noErr; + + 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 ; + } + } + } + + if ( err == noErr ) + { + if ( reply.validRecord ) + { + FSRef folderInfo; + AEDesc specDesc ; + + OSErr err = ::AECoerceDesc( &reply.selection , typeFSRef, &specDesc); + if ( err != noErr ) + { + 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 + } + } + + if ( disposeReply ) + ::NavDisposeReply(&reply); + + // apparently cancelling shouldn't change m_path + if ( err != noErr && err != userCanceledErr ) + m_path = wxEmptyString ; + + return (err == noErr) ? wxID_OK : wxID_CANCEL ; } +#endif