]> git.saurik.com Git - wxWidgets.git/commitdiff
added wxWindowDisabler ctor for conditionally disabling all windows and use it in...
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 22 Mar 2008 03:06:57 +0000 (03:06 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 22 Mar 2008 03:06:57 +0000 (03:06 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52671 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/utils.h
interface/utils.h
src/common/utilscmn.cpp
src/unix/utilsunx.cpp

index bba48e566ae93d5cfc3c1e3b724287bccc2936a9..95cf1a6ada8cc27ce91f02fb1340ca93505044a2 100644 (file)
@@ -649,16 +649,28 @@ WXDLLEXPORT bool wxCheckForInterrupt(wxWindow *wnd);
 // 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;
+    bool m_disabled;
 
     DECLARE_NO_COPY_CLASS(wxWindowDisabler)
 };
 
     DECLARE_NO_COPY_CLASS(wxWindowDisabler)
 };
index 67e68ccad56d3b8696e206d5d190e166d18064fb..c29bbd8dfb6dce8a8c084c7d53acec618a861d21 100644 (file)
@@ -12,7 +12,8 @@
 
     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.
index dd052b5c907167f076bca61c6ec9548e6134304e..2e8c64bfe64d7ec16e945346689ee98a3eb0f290 100644 (file)
@@ -1561,7 +1561,20 @@ void wxEnableTopLevelWindows(bool enable)
         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
@@ -1593,6 +1606,9 @@ wxWindowDisabler::wxWindowDisabler(wxWindow *winToSkip)
 
 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() )
     {
index e47af5bf5537aa2ffafbaff4e6010c6014119868..d1ea16acc73974873d1c34b88df05791813c0971 100644 (file)
@@ -1447,8 +1447,7 @@ int wxGUIAppTraits::WaitForChild(wxExecuteData& execData)
     // 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
@@ -1480,8 +1479,6 @@ int wxGUIAppTraits::WaitForChild(wxExecuteData& execData)
         wxYield();
     }
 
         wxYield();
     }
 
-    delete wd;
-
     return endProcData.exitcode;
 }
 
     return endProcData.exitcode;
 }