]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/cocoa/dirdlg.mm
wiring OnInit on osx to a later point in event processing
[wxWidgets.git] / src / osx / cocoa / dirdlg.mm
index 7d7dc66a2193e93de42814c758c0419d49d2823a..f7869a075a5c19e5f76f1eeca673d0ad692dd4ba 100644 (file)
 
 #include "wx/filename.h"
 #include "wx/evtloop.h"
+#include "wx/modalhook.h"
 
 #include "wx/osx/private.h"
 
 IMPLEMENT_CLASS(wxDirDialog, wxDialog)
 
-wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message,
+void wxDirDialog::Init()
+{
+    m_sheetDelegate = nil;
+}
+
+void wxDirDialog::Create(wxWindow *parent, const wxString& message,
         const wxString& defaultPath, long style, const wxPoint& WXUNUSED(pos),
         const wxSize& WXUNUSED(size), const wxString& WXUNUSED(name))
 {
@@ -55,12 +61,8 @@ wxDirDialog::~wxDirDialog()
     [m_sheetDelegate release];
 }
 
-void wxDirDialog::ShowWindowModal()
+WX_NSOpenPanel wxDirDialog::OSXCreatePanel() const
 {
-    wxCFStringRef dir( m_path );
-    
-    m_modality = wxDIALOG_MODALITY_WINDOW_MODAL;
-    
     NSOpenPanel *oPanel = [NSOpenPanel openPanel];
     [oPanel setCanChooseDirectories:YES];
     [oPanel setResolvesAliases:YES];
@@ -69,40 +71,40 @@ void wxDirDialog::ShowWindowModal()
     wxCFStringRef cf( m_message );
     [oPanel setMessage:cf.AsNSString()];
 
-    if ( HasFlag(wxDD_NEW_DIR_BUTTON) )
+    if ( !HasFlag(wxDD_DIR_MUST_EXIST) )
         [oPanel setCanCreateDirectories:YES];
-    
+
+    return oPanel;
+}
+
+void wxDirDialog::ShowWindowModal()
+{
     wxNonOwnedWindow* parentWindow = NULL;
-    
+
     if (GetParent())
         parentWindow = dynamic_cast<wxNonOwnedWindow*>(wxGetTopLevelParent(GetParent()));
-    
-    wxASSERT_MSG(parentWindow, "Window modal display requires parent.");
-    
-    if (parentWindow)
-    {
-        NSWindow* nativeParent = parentWindow->GetWXWindow();
-        [oPanel beginSheetForDirectory:dir.AsNSString() file:nil types: nil
-            modalForWindow: nativeParent modalDelegate: m_sheetDelegate
-            didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:)
-            contextInfo: nil];
-    }
+
+    wxCHECK_RET(parentWindow, "Window modal display requires parent.");
+
+    m_modality = wxDIALOG_MODALITY_WINDOW_MODAL;
+
+    NSOpenPanel *oPanel = OSXCreatePanel();
+
+    NSWindow* nativeParent = parentWindow->GetWXWindow();
+    wxCFStringRef dir( m_path );
+    [oPanel beginSheetForDirectory:dir.AsNSString() file:nil types: nil
+        modalForWindow: nativeParent modalDelegate: m_sheetDelegate
+        didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:)
+        contextInfo: nil];
 }
 
 int wxDirDialog::ShowModal()
 {
-    wxCFEventLoopPauseIdleEvents pause;
+    WX_HOOK_MODAL_DIALOG();
 
-    NSOpenPanel *oPanel = [NSOpenPanel openPanel];
-    [oPanel setCanChooseDirectories:YES];
-    [oPanel setResolvesAliases:YES];
-    [oPanel setCanChooseFiles:NO];
-
-    wxCFStringRef cf( m_message );
-    [oPanel setMessage:cf.AsNSString()];
+    wxCFEventLoopPauseIdleEvents pause;
 
-    if ( HasFlag(wxDD_NEW_DIR_BUTTON) )
-        [oPanel setCanCreateDirectories:YES];
+    NSOpenPanel *oPanel = OSXCreatePanel();
 
     wxCFStringRef dir( m_path );
 
@@ -123,11 +125,11 @@ void wxDirDialog::ModalFinishedCallback(void* panel, int returnCode)
     if (returnCode == NSOKButton )
     {
         NSOpenPanel* oPanel = (NSOpenPanel*)panel;
-        SetPath( wxCFStringRef::AsString([[oPanel filenames] objectAtIndex:0]));
+        SetPath( wxCFStringRef::AsStringWithNormalizationFormC([[oPanel filenames] objectAtIndex:0]));
         result = wxID_OK;
     }
     SetReturnCode(result);
-    
+
     if (GetModality() == wxDIALOG_MODALITY_WINDOW_MODAL)
         SendWindowModalDialogEvent ( wxEVT_WINDOW_MODAL_DIALOG_CLOSED  );
 }