]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/persist.h
Don't define __STRICT_ANSI__, we should build both with and without it.
[wxWidgets.git] / include / wx / persist.h
index 392bf53d9b089618fa3b53bfb0435e109790d7da..45ed61eb9eaee6cec139258b84389877699c6136 100644 (file)
@@ -3,7 +3,6 @@
 // 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
 ///////////////////////////////////////////////////////////////////////////////
@@ -44,9 +43,22 @@ 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();
 
+    // 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)
@@ -128,7 +140,7 @@ public:
 
 #undef wxPERSIST_DECLARE_SAVE_RESTORE_FOR
 
-private:
+protected:
     // ctor is private, use Get()
     wxPersistenceManager()
     {
@@ -136,19 +148,19 @@ private:
         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;
@@ -159,7 +171,7 @@ private:
     bool m_doSave,
          m_doRestore;
 
-    DECLARE_NO_COPY_CLASS(wxPersistenceManager)
+    wxDECLARE_NO_COPY_CLASS(wxPersistenceManager);
 };
 
 // ----------------------------------------------------------------------------
@@ -216,7 +228,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,
@@ -237,5 +249,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 <typename T>
+inline bool wxPersistentRegisterAndRestore(T *obj, const wxString& name)
+{
+    obj->SetName(name);
+
+    return wxPersistentRegisterAndRestore(obj);
+}
+
 #endif // _WX_PERSIST_H_