X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d77df9f7d023b026a7bbe995ddd36cfdbe07e3d5..c9ccc09c64f4c29d4667796bef7b507d9e8d25ed:/include/wx/persist.h diff --git a/include/wx/persist.h b/include/wx/persist.h index ff2aabab10..68097fbcbe 100644 --- a/include/wx/persist.h +++ b/include/wx/persist.h @@ -47,6 +47,11 @@ public: // accessor to the unique persistence manager object static wxPersistenceManager& Get(); + // trivial but virtual dtor + // + // FIXME-VC6: this only needs to be public because of VC6 bug + virtual ~wxPersistenceManager(); + // globally disable restoring or saving the persistent properties (both are // enabled by default) @@ -77,7 +82,7 @@ public: // deletes the associated wxPersistentObject void Unregister(void *obj); - + // save/restore the state of an object // // these methods do nothing if DisableSaving/Restoring() was called @@ -136,6 +141,7 @@ private: m_doRestore = true; } + // helpers of Save/Restore() // // TODO: make this customizable by allowing @@ -155,7 +161,7 @@ private: bool m_doSave, m_doRestore; - DECLARE_NO_COPY_CLASS(wxPersistenceManager) + wxDECLARE_NO_COPY_CLASS(wxPersistenceManager); }; // ---------------------------------------------------------------------------- @@ -212,8 +218,36 @@ protected: private: void * const m_obj; - DECLARE_NO_COPY_CLASS(wxPersistentObject) + wxDECLARE_NO_COPY_CLASS(wxPersistentObject); }; +// FIXME-VC6: VC6 has troubles with template methods of DLL-exported classes, +// apparently it believes they should be defined in the DLL (which +// is, of course, impossible as the DLL doesn't know for which types +// will they be instantiated) instead of compiling them when +// building the main application itself. Because of this problem +// (which only arises in debug build!) we can't use the usual +// RegisterAndRestore(obj) with it and need to explicitly create the +// persistence adapter. To hide this ugliness we define a global +// function which does it for us. +template +inline bool wxPersistentRegisterAndRestore(T *obj) +{ + wxPersistentObject * const pers = wxCreatePersistentObject(obj); + + return wxPersistenceManager::Get().RegisterAndRestore(obj, pers); + +} + +// A helper function which also sets the name for the (wxWindow-derived) object +// before registering and restoring it. +template +inline bool wxPersistentRegisterAndRestore(T *obj, const wxString& name) +{ + obj->SetName(name); + + return wxPersistentRegisterAndRestore(obj); +} + #endif // _WX_PERSIST_H_