From 8f494e5d878c7f11c6fd58f9172a95bfb9c03feb Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 2 Aug 1998 23:04:55 +0000 Subject: [PATCH] minor changes to registry classes and wxIniConfig added git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@411 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msw/iniconf.h | 92 +++++++++++++++++++++++++++++++++++++++ include/wx/msw/regconf.h | 30 ++++++++----- include/wx/msw/registry.h | 13 ++++-- 3 files changed, 120 insertions(+), 15 deletions(-) create mode 100644 include/wx/msw/iniconf.h diff --git a/include/wx/msw/iniconf.h b/include/wx/msw/iniconf.h new file mode 100644 index 0000000000..fb26aa5847 --- /dev/null +++ b/include/wx/msw/iniconf.h @@ -0,0 +1,92 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: include/wx/msw/iniconf.h +// Purpose: INI-file based wxConfigBase implementation +// Author: Vadim Zeitlin +// Modified by: +// Created: 27.07.98 +// RCS-ID: $Id$ +// Copyright: (c) 1998 Vadim Zeitlin +// Licence: wxWindows license +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _INICONF_H +#define _INICONF_H + +// ---------------------------------------------------------------------------- +// wxIniConfig is a wxConfig implementation which uses MS Windows INI files to +// store the data. Because INI files don't really support arbitrary nesting of +// groups, we do the following: +// (1) in win.ini file we store all entries in the [vendor] section and +// the value group1/group2/key is mapped to the value group1_group2_key +// in this section, i.e. all path separators are replaced with underscore +// (2) in appname.ini file we map group1/group2/group3/key to the entry +// group2_group3_key in [group1] +// +// Of course, it might lead to indesirable results if '_' is also used in key +// names (i.e. group/key is the same as group_key) and also GetPath() result +// may be not what you would expect it to be. +// +// Another limitation: the keys and section names are never case-sensitive +// which might differ from wxFileConfig it it was compiled with +// wxCONFIG_CASE_SENSITIVE option. +// ---------------------------------------------------------------------------- + +// for this class, "local" file is the file appname.ini and the global file +// is the [vendor] subsection of win.ini (default for "vendor" is to be the +// same as appname). The file name (strAppName parameter) may, in fact, +// contain the full path to the file. If it doesn't, the file is searched for +// in the Windows directory. +class wxIniConfig : public wxConfigBase +{ +public: + // ctor & dtor + // if strAppName doesn't contain the extension and is not an absolute path, + // ".ini" is appended to it. if strVendor is empty, it's taken to be the + // same as strAppName. + wxIniConfig(const wxString& strAppName, const wxString& strVendor = ""); + virtual ~wxIniConfig(); + + // implement inherited pure virtual functions + virtual void SetPath(const wxString& strPath); + virtual const wxString& GetPath() const; + + virtual bool GetFirstGroup(wxString& str, long& lIndex) const; + virtual bool GetNextGroup (wxString& str, long& lIndex) const; + virtual bool GetFirstEntry(wxString& str, long& lIndex) const; + virtual bool GetNextEntry (wxString& str, long& lIndex) const; + + virtual uint GetNumberOfEntries(bool bRecursive = FALSE) const; + virtual uint GetNumberOfGroups(bool bRecursive = FALSE) const; + + virtual bool HasGroup(const wxString& strName) const; + virtual bool HasEntry(const wxString& strName) const; + + // return TRUE if the current group is empty + bool IsEmpty() const; + + virtual bool Read(wxString *pstr, const char *szKey, + const char *szDefault = 0) const; + virtual const char *Read(const char *szKey, + const char *szDefault = 0) const; + virtual bool Read(long *pl, const char *szKey, long lDefault) const; + virtual long Read(const char *szKey, long lDefault) const; + virtual bool Write(const char *szKey, const char *szValue); + virtual bool Write(const char *szKey, long lValue); + virtual bool Flush(bool bCurrentOnly = FALSE); + + virtual bool DeleteEntry(const char *szKey, bool bGroupIfEmptyAlso); + virtual bool DeleteGroup(const char *szKey); + virtual bool DeleteAll(); + +private: + // helpers + wxString GetPrivateKeyName(const char *szKey) const; + wxString GetKeyName(const char *szKey) const; + + wxString m_strAppName, // name of the private INI file + m_strVendor; // name of our section in WIN.INI + wxString m_strGroup, // current group in appname.ini file + m_strPath; // the rest of the path (no trailing '_'!) +}; + +#endif //_INICONF_H \ No newline at end of file diff --git a/include/wx/msw/regconf.h b/include/wx/msw/regconf.h index 38f5ba608c..67ff6f4700 100644 --- a/include/wx/msw/regconf.h +++ b/include/wx/msw/regconf.h @@ -1,6 +1,6 @@ /////////////////////////////////////////////////////////////////////////////// // Name: msw/regconf.h -// Purpose: Registry based implementation of wxConfig +// Purpose: Registry based implementation of wxConfigBase // Author: Vadim Zeitlin // Modified by: // Created: 27.04.98 @@ -16,11 +16,15 @@ #pragma interface "regconf.h" #endif +#ifndef _REGISTRY_H + #include +#endif + // ---------------------------------------------------------------------------- // wxRegConfig // ---------------------------------------------------------------------------- -class wxRegConfig : public wxConfig +class wxRegConfig : public wxConfigBase { public: // ctor & dtor @@ -36,24 +40,26 @@ public: virtual void SetPath(const wxString& strPath); virtual const wxString& GetPath() const { return m_strPath; } - // enum - virtual bool GetFirstGroup(wxString& str, long& lIndex); - virtual bool GetNextGroup (wxString& str, long& lIndex); - virtual bool GetFirstEntry(wxString& str, long& lIndex); - virtual bool GetNextEntry (wxString& str, long& lIndex); + // entry/subgroup info + // enumerate all of them + virtual bool GetFirstGroup(wxString& str, long& lIndex) const; + virtual bool GetNextGroup (wxString& str, long& lIndex) const; + virtual bool GetFirstEntry(wxString& str, long& lIndex) const; + virtual bool GetNextEntry (wxString& str, long& lIndex) const; - // tests for existence + // tests for existence virtual bool HasGroup(const wxString& strName) const; virtual bool HasEntry(const wxString& strName) const; // get number of entries/subgroups in the current group, with or without // it's subgroups - virtual uint GetNumberOfEntries(bool bRecursive = FALSE) const = 0; - virtual uint GetNumberOfGroups(bool bRecursive = FALSE) const = 0; + virtual uint GetNumberOfEntries(bool bRecursive = FALSE) const; + virtual uint GetNumberOfGroups(bool bRecursive = FALSE) const; // read/write - virtual bool Read(wxString&, const char *, const char * = 0) const; - virtual bool Read(long&, const char *, long = 0) const; + virtual bool Read(wxString *pStr, const char *szKey, + const char *szDefault = 0) const; + virtual bool Read(long *result, const char *szKey, long lDefault = 0) const; virtual bool Write(const char *szKey, const char *szValue); virtual bool Write(const char *szKey, long Value); virtual bool Flush(bool /* bCurrentOnly = FALSE */ ) { return TRUE; } diff --git a/include/wx/msw/registry.h b/include/wx/msw/registry.h index 754a2d6783..e63bffb607 100644 --- a/include/wx/msw/registry.h +++ b/include/wx/msw/registry.h @@ -26,13 +26,15 @@ #endif // ---------------------------------------------------------------------------- -// forward decl for handle type +// types used in this module // ---------------------------------------------------------------------------- #ifndef HKEY_DEFINED #define HKEY_DEFINED #define HKEY unsigned long #endif +typedef unsigned long ulong; + // ---------------------------------------------------------------------------- // class wxRegKey encapsulates window HKEY handle // ---------------------------------------------------------------------------- @@ -117,9 +119,14 @@ public: // get the (full) key name. Abbreviate std root keys if bShortPrefix. wxString GetName(bool bShortPrefix = TRUE) const; // return true if the key exists - bool Exists() const; + bool Exists() const; + // get the info about key (any number of these pointers may be NULL) + bool GetKeyInfo(ulong *pnSubKeys, // number of subkeys + ulong *pnMaxKeyLen, // max len of subkey name + ulong *pnValues, // number of values + ulong *pnMaxValueLen) const; // return true if the key is opened - bool IsOpened() const { return m_hKey != 0; } + bool IsOpened() const { return m_hKey != 0; } // for "if ( !key ) wxLogError(...)" kind of expressions operator bool() const { return m_dwLastError == 0; }