X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0fa541e8706f74887efeba9e475eae618873da2a..b02dd12239c8a59b9a545d9fcb04974f8ad02c6b:/interface/wx/persist.h?ds=inline diff --git a/interface/wx/persist.h b/interface/wx/persist.h index beae4c785f..97e3fb60cb 100644 --- a/interface/wx/persist.h +++ b/interface/wx/persist.h @@ -4,7 +4,7 @@ // Author: Vadim Zeitlin // RCS-ID: $Id$ // Copyright: (c) 2009 Vadim Zeitlin -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// /** @@ -17,13 +17,33 @@ This is a singleton class and its unique instance can be retrieved using Get() method. + @since 2.9.0 + @library{wxcore} */ class wxPersistenceManager { public: + /** + Set the global persistence manager to use. + + Call this method to specify a non-default persistence manager to use. + It should usually be called very early (e.g. in wxApp-derived class + constructor or in the beginning of overridden wxApp::OnInit()) 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. + + @since 2.9.3 + */ + static void Set(wxPersistenceManager& manager); + /** Returns the unique persistence manager object. + + If Set() hadn't been called before, a default persistence manager + implementation is returned. */ static wxPersistenceManager& Get(); @@ -62,10 +82,7 @@ public: defined for the objects of this class. */ template - wxPersistentObject *Register(T *obj) - { - return Register(obj, wxCreatePersistentObject(obj)); - } + wxPersistentObject *Register(T *obj); /** Register an object with the manager. @@ -117,7 +134,7 @@ public: @see SaveAndUnregister() */ void Save(void *obj); - + /** Restore the object properties previously saved by Save(). @@ -143,6 +160,46 @@ public: bool RegisterAndRestore(void *obj, wxPersistentObject *po); //@} + +protected: + /** + Protected default constructor. + + This constructor is only provided for the derived classes, to use an + object of this class static Get() method should be called. + */ + wxPersistenceManager(); + + /** + Return the config object to use. + + By default the global wxConfig, returned by wxConfigBase::Get(), is + used but a derived class could override this function to return a + different one if necessary. + + @since 2.9.3 + */ + virtual wxConfigBase *GetConfig() const; + + /** + Return the path to use for saving the setting with the given name for + the specified object. + + Notice that the @a name argument is the name of the setting, not the + name of the object itself which can be retrieved with its GetName() + method. + + This method can be overridden by a derived class to change where in + wxConfig the different options are stored. By default, all settings of + the persistent controls are stored under "Persistent_Options" group and + grouped by control type (e.g. "Window" for top level windows or + "Splitter") and name, so that the position of a splitter called "sep" + could be stored under "Persistent_Options/Splitter/sep/Position" key. + + @since 2.9.3 + */ + virtual wxString GetKey(const wxPersistentObject& who, + const wxString& name) const; }; /** @@ -233,10 +290,7 @@ protected: @true if the value was saved or @false if an error occurred. */ template - bool SaveValue(const wxString& name, T value) const - { - return wxPersistenceManager::Get().SaveValue(*this, name, value); - } + bool SaveValue(const wxString& name, T value) const; /** Restore the value saved by Save(). @@ -251,10 +305,7 @@ protected: found or an error occurred. */ template - bool RestoreValue(const wxString& name, T *value) - { - return wxPersistenceManager::Get().RestoreValue(*this, name, value); - } + bool RestoreValue(const wxString& name, T *value); }; /** @@ -268,6 +319,34 @@ protected: framework. @see @ref persistence_defining + + @header{wx/persist.h} */ template wxPersistentObject *wxCreatePersistentObject(T *obj); + +/** + A shorter synonym for wxPersistenceManager::RegisterAndRestore(). + + This function simply calls wxPersistenceManager::RegisterAndRestore() but + using it results in slightly shorter code as it calls + wxPersistenceManager::Get() internally. As an additional convenience, this + function can also set the window name. + + For the implementation reasons, this function @em must be used instead of + the template method when using Microsoft Visual C++ 6 compiler. + + @param obj wxWindow-derived object to register with persistence manager and + to try to restore the settings for. + @param name If not empty, @a obj name is changed to the provided value + before registering it. + @return true if the settings were restored or false otherwise (this will + always be the case when the program runs for the first time, for + example). + + @since 2.9.0, @a name is new in 2.9.1. + + @header{wx/persist.h} + */ +template +bool wxPersistentRegisterAndRestore(T *obj, const wxString& name = wxString());