X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/42841dfcaddc6045ffc618acbb620b1fde1bc618..ec0114abef6ee06425ec5bd423cf496271c086dd:/include/wx/confbase.h diff --git a/include/wx/confbase.h b/include/wx/confbase.h index 15c4919896..25f6797049 100644 --- a/include/wx/confbase.h +++ b/include/wx/confbase.h @@ -11,15 +11,12 @@ // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// -#ifndef _WX_CONFBASE_H_ -#define _WX_CONFBASE_H_ - -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma interface "confbase.h" -#endif +#ifndef _WX_CONFBASE_H_ +#define _WX_CONFBASE_H_ #include "wx/defs.h" #include "wx/string.h" +#include "wx/object.h" class WXDLLIMPEXP_BASE wxArrayString; @@ -60,7 +57,8 @@ enum wxCONFIG_USE_LOCAL_FILE = 1, wxCONFIG_USE_GLOBAL_FILE = 2, wxCONFIG_USE_RELATIVE_PATH = 4, - wxCONFIG_USE_NO_ESCAPE_CHARACTERS = 8 + wxCONFIG_USE_NO_ESCAPE_CHARACTERS = 8, + wxCONFIG_USE_SUBDIR = 16 }; // ---------------------------------------------------------------------------- @@ -75,7 +73,7 @@ enum // (long) type (TODO doubles and other types such as wxDate coming soon). // ---------------------------------------------------------------------------- -class WXDLLIMPEXP_BASE wxConfigBase +class WXDLLIMPEXP_BASE wxConfigBase : public wxObject { public: // constants @@ -117,7 +115,7 @@ public: long style = 0); // empty but ensures that dtor of all derived classes is virtual - virtual ~wxConfigBase(){}; + virtual ~wxConfigBase(); // path management // set current path: if the first character is '/', it's the absolute path, @@ -206,8 +204,12 @@ public: // we have to provide a separate version for C strings as otherwise they // would be converted to bool and not to wxString as expected! - bool Write(const wxString& key, const wxChar *value) + bool Write(const wxString& key, const char *value) + { return Write(key, wxString(value)); } +#if wxUSE_WCHAR_T + bool Write(const wxString& key, const wchar_t *value) { return Write(key, wxString(value)); } +#endif // permanently writes all changes virtual bool Flush(bool bCurrentOnly = false) = 0; @@ -229,7 +231,7 @@ public: // delete the group (with all subgroups) virtual bool DeleteGroup(const wxString& key) = 0; // delete the whole underlying object (disk file, registry key, ...) - // primarly for use by desinstallation routine. + // primarily for use by uninstallation routine. virtual bool DeleteAll() = 0; // options @@ -258,6 +260,13 @@ protected: static bool IsImmutable(const wxString& key) { return !key.IsEmpty() && key[0] == wxCONFIG_IMMUTABLE_PREFIX; } + // return the path without trailing separator, if any: this should be called + // to sanitize paths referring to the group names before passing them to + // wxConfigPathChanger as "/foo/bar/" should be the same as "/foo/bar" and it + // isn't interpreted in the same way by it (and this can't be changed there + // as it's not the same for the entries names) + static wxString RemoveTrailingSeparator(const wxString& key); + // do read/write the values of different types virtual bool DoReadString(const wxString& key, wxString *pStr) const = 0; virtual bool DoReadLong(const wxString& key, long *pl) const = 0; @@ -287,6 +296,8 @@ private: // Style flag long m_style; + + DECLARE_ABSTRACT_CLASS(wxConfigBase) }; // a handy little class which changes current path to the path of given entry @@ -297,13 +308,21 @@ private: class WXDLLIMPEXP_BASE wxConfigPathChanger { public: - // ctor/dtor do path changing/restorin + // ctor/dtor do path changing/restoring of the path wxConfigPathChanger(const wxConfigBase *pContainer, const wxString& strEntry); ~wxConfigPathChanger(); // get the key name const wxString& Name() const { return m_strName; } + // this method must be called if the original path (i.e. the current path at + // the moment of creation of this object) could have been deleted to prevent + // us from restoring the not existing (any more) path + // + // if the original path doesn't exist any more, the path will be restored to + // the deepest still existing component of the old path + void UpdateIfDeleted(); + private: wxConfigBase *m_pContainer; // object we live in wxString m_strName, // name of entry (i.e. name only) @@ -339,9 +358,7 @@ WXDLLIMPEXP_BASE wxString wxExpandEnvVars(const wxString &sz); /* Split path into parts removing '..' in progress */ -WXDLLIMPEXP_BASE void wxSplitPath(wxArrayString& aParts, const wxChar *sz); +WXDLLIMPEXP_BASE void wxSplitPath(wxArrayString& aParts, const wxString& path); - -#endif - // _WX_CONFIG_H_ +#endif // _WX_CONFBASE_H_