git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52671
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
// Consume all events until no more left
WXDLLEXPORT void wxFlushEvents();
// Consume all events until no more left
WXDLLEXPORT void wxFlushEvents();
-// a class which disables all windows (except, may be, thegiven one) in its
+// a class which disables all windows (except, may be, the given one) in its
// ctor and enables them back in its dtor
class WXDLLEXPORT wxWindowDisabler
{
public:
// ctor and enables them back in its dtor
class WXDLLEXPORT wxWindowDisabler
{
public:
- wxWindowDisabler(wxWindow *winToSkip = (wxWindow *)NULL);
+ // this ctor conditionally disables all windows: if the argument is false,
+ // it doesn't do anything
+ wxWindowDisabler(bool disable = true);
+
+ // ctor disables all windows except winToSkip
+ wxWindowDisabler(wxWindow *winToSkip);
+
+ // dtor enables back all windows disabled by the ctor
~wxWindowDisabler();
private:
~wxWindowDisabler();
private:
+ // disable all windows except the given one (used by both ctors)
+ void DoDisable(wxWindow *winToSkip = NULL);
+
+
wxWindowList *m_winDisabled;
wxWindowList *m_winDisabled;
DECLARE_NO_COPY_CLASS(wxWindowDisabler)
};
DECLARE_NO_COPY_CLASS(wxWindowDisabler)
};
This class disables all windows of the application (may be with the exception
of one of them) in its constructor and enables them back in its destructor.
This class disables all windows of the application (may be with the exception
of one of them) in its constructor and enables them back in its destructor.
- This comes in handy when you want to indicate to the user that the application
+
+ This is useful when you want to indicate to the user that the application
is currently busy and cannot respond to user input.
@library{wxcore}
is currently busy and cannot respond to user input.
@library{wxcore}
class wxWindowDisabler
{
public:
class wxWindowDisabler
{
public:
+ /**
+ Disables all top level windows of the applications.
+
+ If @a disable is @c false nothing is done. This can be convenient if
+ the windows should be disabled depending on some condition.
+
+ @since 2.9.0
+ */
+ wxWindowDisabler(bool disable = true);
+
/**
Disables all top level windows of the applications with the exception of
@a winToSkip if it is not @NULL.
*/
/**
Disables all top level windows of the applications with the exception of
@a winToSkip if it is not @NULL.
*/
- wxWindowDisabler(wxWindow* winToSkip = NULL);
+ wxWindowDisabler(wxWindow* winToSkip);
/**
Reenables back the windows disabled by the constructor.
/**
Reenables back the windows disabled by the constructor.
node->GetData()->Enable(enable);
}
node->GetData()->Enable(enable);
}
+wxWindowDisabler::wxWindowDisabler(bool disable)
+{
+ m_disabled = disable;
+ if ( disable )
+ DoDisable();
+}
+
wxWindowDisabler::wxWindowDisabler(wxWindow *winToSkip)
wxWindowDisabler::wxWindowDisabler(wxWindow *winToSkip)
+{
+ m_disabled = true;
+ DoDisable(winToSkip);
+}
+
+void wxWindowDisabler::DoDisable(wxWindow *winToSkip)
{
// remember the top level windows which were already disabled, so that we
// don't reenable them later
{
// remember the top level windows which were already disabled, so that we
// don't reenable them later
wxWindowDisabler::~wxWindowDisabler()
{
wxWindowDisabler::~wxWindowDisabler()
{
+ if ( !m_disabled )
+ return;
+
wxWindowList::compatibility_iterator node;
for ( node = wxTopLevelWindows.GetFirst(); node; node = node->GetNext() )
{
wxWindowList::compatibility_iterator node;
for ( node = wxTopLevelWindows.GetFirst(); node; node = node->GetNext() )
{
// prepare to wait for the child termination: show to the user that we're
// busy and refuse all input unless explicitly told otherwise
wxBusyCursor bc;
// prepare to wait for the child termination: show to the user that we're
// busy and refuse all input unless explicitly told otherwise
wxBusyCursor bc;
- wxWindowDisabler *wd = flags & wxEXEC_NODISABLE ? NULL
- : new wxWindowDisabler;
+ wxWindowDisabler wd(!(flags & wxEXEC_NODISABLE));
// endProcData.pid will be set to 0 from wxHandleProcessTermination() when
// the process terminates
// endProcData.pid will be set to 0 from wxHandleProcessTermination() when
// the process terminates
return endProcData.exitcode;
}
return endProcData.exitcode;
}