From 4d572a2cace8d11a10ecea598ff342c36ec007cf Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Mon, 25 Jan 2010 22:27:42 +0000 Subject: [PATCH] simplifying code, removing outdated API git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63266 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/osx/dialog.h | 13 ++++-- src/osx/carbon/dialog.cpp | 7 +--- src/osx/cocoa/dialog.mm | 8 +--- src/osx/dialog_osx.cpp | 83 ++++++++++++++++++++------------------- 4 files changed, 53 insertions(+), 58 deletions(-) diff --git a/include/wx/osx/dialog.h b/include/wx/osx/dialog.h index 2544d290bb..17195a318a 100644 --- a/include/wx/osx/dialog.h +++ b/include/wx/osx/dialog.h @@ -50,10 +50,10 @@ public: // virtual bool Destroy(); virtual bool Show(bool show = true); - void SetModal(bool flag); + // return true if we're showing the dialog modally virtual bool IsModal() const; - // For now, same as Show(TRUE) but returns return code + // show the dialog modally and return the value passed to EndModal() virtual int ShowModal(); virtual void ShowWindowModal(); @@ -64,10 +64,15 @@ public: // implementation // -------------- + wxDialogModality GetModality() const; + +protected: // show modal dialog and enter modal loop void DoShowModal(); + + // show modal dialog and enter modal loop + void DoShowWindowModal(); -protected: // mac also takes command-period as cancel virtual bool IsEscapeKey(const wxKeyEvent& event); @@ -77,7 +82,7 @@ protected: private: void Init(); - bool m_isModalStyle; + wxDialogModality m_modality; }; #endif diff --git a/src/osx/carbon/dialog.cpp b/src/osx/carbon/dialog.cpp index a177006380..ad1c947965 100644 --- a/src/osx/carbon/dialog.cpp +++ b/src/osx/carbon/dialog.cpp @@ -23,14 +23,12 @@ #include "wx/osx/private.h" #include "wx/evtloop.h" -extern wxList wxModalDialogs; - void wxDialog::EndWindowModal() { // Nothing to do for now. } -void wxDialog::ShowWindowModal() +void wxDialog::DoShowWindowModal() { // If someone wants to add support for this to wxOSX Carbon, here would // be the place to start: http://trac.wxwidgets.org/ticket/9459 @@ -41,9 +39,6 @@ void wxDialog::ShowWindowModal() void wxDialog::DoShowModal() { - wxCHECK_RET( !IsModal(), wxT("DoShowModal() called twice") ); - - wxModalDialogs.Append(this); SetFocus() ; diff --git a/src/osx/cocoa/dialog.mm b/src/osx/cocoa/dialog.mm index 47a50ba404..42b4dcd35b 100644 --- a/src/osx/cocoa/dialog.mm +++ b/src/osx/cocoa/dialog.mm @@ -24,7 +24,7 @@ extern wxList wxModalDialogs; -void wxDialog::ShowWindowModal() +void wxDialog::DoShowWindowModal() { wxTopLevelWindow* parent = static_cast(wxGetTopLevelParent(GetParent())); @@ -32,8 +32,6 @@ void wxDialog::ShowWindowModal() NSWindow* parentWindow = parent->GetWXWindow(); NSWindow* theWindow = GetWXWindow(); - - wxWindow::Show(true); [NSApp beginSheet: theWindow modalForWindow: parentWindow @@ -49,8 +47,6 @@ void wxDialog::EndWindowModal() void wxDialog::DoShowModal() { - wxCHECK_RET( !IsModal(), wxT("DoShowModal() called twice") ); - // If the app hasn't started, flush the event queue // If we don't do this, the Dock doesn't get the message that // the app has started so will refuse to activate it. @@ -64,8 +60,6 @@ void wxDialog::DoShowModal() } } - wxModalDialogs.Append(this); - SetFocus() ; /* WindowGroupRef windowGroup; diff --git a/src/osx/dialog_osx.cpp b/src/osx/dialog_osx.cpp index df4e2a4cc7..02bde473d3 100644 --- a/src/osx/dialog_osx.cpp +++ b/src/osx/dialog_osx.cpp @@ -32,7 +32,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxDialog, wxTopLevelWindow) void wxDialog::Init() { - m_isModalStyle = false; + m_modality = wxDIALOG_MODALITY_NONE; } bool wxDialog::Create( wxWindow *parent, @@ -57,18 +57,6 @@ bool wxDialog::Create( wxWindow *parent, return true; } -void wxDialog::SetModal( bool flag ) -{ - if ( flag ) - { - m_isModalStyle = true; - } - else - { - m_isModalStyle = false; - } -} - wxDialog::~wxDialog() { SendDestroyEvent(); @@ -89,16 +77,23 @@ bool wxDialog::IsEscapeKey(const wxKeyEvent& event) bool wxDialog::IsModal() const { - return wxModalDialogs.Find((wxDialog *)this) != NULL; // const_cast - // return m_isModalStyle; + return m_modality != wxDIALOG_MODALITY_NONE; } - bool wxDialog::Show(bool show) { - if ( !wxDialogBase::Show(show) ) - // nothing to do - return false; + if ( m_modality == wxDIALOG_MODALITY_WINDOW_MODAL ) + { + if ( !wxWindow::Show(show) ) + // nothing to do + return false; + } + else + { + if ( !wxDialogBase::Show(show) ) + // nothing to do + return false; + } if (show && CanDoLayoutAdaptation()) DoLayoutAdaptation(); @@ -107,48 +102,54 @@ bool wxDialog::Show(bool show) // usually will result in TransferDataToWindow() being called InitDialog(); - if ( m_isModalStyle ) + if ( !show ) { - if ( show ) - { - DoShowModal(); - } - else // end of modal dialog + switch( m_modality ) { - // this will cause IsModalShowing() return false and our local - // message loop will terminate - wxModalDialogs.DeleteObject(this); + case wxDIALOG_MODALITY_WINDOW_MODAL: + EndWindowModal(); // OS X implementation method for cleanup + SendWindowModalDialogEvent ( wxEVT_WINDOW_MODAL_DIALOG_CLOSED ); + break; + default: + break; } + m_modality = wxDIALOG_MODALITY_NONE; } - + return true; } // Replacement for Show(true) for modal dialogs - returns return code int wxDialog::ShowModal() { - if ( !m_isModalStyle ) - SetModal(true); + m_modality = wxDIALOG_MODALITY_WINDOW_MODAL; + + Show(); - if ( IsShown() ) - DoShowModal(); - else - Show(true); + DoShowModal(); return GetReturnCode(); } +void wxDialog::ShowWindowModal() +{ + m_modality = wxDIALOG_MODALITY_WINDOW_MODAL; + + Show(); + + DoShowWindowModal(); +} + +wxDialogModality wxDialog::GetModality() const +{ + return m_modality; +} + // NB: this function (surprisingly) may be called for both modal and modeless // dialogs and should work for both of them void wxDialog::EndModal(int retCode) { SetReturnCode(retCode); Show(false); - SetModal(false); - if (GetModality() == wxDIALOG_MODALITY_WINDOW_MODAL) - { - EndWindowModal(); // OS X implementation method for cleanup - SendWindowModalDialogEvent ( wxEVT_WINDOW_MODAL_DIALOG_CLOSED ); - } } -- 2.45.2