X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/61ad44c7a9709c1ba863eab991b8e2ef506d4162..f9b4d680d72930c31fe14dd63421a85d97ccd739:/src/osx/cocoa/filedlg.mm diff --git a/src/osx/cocoa/filedlg.mm b/src/osx/cocoa/filedlg.mm index cf11f2c056..3e5de2867b 100644 --- a/src/osx/cocoa/filedlg.mm +++ b/src/osx/cocoa/filedlg.mm @@ -54,7 +54,7 @@ wxFileDialog::wxFileDialog( bool wxFileDialog::SupportsExtraControl() const { - return false; + return true; } NSArray* GetTypesFromFilter( const wxString filter ) @@ -167,6 +167,9 @@ void wxFileDialog::ShowWindowModal() if (HasFlag(wxFD_SAVE)) { NSSavePanel* sPanel = [NSSavePanel savePanel]; + + SetupExtraControls(sPanel); + // makes things more convenient: [sPanel setCanCreateDirectories:YES]; [sPanel setMessage:cf.AsNSString()]; @@ -187,6 +190,9 @@ void wxFileDialog::ShowWindowModal() { NSArray* types = GetTypesFromFilter( m_wildCard ) ; NSOpenPanel* oPanel = [NSOpenPanel openPanel]; + + SetupExtraControls(oPanel); + [oPanel setTreatsFilePackagesAsDirectories:NO]; [oPanel setCanChooseDirectories:NO]; [oPanel setResolvesAliases:YES]; @@ -204,10 +210,31 @@ void wxFileDialog::ShowWindowModal() } } -int wxFileDialog::ShowModal() +void wxFileDialog::SetupExtraControls(WXWindow nativeWindow) { - NSSavePanel *panel = nil; + NSSavePanel* panel = (NSSavePanel*) nativeWindow; + + wxNonOwnedWindow::Create( GetParent(), nativeWindow ); + + if (HasExtraControlCreator()) + { + CreateExtraControl(); + wxWindow* control = GetExtraControl(); + if ( control ) + { + NSView* accView = control->GetHandle(); + [accView removeFromSuperview]; + [panel setAccessoryView:accView]; + } + else + { + [panel setAccessoryView:nil]; + } + } +} +int wxFileDialog::ShowModal() +{ wxCFStringRef cf( m_message ); wxCFStringRef dir( m_dir ); @@ -230,6 +257,9 @@ int wxFileDialog::ShowModal() if (HasFlag(wxFD_SAVE)) { NSSavePanel* sPanel = [NSSavePanel savePanel]; + + SetupExtraControls(sPanel); + // makes things more convenient: [sPanel setCanCreateDirectories:YES]; [sPanel setMessage:cf.AsNSString()]; @@ -244,11 +274,17 @@ int wxFileDialog::ShowModal() returnCode = [sPanel runModalForDirectory:dir.AsNSString() file:file.AsNSString() ]; ModalFinishedCallback(sPanel, returnCode); + + UnsubclassWin(); + [sPanel setAccessoryView:nil]; } else { NSArray* types = GetTypesFromFilter( m_wildCard ) ; NSOpenPanel* oPanel = [NSOpenPanel openPanel]; + + SetupExtraControls(oPanel); + [oPanel setTreatsFilePackagesAsDirectories:NO]; [oPanel setCanChooseDirectories:NO]; [oPanel setResolvesAliases:YES]; @@ -260,6 +296,9 @@ int wxFileDialog::ShowModal() ModalFinishedCallback(oPanel, returnCode); + UnsubclassWin(); + [oPanel setAccessoryView:nil]; + if ( types != nil ) [types release]; } @@ -308,6 +347,8 @@ void wxFileDialog::ModalFinishedCallback(void* panel, int returnCode) if (GetModality() == wxDIALOG_MODALITY_WINDOW_MODAL) SendWindowModalDialogEvent ( wxEVT_WINDOW_MODAL_DIALOG_CLOSED ); + + [(NSSavePanel*) panel setAccessoryView:nil]; } #endif // wxUSE_FILEDLG