]> git.saurik.com Git - wxWidgets.git/commitdiff
minor changes to registry classes and wxIniConfig added
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 2 Aug 1998 23:04:55 +0000 (23:04 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 2 Aug 1998 23:04:55 +0000 (23:04 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@411 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/iniconf.h [new file with mode: 0644]
include/wx/msw/regconf.h
include/wx/msw/registry.h

diff --git a/include/wx/msw/iniconf.h b/include/wx/msw/iniconf.h
new file mode 100644 (file)
index 0000000..fb26aa5
--- /dev/null
@@ -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
\ No newline at end of file
index 38f5ba608cdda6f22c31997ef571b46e82aa9919..67ff6f470087e60e828def7694820b83fa8276f1 100644 (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
 #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; }
index 754a2d67837de805c5552e31fcb9d50bb55421e4..e63bffb607ff2eb88ebb39cac8a43b9537fc5df9 100644 (file)
 #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; }