From 9d3cb3f36936cbed12b5bed7faa5a70630843d82 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Tue, 7 Mar 2006 01:50:21 +0000 Subject: [PATCH] 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 --- docs/latex/wx/window.tex | 8 +++++ docs/latex/wx/wupdlock.tex | 62 ++++++++++++++++++++++++++++++++++++++ include/wx/wupdlock.h | 37 +++++++++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 docs/latex/wx/wupdlock.tex create mode 100644 include/wx/wupdlock.h diff --git a/docs/latex/wx/window.tex b/docs/latex/wx/window.tex index a718081c98..ce35f652a9 100644 --- a/docs/latex/wx/window.tex +++ b/docs/latex/wx/window.tex @@ -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} diff --git a/docs/latex/wx/wupdlock.tex b/docs/latex/wx/wupdlock.tex new file mode 100644 index 0000000000..1ca160ad2a --- /dev/null +++ b/docs/latex/wx/wupdlock.tex @@ -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 +%% 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} + + + +\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. + diff --git a/include/wx/wupdlock.h b/include/wx/wupdlock.h new file mode 100644 index 0000000000..cc1b423e9e --- /dev/null +++ b/include/wx/wupdlock.h @@ -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 +// 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_ + -- 2.47.2