From 2f30930a092c85f3255f8a0d79873cde438b0445 Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Sun, 18 Apr 2010 13:17:16 +0000 Subject: [PATCH] streamlining code for extra controls git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64027 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/osx/filedlg.h | 2 ++ src/osx/carbon/filedlg.cpp | 34 ++++++++++++++-------------- src/osx/cocoa/filedlg.mm | 45 +++++++++++++++++++++++++++++++++++--- 3 files changed, 62 insertions(+), 19 deletions(-) diff --git a/include/wx/osx/filedlg.h b/include/wx/osx/filedlg.h index abffd037f7..1cf1b5ce2e 100644 --- a/include/wx/osx/filedlg.h +++ b/include/wx/osx/filedlg.h @@ -51,6 +51,8 @@ protected: virtual void DoSetSize(int WXUNUSED(x), int WXUNUSED(y), int WXUNUSED(width), int WXUNUSED(height), int WXUNUSED(sizeFlags) = wxSIZE_AUTO) {} + + void SetupExtraControls(WXWindow nativeWindow); }; #endif // _WX_FILEDLG_H_ diff --git a/src/osx/carbon/filedlg.cpp b/src/osx/carbon/filedlg.cpp index ef50e3d93b..719654a23a 100644 --- a/src/osx/carbon/filedlg.cpp +++ b/src/osx/carbon/filedlg.cpp @@ -72,13 +72,13 @@ private: bool m_saveMode; SInt16 m_lastRight; SInt16 m_lastBottom; - bool m_firstAdjustRect; + bool m_controlAdded; }; OpenUserDataRec::OpenUserDataRec( wxFileDialog* d) { m_dialog = d; - m_firstAdjustRect = true; + m_controlAdded = false; m_saveMode = m_dialog->HasFdFlag(wxFD_SAVE); m_defaultLocation = m_dialog->GetDirectory(); @@ -187,6 +187,7 @@ void OpenUserDataRec::EventProcCBStart(NavCBRecPtr ioParams) if (m_dialog->GetExtraControl()) { + m_controlAdded = true; ControlRef ref = m_dialog->GetExtraControl()->GetPeer()->GetControlRef(); NavCustomControl(ioParams->context, kNavCtlAddControl, ref); } @@ -264,15 +265,11 @@ void OpenUserDataRec::EventProcCBAdjustRect(NavCBRecPtr ioParams) { wxWindow* control = m_dialog->GetExtraControl(); - if ( control ) + if ( control && m_controlAdded) { - // workaround because the first time this is called it still seems to be - // in composited coordinates, while later it is not - if ( !m_firstAdjustRect ) - { - control->Move(ioParams->customRect.left , ioParams->customRect.top); - } - m_firstAdjustRect = false; + control->SetSize(ioParams->customRect.left , ioParams->customRect.top, + ioParams->customRect.right - ioParams->customRect.left, + ioParams->customRect.bottom - ioParams->customRect.top); } } @@ -467,6 +464,16 @@ wxFileDialog::wxFileDialog( wxASSERT_MSG( NavServicesAvailable() , wxT("Navigation Services are not running") ) ; } +void wxFileDialog::SetupExtraControls(WXWindow nativeWindow) +{ + wxNonOwnedWindow::Create( GetParent(), nativeWindow ); + + if (HasExtraControlCreator()) + { + CreateExtraControl(); + } +} + int wxFileDialog::ShowModal() { m_paths.Empty(); @@ -531,12 +538,7 @@ int wxFileDialog::ShowModal() &dialog ); } - wxNonOwnedWindow::Create( GetParent(), NavDialogGetWindow(dialog) ); - - if (HasExtraControlCreator()) - { - CreateExtraControl(); - } + SetupExtraControls(NavDialogGetWindow(dialog)); if (err == noErr) err = ::NavDialogRun(dialog); diff --git a/src/osx/cocoa/filedlg.mm b/src/osx/cocoa/filedlg.mm index cf11f2c056..4d5aaad01f 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,16 @@ int wxFileDialog::ShowModal() returnCode = [sPanel runModalForDirectory:dir.AsNSString() file:file.AsNSString() ]; ModalFinishedCallback(sPanel, returnCode); + + [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 +295,8 @@ int wxFileDialog::ShowModal() ModalFinishedCallback(oPanel, returnCode); + [oPanel setAccessoryView:nil]; + if ( types != nil ) [types release]; } @@ -308,6 +345,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 -- 2.45.2