Allow wxPreferencesEditor::Dismiss() to work when using modal dialogs too.

The modal dialog case is not really different, the dialog may still need to be
dismissed if the associated object doesn't exist any longer.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74010 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2013-05-16 14:43:09 +00:00
parent b5c9627778
commit 615f9ff096
3 changed files with 19 additions and 6 deletions

View File

@ -104,8 +104,7 @@ public:
// platform, i.e. depending on whether the dialog is modal or not.
virtual void Show(wxWindow* parent);
// Hide the currently shown dialog, if any. This doesn't do anything on the
// platforms using modal preferences dialogs but should be called to
// Hide the currently shown dialog, if any. This is typically used to
// dismiss the dialog if the object whose preferences it is editing was
// closed.
void Dismiss();

View File

@ -82,9 +82,8 @@ public:
/**
Hide the currently shown dialog, if any.
This doesn't do anything on the platforms using modal preferences
dialogs (e.g. Windows) but should be called to dismiss the dialog if
the object whose preferences it is editing was closed.
This is typically called to dismiss the dialog if the object whose
preferences it is editing was closed.
*/
void Dismiss();

View File

@ -33,6 +33,7 @@
#include "wx/sizer.h"
#include "wx/sharedptr.h"
#include "wx/scopedptr.h"
#include "wx/scopeguard.h"
#include "wx/vector.h"
namespace
@ -193,12 +194,19 @@ class wxModalPreferencesEditorImpl : public wxGenericPreferencesEditorImplBase
public:
wxModalPreferencesEditorImpl()
{
m_dlg = NULL;
m_currentPage = -1;
}
virtual void Show(wxWindow* parent)
{
wxScopedPtr<wxGenericPrefsDialog> dlg(CreateDialog(parent));
// Store it for Dismiss() but ensure that the pointer is reset to NULL
// when the dialog is destroyed on leaving this function.
m_dlg = dlg.get();
wxON_BLOCK_EXIT_NULL(m_dlg);
dlg->Fit();
// Restore the previously selected page, if any.
@ -212,11 +220,18 @@ public:
virtual void Dismiss()
{
// nothing to do
if ( m_dlg )
{
m_dlg->EndModal(wxID_CANCEL);
m_dlg = NULL;
}
}
private:
wxGenericPrefsDialog* m_dlg;
int m_currentPage;
wxDECLARE_NO_COPY_CLASS(wxModalPreferencesEditorImpl);
};
inline