]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/dirdlg.cpp
non owned window implementation
[wxWidgets.git] / src / mac / carbon / dirdlg.cpp
index a17768a61b251fa591e50888e64a135f9a1f1cbf..5caa7f6b4bb218fc37308e82dfdbe19e22f721e5 100644 (file)
@@ -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 <Carbon/Carbon.h>
+    #include <Carbon/Carbon.h>
 #else
-  #include <Navigation.h>
+    #include <Navigation.h>
 #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 ;
 }