X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0516e0e8ecfb57e9241d84c7e78bdbc9d29ab771..26bacb82ff3191f5807b0602036899bf13f1ed36:/include/wx/fileconf.h diff --git a/include/wx/fileconf.h b/include/wx/fileconf.h index c2cf0404b1..c3dfb5d772 100644 --- a/include/wx/fileconf.h +++ b/include/wx/fileconf.h @@ -5,24 +5,22 @@ // Modified by: // Created: 07.04.98 (adapted from appconf.cpp) // RCS-ID: $Id$ -// Copyright: (c) 1997 Karsten Ballüder & Vadim Zeitlin +// Copyright: (c) 1997 Karsten Ballueder & Vadim Zeitlin // Ballueder@usa.net -// Licence: wxWindows license +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// #ifndef _FILECONF_H #define _FILECONF_H -#ifdef __GNUG__ -#pragma interface "fileconf.h" -#endif - #include "wx/defs.h" #if wxUSE_CONFIG #include "wx/textfile.h" #include "wx/string.h" +#include "wx/confbase.h" +#include "wx/filename.h" // ---------------------------------------------------------------------------- // wxFileConfig @@ -88,15 +86,20 @@ in the entries it reads: for example, if you have an entry score_file = $HOME/.score a call to Read(&str, "score_file") will return a complete path to .score file - unless the expansion was previousle disabled with SetExpandEnvVars(FALSE) call + unless the expansion was previously disabled with SetExpandEnvVars(false) call (it's on by default, the current status can be retrieved with IsExpandingEnvVars function). */ -class WXDLLEXPORT wxFileConfigGroup; -class WXDLLEXPORT wxFileConfigEntry; -class WXDLLEXPORT wxFileConfigLineList; +class WXDLLIMPEXP_FWD_BASE wxFileConfigGroup; +class WXDLLIMPEXP_FWD_BASE wxFileConfigEntry; +class WXDLLIMPEXP_FWD_BASE wxFileConfigLineList; -class WXDLLEXPORT wxFileConfig : public wxConfigBase +#if wxUSE_STREAMS +class WXDLLIMPEXP_FWD_BASE wxInputStream; +class WXDLLIMPEXP_FWD_BASE wxOutputStream; +#endif // wxUSE_STREAMS + +class WXDLLIMPEXP_BASE wxFileConfig : public wxConfigBase { public: // construct the "standard" full name for global (system-wide) and @@ -107,19 +110,35 @@ public: // Unix /etc/file.ext ~/.file // Win %windir%\file.ext %USERPROFILE%\file.ext // - // where file is the basename of szFile, ext is it's extension + // where file is the basename of szFile, ext is its extension // or .conf (Unix) or .ini (Win) if it has none - static wxString GetGlobalFileName(const wxChar *szFile); - static wxString GetLocalFileName(const wxChar *szFile); + static wxFileName GetGlobalFile(const wxString& szFile); + static wxFileName GetLocalFile(const wxString& szFile, int style = 0); + + static wxString GetGlobalFileName(const wxString& szFile) + { + return GetGlobalFile(szFile).GetFullPath(); + } + + static wxString GetLocalFileName(const wxString& szFile, int style = 0) + { + return GetLocalFile(szFile, style).GetFullPath(); + } // ctor & dtor // New constructor: one size fits all. Specify wxCONFIG_USE_LOCAL_FILE or // wxCONFIG_USE_GLOBAL_FILE to say which files should be used. - wxFileConfig(const wxString& appName, - const wxString& vendorName = wxT(""), - const wxString& localFilename = wxT(""), - const wxString& globalFilename = wxT(""), - long style = wxCONFIG_USE_LOCAL_FILE); + wxFileConfig(const wxString& appName = wxEmptyString, + const wxString& vendorName = wxEmptyString, + const wxString& localFilename = wxEmptyString, + const wxString& globalFilename = wxEmptyString, + long style = wxCONFIG_USE_LOCAL_FILE | wxCONFIG_USE_GLOBAL_FILE, + const wxMBConv& conv = wxConvAuto()); + +#if wxUSE_STREAMS + // ctor that takes an input stream. + wxFileConfig(wxInputStream &inStream, const wxMBConv& conv = wxConvAuto()); +#endif // wxUSE_STREAMS // dtor will save unsaved data virtual ~wxFileConfig(); @@ -134,61 +153,36 @@ public: // implement inherited pure virtual functions virtual void SetPath(const wxString& strPath); - virtual const wxString& GetPath() const { return m_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 size_t GetNumberOfEntries(bool bRecursive = FALSE) const; - virtual size_t GetNumberOfGroups(bool bRecursive = FALSE) const; + virtual size_t GetNumberOfEntries(bool bRecursive = false) const; + virtual size_t GetNumberOfGroups(bool bRecursive = false) const; virtual bool HasGroup(const wxString& strName) const; virtual bool HasEntry(const wxString& strName) const; - virtual bool Read(const wxString& key, wxString *pStr) const; - virtual bool Read(const wxString& key, wxString *pStr, const wxString& defValue) const; - virtual bool Read(const wxString& key, long *pl) const; - - // The following are necessary to satisfy the compiler - wxString Read(const wxString& key, const wxString& defVal) const - { return wxConfigBase::Read(key, defVal); } - bool Read(const wxString& key, long *pl, long defVal) const - { return wxConfigBase::Read(key, pl, defVal); } - long Read(const wxString& key, long defVal) const - { return wxConfigBase::Read(key, defVal); } - bool Read(const wxString& key, int *pi, int defVal) const - { return wxConfigBase::Read(key, pi, defVal); } - bool Read(const wxString& key, int *pi) const - { return wxConfigBase::Read(key, pi); } - bool Read(const wxString& key, double* val) const - { return wxConfigBase::Read(key, val); } - bool Read(const wxString& key, double* val, double defVal) const - { return wxConfigBase::Read(key, val, defVal); } - bool Read(const wxString& key, bool* val) const - { return wxConfigBase::Read(key, val); } - bool Read(const wxString& key, bool* val, bool defVal) const - { return wxConfigBase::Read(key, val, defVal); } - - virtual bool Write(const wxString& key, const wxString& szValue); - virtual bool Write(const wxString& key, long lValue); - bool Write(const wxString& key, double value) - { return wxConfigBase::Write(key, value); } - bool Write(const wxString& key, bool value) - { return wxConfigBase::Write(key, value); } - bool Write(const wxString& key, const wxChar* value) - { return wxConfigBase::Write(key, value); } - - virtual bool Flush(bool bCurrentOnly = FALSE); + virtual bool Flush(bool bCurrentOnly = false); virtual bool RenameEntry(const wxString& oldName, const wxString& newName); virtual bool RenameGroup(const wxString& oldName, const wxString& newName); - virtual bool DeleteEntry(const wxString& key, bool bGroupIfEmptyAlso); + virtual bool DeleteEntry(const wxString& key, bool bGroupIfEmptyAlso = true); virtual bool DeleteGroup(const wxString& szKey); virtual bool DeleteAll(); + // additional, wxFileConfig-specific, functionality +#if wxUSE_STREAMS + // save the entire config file text to the given stream, note that the text + // won't be saved again in dtor when Flush() is called if you use this method + // as it won't be "changed" any more + virtual bool Save(wxOutputStream& os, const wxMBConv& conv = wxConvAuto()); +#endif // wxUSE_STREAMS + public: // functions to work with this list wxFileConfigLineList *LineListAppend(const wxString& str); @@ -197,10 +191,23 @@ public: void LineListRemove(wxFileConfigLineList *pLine); bool LineListIsEmpty(); +protected: + virtual bool DoReadString(const wxString& key, wxString *pStr) const; + virtual bool DoReadLong(const wxString& key, long *pl) const; +#if wxUSE_BASE64 + virtual bool DoReadBinary(const wxString& key, wxMemoryBuffer* buf) const; +#endif // wxUSE_BASE64 + + virtual bool DoWriteString(const wxString& key, const wxString& szValue); + virtual bool DoWriteLong(const wxString& key, long lValue); +#if wxUSE_BASE64 + virtual bool DoWriteBinary(const wxString& key, const wxMemoryBuffer& buf); +#endif // wxUSE_BASE64 + private: // GetXXXFileName helpers: return ('/' terminated) directory names static wxString GetGlobalDir(); - static wxString GetLocalDir(); + static wxString GetLocalDir(int style = 0); // common part of all ctors (assumes that m_str{Local|Global}File are already // initialized @@ -210,31 +217,48 @@ private: void CleanUp(); // parse the whole file - void Parse(wxTextFile& file, bool bLocal); + void Parse(const wxTextBuffer& buffer, bool bLocal); // the same as SetPath("/") void SetRootPath(); + // real SetPath() implementation, returns true if path could be set or false + // if path doesn't exist and createMissingComponents == false + bool DoSetPath(const wxString& strPath, bool createMissingComponents); + + // set/test the dirty flag + void SetDirty() { m_isDirty = true; } + void ResetDirty() { m_isDirty = false; } + bool IsDirty() const { return m_isDirty; } + + // member variables // ---------------- - wxFileConfigLineList *m_linesHead, // head of the linked list - *m_linesTail; // tail + wxFileConfigLineList *m_linesHead, // head of the linked list + *m_linesTail; // tail - wxString m_strLocalFile, // local file name passed to ctor - m_strGlobalFile; // global - wxString m_strPath; // current path (not '/' terminated) + wxFileName m_fnLocalFile, // local file name passed to ctor + m_fnGlobalFile; // global + wxString m_strPath; // current path (not '/' terminated) wxFileConfigGroup *m_pRootGroup, // the top (unnamed) group *m_pCurrentGroup; // the current group + wxMBConv *m_conv; + #ifdef __UNIX__ - int m_umask; // the umask to use for file creation + int m_umask; // the umask to use for file creation #endif // __UNIX__ + + bool m_isDirty; // if true, we have unsaved changes + + wxDECLARE_NO_COPY_CLASS(wxFileConfig); + DECLARE_ABSTRACT_CLASS(wxFileConfig) }; #endif // wxUSE_CONFIG -#endif +#endif //_FILECONF_H