+ bool Read(const wxString& key, wxString *pStr) const;
+ bool Read(const wxString& key, wxString *pStr, const wxString& defVal) const;
+
+ // read a number (long)
+ bool Read(const wxString& key, long *pl) const;
+ bool Read(const wxString& key, long *pl, long defVal) const;
+
+ // read an int (wrapper around `long' version)
+ bool Read(const wxString& key, int *pi) const;
+ bool Read(const wxString& key, int *pi, int defVal) const;
+
+ // read a double
+ bool Read(const wxString& key, double* val) const;
+ bool Read(const wxString& key, double* val, double defVal) const;
+
+ // read a bool
+ bool Read(const wxString& key, bool* val) const;
+ bool Read(const wxString& key, bool* val, bool defVal) const;
+
+#if wxUSE_BASE64
+ // read a binary data block
+ bool Read(const wxString& key, wxMemoryBuffer* data) const
+ { return DoReadBinary(key, data); }
+ // no default version since it does not make sense for binary data
+#endif // wxUSE_BASE64
+
+ // Causes ambiguities in VC++ 6 (at least)
+#if (!defined(__VISUALC__) || __VISUALC__ > 1200)
+ // read other types, for which wxFromString is defined
+ template <typename T>
+ bool Read(const wxString& key, T* value) const
+ {
+ wxString s;
+ if ( !Read(key, &s) )
+ return false;
+ return wxFromString(s, value);
+ }
+
+ template <typename T>
+ bool Read(const wxString& key, T* value, const T& defVal) const
+ {
+ const bool found = Read(key, value);
+ if ( !found )
+ {
+ if (IsRecordingDefaults())
+ ((wxConfigBase *)this)->Write(key, defVal);
+ *value = defVal;
+ }
+ return found;
+ }
+#endif
+
+ // convenience functions returning directly the value
+ wxString Read(const wxString& key,
+ const wxString& defVal = wxEmptyString) const
+ { wxString s; (void)Read(key, &s, defVal); return s; }
+
+ // we have to provide a separate version for C strings as otherwise the
+ // template Read() would be used
+ wxString Read(const wxString& key, const char* defVal) const
+ { return Read(key, wxString(defVal)); }
+#if wxUSE_WCHAR_T
+ wxString Read(const wxString& key, const wchar_t* defVal) const
+ { return Read(key, wxString(defVal)); }
+#endif
+
+ long ReadLong(const wxString& key, long defVal) const
+ { long l; (void)Read(key, &l, defVal); return l; }
+
+ double ReadDouble(const wxString& key, double defVal) const
+ { double d; (void)Read(key, &d, defVal); return d; }
+
+ bool ReadBool(const wxString& key, bool defVal) const
+ { bool b; (void)Read(key, &b, defVal); return b; }
+
+ template <typename T>
+ T ReadObject(const wxString& key, T const& defVal) const
+ { T t; (void)Read(key, &t, defVal); return t; }
+
+ // for compatibility with wx 2.8
+ long Read(const wxString& key, long defVal) const
+ { return ReadLong(key, defVal); }
+