]> git.saurik.com Git - wxWidgets.git/commitdiff
applied patch 1216005 : message and new NavDirDialog
authorStefan Csomor <csomor@advancedconcepts.ch>
Sun, 31 Jul 2005 18:32:04 +0000 (18:32 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Sun, 31 Jul 2005 18:32:04 +0000 (18:32 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35042 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/mac/carbon/dirdlg.cpp

index 2150002e4292be2a39989e8ccd32d31a83f028d3..822047c4df77959324851629b1b724396c1a2029 100644 (file)
@@ -50,57 +50,65 @@ wxDirDialog::wxDirDialog(wxWindow *parent,
 
 int wxDirDialog::ShowModal()
 {
-    NavDialogOptions        mNavOptions;
-    NavObjectFilterUPP      mNavFilterUPP = NULL;
-    NavReplyRecord          mNavReply;
-
-    ::NavGetDefaultDialogOptions(&mNavOptions);
-
-    mNavReply.validRecord              = false;
-    mNavReply.replacing                = false;
-    mNavReply.isStationery             = false;
-    mNavReply.translationNeeded        = false;
-    mNavReply.selection.descriptorType = typeNull;
-    mNavReply.selection.dataHandle     = nil;
-    mNavReply.keyScript                = smSystemScript;
-    mNavReply.fileTranslation          = nil;
-
-    // Set default location, the location
-    //   that's displayed when the dialog
-    //   first appears
-
-    OSErr err = ::NavChooseFolder(
-                        NULL,
-                        &mNavReply,
-                        &mNavOptions,
-                        NULL,
-                        mNavFilterUPP,
-                        0L);                            // User Data
-
-    if ( (err != noErr) && (err != userCanceledErr) ) {
-        m_path = wxEmptyString ;
-        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 (mNavReply.validRecord) {        // User chose a folder
-
-        FSRef folderInfo;
-        AEDesc specDesc ;
-
-        OSErr err = ::AECoerceDesc( &mNavReply.selection , typeFSRef, &specDesc);
-        if ( err != noErr ) {
-            m_path = wxEmptyString ;
-            return wxID_CANCEL ;
+    
+    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);
+                }            
+            }
         }
-        folderInfo = **(FSRef**) specDesc.dataHandle;
-        if (specDesc.dataHandle != nil) {
-            ::AEDisposeDesc(&specDesc);
+        else
+        {
+            err = paramErr ; // could be any error, only used for giving back wxID_CANCEL
         }
-
-        m_path = wxMacFSRefToPath( &folderInfo ) ;
-        return wxID_OK ;
     }
-    return 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