\twocolitem{\helpref{wxHashSet<T>}{wxhashset}}{A type-safe hash set implementation(macro based)}
\twocolitem{\helpref{wxHashTable}{wxhashtable}}{A simple hash table implementation (deprecated, use wxHashMap)}
\twocolitem{\helpref{wxList<T>}{wxlist}}{A type-safe linked list implementation (macro based)}
-\twocolitem{\helpref{wxVector<T>}{wxvector}}{Template base vector implementation}
+\twocolitem{\helpref{wxVector<T>}{wxvector}}{Template base vector implementation identical to std::vector}
+\end{twocollist}
+
+{\large {\bf Smart pointers}}
+
+wxWidgets provides a few smart pointer class templates.
+
+\twocolwidtha{6cm}
+\begin{twocollist}\itemsep=0pt
+\twocolitem{\helpref{wxWeakRef<T>}{wxweakref}}{A weak reference}
+\twocolitem{\helpref{wxObjectDataPtr<T>}{wxobjectdataptr}}{A shared pointer using intrusive reference counting}
\end{twocollist}
{\large {\bf Run-time class information system}}
\input toolbook.tex
\input tooltip.tex
\input tlw.tex
+\input trackable.tex
\input treebook.tex
\input treebookevent.tex
\input treectrl.tex
\input createevt.tex
\input windowdc.tex
\input destroyevt.tex
+\input weakref.tex
\input wnddisbl.tex
\input wizard.tex
\input wizevt.tex
\section{\class{wxList<T>}}\label{wxlist}
-The wxList<T> class provides linked list functionality. It has been written
+The wxList<T> class provides linked list functionality. It has been rewritten
to be type safe and to provide the full API of the STL std::list container and
should be used like it. The exception is that wxList<T> actually stores
pointers and therefore its iterators return pointers and not references
to the actual objets in the list (see example below) and {\it value\_type}
-is defined as {\it T*}.
+is defined as {\it T*}. wxList<T> destroys an object after removing it only
+if \helpref{DeleteContents}{wxlistdeletecontents} has been called.
-
-Unfortunately, the
-new wxList<T> class requires that you declare and define each wxList<T>
-class in your program. This is done with {\it WX\_DECLARE\_LIST} and
-{\it WX\_DEFINE\_LIST} macros (see example). We hope that we'll be able
+wxList<T> is not a real template and it requires that you declare and define
+each wxList<T> class in your program. This is done with {\it WX\_DECLARE\_LIST}
+and {\it WX\_DEFINE\_LIST} macros (see example). We hope that we'll be able
to provide a proper template class providing both the STL std::list
and the old wxList API in the future.
--- /dev/null
+
+\section{\class{wxTrackableBase}}\label{wxtrackablebase}
+
+Add-on base class for a trackable object. This class maintains
+an internal linked list of classes of type wxTrackerNode and
+calls OnObjectDestroy() on them if this object is destroyed.
+The most common usage is by using the \helpref{wxWeakRef<T>}{wxweakref}
+class template which automates this. This class has no public
+API. Its only use is by deriving another class from it to
+make it trackable.
+
+\begin{verbatim}
+class MyClass: public Foo, public TrackableBase
+{
+ // whatever
+}
+
+typedef wxWeakRef<MyClass> MyClassRef;
+\end{verbatim}
+
+\wxheading{Derived from}
+
+No base class
+
+\wxheading{Include files}
+
+<tracker.h>
+
+\wxheading{Data structures}
+
+
+\section{\class{wxTrackable}}\label{wxtrackable}
+
+The only difference to \helpref{wxTrackableBase}{wxtrackablebase} is
+that this class adds a virtual table to enable dynamic\_cast query for
+wxTrackable.
+
+\wxheading{Derived from}
+
+\helpref{wxTrackableBase}{wxtrackablebase}
+
+\wxheading{Include files}
+
+<tracker.h>
+
+\wxheading{Data structures}
+
+
\section{\class{wxVector<T>}}\label{wxvector}
-wxVector is a template which implements most of the std::vector
-class and can be used like. If wxWidgets is compiled in STL mode,
-wxVector will just be a typedef to std::vector. You should
-refer to the STL documentation for further information.
+wxVector<T> is a template class which implements most of the std::vector
+class and can be used like it. If wxWidgets is compiled in STL mode,
+wxVector will just be a typedef to std::vector. Just like for std::vector,
+objects stored in wxVector<T> need to be {\it assignable} but don't have to
+be {\it default constructible}.
+
+You can refer to the STL documentation for further information.
\wxheading{Derived from}
--- /dev/null
+\section{\class{wxWeakRef<T>}}\label{wxweakref}
+
+A weak reference to an object of type T, where T has type
+\helpref{wxTrackableBase}{wxTrackableBase} as one of its
+base classes (in a static or dynamic sense).
+
+\begin{verbatim}
+class MyClass: public Foo, public TrackableBase
+{
+ // whatever
+}
+
+typedef wxWeakRef<MyClass> MyClassRef;
+\end{verbatim}
+
+\wxheading{Derived from}
+
+wxTrackerNode
+
+\wxheading{Include files}
+
+<weakref.h>
+
+\wxheading{Data structures}
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+
+\membersection{wxWeakRef<T>::wxWeakRef<T>}\label{wxweakrefwxweakref}
+
+\func{}{wxWeakRef<T>}{\param{T* }{pobj = NULL}}
+
+Constructor.
+
+\membersection{wxWeakRef<T>::\destruct{wxWeakRef<T>}}\label{wxweakrefdtor}
+
+\func{}{\destruct{wxWeakRef<T>}}{\void}
+
+Destructor.
+
+\membersection{wxWeakRef<T>::T*}\label{wxweakreft}
+
+\func{operator}{T*}{\void}
+
+Returns pointer to tracked object or NULL.
+
+\membersection{wxWeakRef<T>::operator->}\label{wxweakrefoperatorderef}
+
+\func{T*}{operator->}{\void}
+
+Returns pointer to tracked object or NULL.
+
+\membersection{wxWeakRef<T>::operator=}\label{wxweakrefoperatorassign}
+
+\func{T* operator}{operator=}{\param{T* }{pobj}}
+
+Assigns pointer to trackable object to this weak reference.
+
+\membersection{wxWeakRef<T>::Assign}\label{wxweakrefassign}
+
+\func{void}{Assign}{\param{T* }{pobj}}
+
+This uses static\_cast if possible or dynamic\_cast otherwise.
+
+\membersection{wxWeakRef<T>::GetTrackable}\label{wxweakrefgettrackable}
+
+\func{wxTrackableBase*}{GetTrackable}{\param{T* }{pobj}}
+
+Returns the trackable objects to which the weak reference
+points or NULL if it has been destroyed.
+
+\membersection{wxWeakRef<T>::OnObjectDestroy}\label{wxweakrefonobjectdestroy}
+
+\func{virtual void}{OnObjectDestroy}{\void}
+
+Called when the tracked object is destroyed. Be default sets
+internal pointer to NULL.
+