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
This commit is contained in:
Vadim Zeitlin 1998-08-02 23:04:55 +00:00
parent 66bd6b9300
commit 8f494e5d87
3 changed files with 120 additions and 15 deletions

92
include/wx/msw/iniconf.h Normal file
View File

@ -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 <zeitlin@dptmaths.ens-cachan.fr>
// 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

View File

@ -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 <wx/msw/registry.h>
#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; }

View File

@ -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; }