]> git.saurik.com Git - wxWidgets.git/blob - src/osx/cocoa/dirdlg.mm
don't use wxScopedPtr<> in wxDocTemplate::CreateDocument() as the document is implici...
[wxWidgets.git] / src / osx / cocoa / dirdlg.mm
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/osx/cocoa/dirdlg.mm
3 // Purpose: wxDirDialog
4 // Author: Stefan Csomor
5 // Modified by:
6 // Created: 2008-08-30
7 // RCS-ID: $Id: dirdlg.mm 40007 2006-07-05 13:10:46Z SC $
8 // Copyright: (c) Stefan Csomor
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 // ============================================================================
13 // declarations
14 // ============================================================================
15
16 // ----------------------------------------------------------------------------
17 // headers
18 // ----------------------------------------------------------------------------
19
20 // For compilers that support precompilation, includes "wx.h".
21 #include "wx/wxprec.h"
22
23 #if wxUSE_DIRDLG && !defined(__WXUNIVERSAL__)
24
25 #include "wx/dirdlg.h"
26
27 #ifndef WX_PRECOMP
28 #include "wx/msgdlg.h"
29 #include "wx/filedlg.h"
30 #include "wx/app.h"
31 #endif
32
33 #include "wx/filename.h"
34
35 #include "wx/osx/private.h"
36
37 IMPLEMENT_CLASS(wxDirDialog, wxDialog)
38
39 wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message,
40 const wxString& defaultPath, long style, const wxPoint& pos,
41 const wxSize& size, const wxString& name)
42 {
43 m_parent = parent;
44
45 SetMessage( message );
46 SetWindowStyle(style);
47 SetPath(defaultPath);
48 }
49
50
51 int wxDirDialog::ShowModal()
52 {
53 int result = wxID_CANCEL;
54
55 NSOpenPanel *oPanel = [NSOpenPanel openPanel];
56 [oPanel setCanChooseDirectories:YES];
57 [oPanel setResolvesAliases:YES];
58 [oPanel setCanChooseFiles:NO];
59
60 wxCFStringRef cf( m_message );
61 [oPanel setMessage:cf.AsNSString()];
62
63 if ( HasFlag(wxDD_NEW_DIR_BUTTON) )
64 [oPanel setCanCreateDirectories:YES];
65
66 wxCFStringRef dir( m_path );
67
68 m_path = wxEmptyString;
69
70 wxNonOwnedWindow* parentWindow = NULL;
71 int returnCode = -1;
72
73 if (GetParent())
74 {
75 parentWindow = dynamic_cast<wxNonOwnedWindow*>(wxGetTopLevelParent(GetParent()));
76 }
77 else
78 {
79 fprintf(stderr, "No parent!\n");
80 }
81
82 if (parentWindow)
83 {
84 NSWindow* nativeParent = parentWindow->GetWXWindow();
85 ModalDialogDelegate* sheetDelegate = [[ModalDialogDelegate alloc] init];
86 [oPanel beginSheetForDirectory:dir.AsNSString() file:nil types: nil
87 modalForWindow: nativeParent modalDelegate: sheetDelegate
88 didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:)
89 contextInfo: nil];
90 [sheetDelegate waitForSheetToFinish];
91 returnCode = [sheetDelegate code];
92 [sheetDelegate release];
93 }
94 else
95 {
96 returnCode = (NSInteger)[oPanel runModalForDirectory:dir.AsNSString() file:nil types:nil];
97 }
98 if (returnCode == NSOKButton )
99 {
100 wxCFStringRef resultpath( [[[oPanel filenames] objectAtIndex:0] retain] );
101
102 SetPath( resultpath.AsString() );
103 result = wxID_OK;
104 }
105 return result;
106 }
107
108 #endif // wxUSE_DIRDLG