// Purpose: common classes for persistence support
// Author: Vadim Zeitlin
// Created: 2009-01-18
-// RCS-ID: $Id$
// Copyright: (c) 2009 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
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();
+ // 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)
#undef wxPERSIST_DECLARE_SAVE_RESTORE_FOR
-private:
+protected:
// ctor is private, use Get()
wxPersistenceManager()
{
m_doRestore = true;
}
- // trivial but virtual dtor
- virtual ~wxPersistenceManager();
+ // 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(); }
- // 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 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;
bool m_doSave,
m_doRestore;
- DECLARE_NO_COPY_CLASS(wxPersistenceManager)
+ wxDECLARE_NO_COPY_CLASS(wxPersistenceManager);
};
// ----------------------------------------------------------------------------
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,
}
+// A helper function which also sets the name for the (wxWindow-derived) object
+// before registering and restoring it.
+template <typename T>
+inline bool wxPersistentRegisterAndRestore(T *obj, const wxString& name)
+{
+ obj->SetName(name);
+
+ return wxPersistentRegisterAndRestore(obj);
+}
+
#endif // _WX_PERSIST_H_