wx/valnum.h \
wx/window.h \
wx/windowid.h \
+ wx/windowptr.h \
wx/withimages.h \
wx/wrapsizer.h \
wx/wupdlock.h \
wx/valnum.h
wx/window.h
wx/windowid.h
+ wx/windowptr.h
wx/withimages.h
wx/wrapsizer.h
wx/wupdlock.h
# End Source File\r
# Begin Source File\r
\r
+SOURCE=..\..\include\wx\windowptr.h\r
+# End Source File\r
+# Begin Source File\r
+\r
SOURCE=..\..\include\wx\withimages.h\r
# End Source File\r
# Begin Source File\r
<ClInclude Include="..\..\include\wx\persist\window.h" />\r
<ClInclude Include="..\..\include\wx\window.h" />\r
<ClInclude Include="..\..\include\wx\windowid.h" />\r
+ <ClInclude Include="..\..\include\wx\windowptr.h" />\r
<ClInclude Include="..\..\include\wx\withimages.h" />\r
<ClInclude Include="..\..\include\wx\wizard.h" />\r
<ClInclude Include="..\..\include\wx\wrapsizer.h" />\r
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
<ImportGroup Label="ExtensionTargets">\r
</ImportGroup>\r
-</Project>
\ No newline at end of file
+</Project>
<ClInclude Include="..\..\include\wx\xpmhand.h">\r
<Filter>Common Headers</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\..\include\wx\windowptr.h">\r
+ <Filter>Common Headers</Filter>\r
+ </ClInclude>\r
</ItemGroup>\r
<ItemGroup>\r
<CustomBuild Include="..\..\include\wx\msw\setup.h">\r
<File\r
RelativePath="..\..\include\wx\windowid.h">\r
</File>\r
+ <File\r
+ RelativePath="..\..\include\wx\windowptr.h">\r
+ </File>\r
<File\r
RelativePath="..\..\include\wx\withimages.h">\r
</File>\r
RelativePath="..\..\include\wx\windowid.h"\r
>\r
</File>\r
+ <File\r
+ RelativePath="..\..\include\wx\windowptr.h"\r
+ >\r
+ </File>\r
<File\r
RelativePath="..\..\include\wx\withimages.h"\r
>\r
RelativePath="..\..\include\wx\windowid.h"\r
>\r
</File>\r
+ <File\r
+ RelativePath="..\..\include\wx\windowptr.h"\r
+ >\r
+ </File>\r
<File\r
RelativePath="..\..\include\wx\withimages.h"\r
>\r
--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// Name: wx/windowptr.h
+// Purpose: smart pointer for holding wxWindow instances
+// Author: Vaclav Slavik
+// Created: 2013-09-01
+// Copyright: (c) 2013 Vaclav Slavik
+// Licence: wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_WINDOWPTR_H_
+#define _WX_WINDOWPTR_H_
+
+#include "wx/sharedptr.h"
+
+// ----------------------------------------------------------------------------
+// wxWindowPtr: A smart pointer with correct wxWindow destruction.
+// ----------------------------------------------------------------------------
+
+namespace wxPrivate
+{
+
+struct wxWindowDeleter
+{
+ void operator()(wxWindow *win)
+ {
+ win->Destroy();
+ }
+};
+
+} // namespace wxPrivate
+
+template<typename T>
+class wxWindowPtr : public wxSharedPtr<T>
+{
+public:
+ typedef T element_type;
+
+ wxEXPLICIT wxWindowPtr(element_type* win)
+ : wxSharedPtr<T>(win, wxPrivate::wxWindowDeleter())
+ {
+ }
+
+ wxWindowPtr() {}
+ wxWindowPtr(const wxWindowPtr& tocopy) : wxSharedPtr<T>(tocopy) {}
+
+ wxWindowPtr& operator=(const wxWindowPtr& tocopy)
+ {
+ wxSharedPtr<T>::operator=(tocopy);
+ return *this;
+ }
+
+ wxWindowPtr& operator=(element_type* win)
+ {
+ return operator=(wxWindowPtr(win));
+ }
+
+ void reset(T* ptr = NULL)
+ {
+ wxSharedPtr<T>::reset(ptr, wxPrivate::wxWindowDeleter());
+ }
+};
+
+#endif // _WX_WINDOWPTR_H_
--- /dev/null
+///////////////////////////////////////////////////////////////////////////////
+// Name: interface/wx/windowptr.h
+// Purpose: wxWindowPtr<T> class documentation.
+// Author: Vaclav Slavik
+// Created: 2013-09-02
+// Copyright: (c) 2013 Vaclav Slavik <vslavik@fastmail.fm>
+// Licence: wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ A reference-counted smart pointer for holding wxWindow instances.
+
+ This specialization of wxSharedPtr<T> is useful for holding
+ wxWindow-derived objects. Unlike wxSharedPtr<T> or @c std::shared_ptr<>, it
+ doesn't use the delete operator to destroy the value when reference count
+ drops to zero, but calls wxWindow::Destroy() to safely destroy the window.
+
+ The template parameter T must be wxWindow or a class derived from it.
+
+ @library{wxcore}
+ @category{smartpointers}
+
+ @since 3.0
+
+ @see wxSharedPtr<T>
+*/
+template<typename T>
+class wxWindowPtr<T> : public wxSharedPtr<T>
+{
+public:
+ /// Default constructor.
+ wxWindowPtr();
+
+ /**
+ Constructor.
+
+ Creates shared pointer from the raw pointer @a ptr and takes ownership
+ of it.
+ */
+ explicit wxWindowPtr(T* ptr);
+
+ /**
+ Constructor.
+
+ Creates shared pointer from the raw pointer @a ptr and deleter @a d
+ and takes ownership of it.
+
+ @param ptr The raw pointer.
+ @param d Deleter - a functor that is called instead of delete to
+ free the @a ptr raw pointer when its reference count drops to
+ zero.
+
+ */
+ template<typename Deleter>
+ explicit wxWindowPtr(T* ptr, Deleter d);
+
+ /// Copy constructor.
+ wxWindowPtr(const wxWindowPtr<T>& tocopy);
+
+ /**
+ Assignment operator.
+
+ Releases any previously held pointer and creates a reference to @a ptr.
+ */
+ wxWindowPtr<T>& operator=(T* ptr);
+
+ /**
+ Assignment operator.
+
+ Releases any previously held pointer and creates a reference to the
+ same object as @a topcopy.
+ */
+ wxWindowPtr<T>& operator=(const wxWindowPtr<T>& tocopy);
+
+ /**
+ Reset pointer to @a ptr.
+
+ If the reference count of the previously owned pointer was 1 it will be deleted.
+ */
+ void reset(T* ptr = NULL);
+};
+