]> git.saurik.com Git - wxWidgets.git/blame - src/osx/cocoa/dirdlg.mm
exposing control key combinations as before, fixing unicodekey casing
[wxWidgets.git] / src / osx / cocoa / dirdlg.mm
CommitLineData
0f9b48d1
SC
1/////////////////////////////////////////////////////////////////////////////
2// Name: src/osx/cocoa/dirdlg.mm
03647350 3// Purpose: wxDirDialog
0f9b48d1 4// Author: Stefan Csomor
03647350 5// Modified by:
0f9b48d1 6// Created: 2008-08-30
a9a4f229 7// RCS-ID: $Id$
0f9b48d1
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
37IMPLEMENT_CLASS(wxDirDialog, wxDialog)
38
39wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message,
d8207702
SC
40 const wxString& defaultPath, long style, const wxPoint& WXUNUSED(pos),
41 const wxSize& WXUNUSED(size), const wxString& WXUNUSED(name))
0f9b48d1
SC
42{
43 m_parent = parent;
44
45 SetMessage( message );
46 SetWindowStyle(style);
47 SetPath(defaultPath);
4d3e2dc9
SC
48 m_sheetDelegate = [[ModalDialogDelegate alloc] init];
49 [(ModalDialogDelegate*)m_sheetDelegate setImplementation: this];
50}
51
52wxDirDialog::~wxDirDialog()
53{
54 [m_sheetDelegate release];
0f9b48d1
SC
55}
56
bfa92264 57void wxDirDialog::ShowWindowModal()
0f9b48d1 58{
bfa92264
KO
59 wxCFStringRef dir( m_path );
60
61 m_modality = wxDIALOG_MODALITY_WINDOW_MODAL;
62
0f9b48d1
SC
63 NSOpenPanel *oPanel = [NSOpenPanel openPanel];
64 [oPanel setCanChooseDirectories:YES];
65 [oPanel setResolvesAliases:YES];
66 [oPanel setCanChooseFiles:NO];
03647350 67
0f9b48d1
SC
68 wxCFStringRef cf( m_message );
69 [oPanel setMessage:cf.AsNSString()];
03647350
VZ
70
71 if ( HasFlag(wxDD_NEW_DIR_BUTTON) )
0f9b48d1 72 [oPanel setCanCreateDirectories:YES];
bfa92264 73
a905992c 74 wxNonOwnedWindow* parentWindow = NULL;
bfa92264 75
03647350 76 if (GetParent())
a905992c 77 parentWindow = dynamic_cast<wxNonOwnedWindow*>(wxGetTopLevelParent(GetParent()));
bfa92264
KO
78
79 wxASSERT_MSG(parentWindow, "Window modal display requires parent.");
80
a905992c
KO
81 if (parentWindow)
82 {
83 NSWindow* nativeParent = parentWindow->GetWXWindow();
03647350 84 [oPanel beginSheetForDirectory:dir.AsNSString() file:nil types: nil
4d3e2dc9 85 modalForWindow: nativeParent modalDelegate: m_sheetDelegate
03647350 86 didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:)
a905992c 87 contextInfo: nil];
a905992c 88 }
bfa92264
KO
89}
90
91int wxDirDialog::ShowModal()
92{
93 NSOpenPanel *oPanel = [NSOpenPanel openPanel];
94 [oPanel setCanChooseDirectories:YES];
95 [oPanel setResolvesAliases:YES];
96 [oPanel setCanChooseFiles:NO];
97
98 wxCFStringRef cf( m_message );
99 [oPanel setMessage:cf.AsNSString()];
100
101 if ( HasFlag(wxDD_NEW_DIR_BUTTON) )
102 [oPanel setCanCreateDirectories:YES];
103
104 wxCFStringRef dir( m_path );
105
106 m_path = wxEmptyString;
107
108 int returnCode = -1;
109
110 returnCode = (NSInteger)[oPanel runModalForDirectory:dir.AsNSString() file:nil types:nil];
111 ModalFinishedCallback(oPanel, returnCode);
112
113 return GetReturnCode();
114}
115
116void wxDirDialog::ModalFinishedCallback(void* panel, int returnCode)
117{
118 int result = wxID_CANCEL;
119
a905992c 120 if (returnCode == NSOKButton )
0f9b48d1 121 {
bfa92264 122 NSOpenPanel* oPanel = (NSOpenPanel*)panel;
f66ecdc4 123 SetPath( wxCFStringRef::AsString([[oPanel filenames] objectAtIndex:0]));
0f9b48d1
SC
124 result = wxID_OK;
125 }
bfa92264
KO
126 SetReturnCode(result);
127
128 if (GetModality() == wxDIALOG_MODALITY_WINDOW_MODAL)
129 SendWindowModalDialogEvent ( wxEVT_WINDOW_MODAL_DIALOG_CLOSED );
0f9b48d1
SC
130}
131
132#endif // wxUSE_DIRDLG