added a tiny class to call Freeze/Thaw in ctor/dtor

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37842 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2006-03-07 01:50:21 +00:00
parent c81c9392fa
commit 9d3cb3f369
3 changed files with 107 additions and 0 deletions

View File

@@ -689,6 +689,10 @@ a wxTextCtrl under wxGTK) but is not implemented on all platforms nor for all
controls so it is mostly just a hint to wxWidgets and not a mandatory
directive.
\wxheading{See also}
\helpref{wxWindowUpdateLocker}{wxwindowupdatelocker}
\membersection{wxWindow::GetAcceleratorTable}\label{wxwindowgetacceleratortable}
@@ -3411,6 +3415,10 @@ Reenables window updating after a previous call to
\helpref{Freeze}{wxwindowfreeze}. To really thaw the control, it must be called
exactly the same number of times as \helpref{Freeze}{wxwindowfreeze}.
\wxheading{See also}
\helpref{wxWindowUpdateLocker}{wxwindowupdatelocker}
\membersection{wxWindow::TransferDataFromWindow}\label{wxwindowtransferdatafromwindow}

View File

@@ -0,0 +1,62 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Name: wupdlock.tex
%% Purpose: wxWindowUpdateLocker documentation
%% Author: Vadim Zeitlin
%% Modified by:
%% Created: 2006-03-06
%% RCS-ID: $Id$
%% Copyright: (c) 2006 Vadim Zeitlin <vadim@wxwindows.org>
%% License: wxWindows license
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{\class{wxWindowUpdateLocker}}\label{wxwindowupdatelocker}
This tiny class prevents redrawing of a \helpref{wxWindow}{wxwindow} during its
lifetime by using \helpref{wxWindow::Freeze}{wxwindowfreeze} and
\helpref{Thaw}{wxwindowthaw} methods. It is typically used for creating
automatic objects to temporarily suppress window updates before a batch of
operations is performed:
{\small
\begin{verbatim}
void MyFrame::Foo()
{
m_text = new wxTextCtrl(this, ...);
wxWindowUpdateLocker noUpdates(m_text);
m_text->AppendText();
... many other operations with m_text...
m_text->WriteText();
}
\end{verbatim}
}
Using this class is easier and safer than calling
\helpref{Freeze}{wxwindowfreeze} and \helpref{Thaw}{wxwindowthaw} because you
don't risk to forget calling the latter.
\wxheading{Derived from}
None.
\wxheading{Include files}
<wx/wupdlock.h>
\latexignore{\rtfignore{\wxheading{Members}}}
\membersection{wxWindowUpdateLocker::wxWindowUpdateLocker}\label{wxwindowupdatelockerctor}
\func{}{wxWindowUpdateLocker}{\param{wxWindow *}{win}}
Creates an object preventing the updates of the specified \arg{win}. The
parameter must be non-\NULL and the window must exist for longer than
wxWindowUpdateLocker object itself.
\membersection{wxWindowUpdateLocker::\destruct{wxWindowUpdateLocker}}\label{wxwindowupdatelockerdtor}
\func{}{\destruct{wxWindowUpdateLocker}}{\void}
Destructor reenables updates for the window this object is associated with.

37
include/wx/wupdlock.h Normal file
View File

@@ -0,0 +1,37 @@
///////////////////////////////////////////////////////////////////////////////
// Name: wx/wupdlock.h
// Purpose: wxWindowUpdateLocker prevents window redrawing
// Author: Vadim Zeitlin
// Created: 2006-03-06
// RCS-ID: $Id$
// Copyright: (c) 2006 Vadim Zeitlin <vadim@wxwindows.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_WUPDLOCK_H_
#define _WX_WUPDLOCK_H_
#include "wx/window.h"
// ----------------------------------------------------------------------------
// wxWindowUpdateLocker prevents updates to the window during its lifetime
// ----------------------------------------------------------------------------
class wxWindowUpdateLocker
{
public:
// create an object preventing updates of the given window (which must have
// a lifetime at least as great as ours)
wxWindowUpdateLocker(wxWindow *win) : m_win(win) { win->Freeze(); }
// dtor thaws the window to permit updates again
~wxWindowUpdateLocker() { m_win->Thaw(); }
private:
wxWindow *m_win;
DECLARE_NO_COPY_CLASS(wxWindowUpdateLocker)
};
#endif // _WX_WUPDLOCK_H_