| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- ///////////////////////////////////////////////////////////////////////////////
- // Name: wx/persist/window.h
- // Purpose: wxPersistentWindow declaration
- // Author: Vadim Zeitlin
- // Created: 2009-01-23
- // Copyright: (c) 2009 Vadim Zeitlin <vadim@wxwidgets.org>
- // Licence: wxWindows licence
- ///////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_PERSIST_WINDOW_H_
- #define _WX_PERSIST_WINDOW_H_
- #include "wx/persist.h"
- #include "wx/window.h"
- // ----------------------------------------------------------------------------
- // wxPersistentWindow: base class for persistent windows, uses the window name
- // as persistent name by default and automatically reacts
- // to the window destruction
- // ----------------------------------------------------------------------------
- // type-independent part of wxPersistentWindow
- class wxPersistentWindowBase :
- wxBIND_OR_CONNECT_HACK_BASE_CLASS
- public wxPersistentObject
- {
- public:
- wxPersistentWindowBase(wxWindow *win)
- : wxPersistentObject(win)
- {
- wxBIND_OR_CONNECT_HACK(win, wxEVT_DESTROY, wxWindowDestroyEventHandler,
- wxPersistentWindowBase::HandleDestroy, this);
- }
- virtual wxString GetName() const
- {
- const wxString name = GetWindow()->GetName();
- wxASSERT_MSG( !name.empty(), "persistent windows should be named!" );
- return name;
- }
- protected:
- wxWindow *GetWindow() const { return static_cast<wxWindow *>(GetObject()); }
- private:
- void HandleDestroy(wxWindowDestroyEvent& event)
- {
- event.Skip();
- // only react to the destruction of this object itself, not of any of
- // its children
- if ( event.GetEventObject() == GetObject() )
- {
- // this will delete this object itself
- wxPersistenceManager::Get().SaveAndUnregister(GetWindow());
- }
- }
- wxDECLARE_NO_COPY_CLASS(wxPersistentWindowBase);
- };
- template <class T>
- class wxPersistentWindow : public wxPersistentWindowBase
- {
- public:
- typedef T WindowType;
- wxPersistentWindow(WindowType *win)
- : wxPersistentWindowBase(win)
- {
- }
- WindowType *Get() const { return static_cast<WindowType *>(GetWindow()); }
- };
- #endif // _WX_PERSIST_WINDOW_H_
|