X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7d15ffcdb92677628179d022977cf16d36a15c84..38534f596974042130716a26276e9564b0b72295:/include/wx/persist.h diff --git a/include/wx/persist.h b/include/wx/persist.h index 02c9607c10..18bcdc2d79 100644 --- a/include/wx/persist.h +++ b/include/wx/persist.h @@ -44,6 +44,14 @@ wxPersistentObject *wxCreatePersistentObject(T *obj); class WXDLLIMPEXP_CORE wxPersistenceManager { public: + // Call this method to specify a non-default persistence manager to use. + // This function should usually be called very early to affect creation of + // all persistent controls and the object passed to it must have a lifetime + // long enough to be still alive when the persistent controls are destroyed + // and need it to save their state so typically this would be a global or a + // wxApp member. + static void Set(wxPersistenceManager& manager); + // accessor to the unique persistence manager object static wxPersistenceManager& Get(); @@ -133,7 +141,7 @@ public: #undef wxPERSIST_DECLARE_SAVE_RESTORE_FOR -private: +protected: // ctor is private, use Get() wxPersistenceManager() { @@ -142,15 +150,18 @@ private: } - // helpers of Save/Restore() - // - // TODO: make this customizable by allowing - // (a) specifying custom wxConfig object to use - // (b) allowing to use something else entirely - wxConfigBase *GetConfig() const { return wxConfigBase::Get(); } - wxString GetKey(const wxPersistentObject& who, const wxString& name) const; + // Return the config object to use, by default just the global one but a + // different one could be used by the derived class if needed. + virtual wxConfigBase *GetConfig() const { return wxConfigBase::Get(); } + + // Return the path to use for saving the setting with the given name for + // the specified object (notice that the name is the name of the setting, + // not the name of the object itself which can be retrieved with GetName()). + virtual wxString GetKey(const wxPersistentObject& who, + const wxString& name) const; +private: // map with the registered objects as keys and associated // wxPersistentObjects as values wxPersistentObjectsMap m_persistentObjects; @@ -161,7 +172,7 @@ private: bool m_doSave, m_doRestore; - DECLARE_NO_COPY_CLASS(wxPersistenceManager) + wxDECLARE_NO_COPY_CLASS(wxPersistenceManager); }; // ---------------------------------------------------------------------------- @@ -218,7 +229,7 @@ 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, @@ -239,5 +250,15 @@ inline bool wxPersistentRegisterAndRestore(T *obj) } +// 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_