#include "wx/defs.h"
#include "wx/string.h"
#include "wx/object.h"
+#include "wx/base64.h"
-class WXDLLIMPEXP_BASE wxArrayString;
+class WXDLLIMPEXP_FWD_BASE wxArrayString;
// ----------------------------------------------------------------------------
// constants
bool Read(const wxString& key, long *pl) const;
bool Read(const wxString& key, long *pl, long defVal) const;
- // read an int
+ // 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;
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
+
+
+ // 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;
+ }
+
// convenience functions returning directly the value (we don't have them for
// int/double/bool as there would be ambiguities with the long one then)
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 Read(const wxString& key, long defVal) const
{ long l; (void)Read(key, &l, defVal); return l; }
bool Write(const wxString& key, long value)
{ return DoWriteLong(key, value); }
- bool Write(const wxString& key, int value)
- { return DoWriteInt(key, value); }
-
bool Write(const wxString& key, double value)
{ return DoWriteDouble(key, value); }
bool Write(const wxString& key, bool value)
{ return DoWriteBool(key, value); }
+#if wxUSE_BASE64
+ bool Write(const wxString& key, const wxMemoryBuffer& buf)
+ { return DoWriteBinary(key, buf); }
+#endif // wxUSE_BASE64
+
// 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 char *value)
{ return Write(key, wxString(value)); }
+ bool Write(const wxString& key, const unsigned 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
+
+ // we also have to provide specializations for other types which we want to
+ // handle using the specialized DoWriteXXX() instead of the generic template
+ // version below
+ bool Write(const wxString& key, short value)
+ { return DoWriteLong(key, value); }
+
+ bool Write(const wxString& key, unsigned short value)
+ { return DoWriteLong(key, value); }
+
+ bool Write(const wxString& key, unsigned int value)
+ { return DoWriteLong(key, value); }
+
+ bool Write(const wxString& key, int value)
+ { return DoWriteLong(key, value); }
+
+ bool Write(const wxString& key, unsigned long value)
+ { return DoWriteLong(key, value); }
+
+ bool Write(const wxString& key, float value)
+ { return DoWriteDouble(key, value); }
+
+
+ // for other types, use wxToString()
+ template <typename T>
+ bool Write(const wxString& key, T const& value)
+ { return Write(key, wxToString(value)); }
+
// permanently writes all changes
virtual bool Flush(bool bCurrentOnly = false) = 0;
// 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;
- virtual bool DoReadInt(const wxString& key, int *pi) const;
virtual bool DoReadDouble(const wxString& key, double* val) const;
virtual bool DoReadBool(const wxString& key, bool* val) const;
+#if wxUSE_BASE64
+ virtual bool DoReadBinary(const wxString& key, wxMemoryBuffer* buf) const = 0;
+#endif // wxUSE_BASE64
virtual bool DoWriteString(const wxString& key, const wxString& value) = 0;
virtual bool DoWriteLong(const wxString& key, long value) = 0;
- virtual bool DoWriteInt(const wxString& key, int value);
virtual bool DoWriteDouble(const wxString& key, double value);
virtual bool DoWriteBool(const wxString& key, bool value);
+#if wxUSE_BASE64
+ virtual bool DoWriteBinary(const wxString& key, const wxMemoryBuffer& buf) = 0;
+#endif // wxUSE_BASE64
private:
// are we doing automatic environment variable expansion?
/*
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_CONFBASE_H_