2013-09-06 13:09:16 -04:00
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// 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;
|
|
|
|
|
2016-08-30 04:44:32 -04:00
|
|
|
explicit wxWindowPtr(element_type* win)
|
2013-09-06 13:09:16 -04:00
|
|
|
: 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_
|