]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/fileconf.h
create the DIBs in correct (and not down up) line order
[wxWidgets.git] / include / wx / fileconf.h
index d5e34274d434a7265c4fd151bf6467cdf7e16fd4..f383998e96ed03349bc598c1ce7e130460451085 100644 (file)
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////////
-// Name:        fileconf.h
+// Name:        wx/fileconf.h
 // Purpose:     wxFileConfig derivation of wxConfigBase
 // Author:      Vadim Zeitlin
 // Modified by:
@@ -7,28 +7,22 @@
 // RCS-ID:      $Id$
 // Copyright:   (c) 1997 Karsten Ballüder   &  Vadim Zeitlin
 //                       Ballueder@usa.net     <zeitlin@dptmaths.ens-cachan.fr>
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 #ifndef   _FILECONF_H
 #define   _FILECONF_H
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(__APPLE__)
 #pragma interface "fileconf.h"
 #endif
 
 #include "wx/defs.h"
-#include "wx/textfile.h"
-#include "wx/string.h"
 
-// ----------------------------------------------------------------------------
-// compile options
-// ----------------------------------------------------------------------------
+#if wxUSE_CONFIG
 
-// it won't compile without it anyhow
-#ifndef wxUSE_CONFIG
-  #error "Please define wxUSE_CONFIG or remove fileconf.cpp from your makefile"
-#endif // wxUSE_CONFIG
+#include "wx/textfile.h"
+#include "wx/string.h"
 
 // ----------------------------------------------------------------------------
 // wxFileConfig
   (it's on by default, the current status can be retrieved with
    IsExpandingEnvVars function).
 */
-class wxFileConfig;
-class ConfigGroup;
-class ConfigEntry;
+class WXDLLEXPORT wxFileConfigGroup;
+class WXDLLEXPORT wxFileConfigEntry;
+class WXDLLEXPORT wxFileConfigLineList;
+class WXDLLEXPORT wxInputStream;
 
-// we store all lines of the local config file as a linked list in memory
-class LineList
-{
-public:
-  void      SetNext(LineList *pNext)  { m_pNext = pNext; }
-  void      SetPrev(LineList *pPrev)  { m_pPrev = pPrev; }
-
-  // ctor
-  LineList(const wxString& str, LineList *pNext = (LineList *) NULL) : m_strLine(str)
-    { SetNext(pNext); SetPrev((LineList *) NULL); }
-
-  //
-  LineList *Next() const              { return m_pNext;  }
-  LineList *Prev() const              { return m_pPrev;  }
-
-  //
-  void SetText(const wxString& str) { m_strLine = str;  }
-  const wxString& Text() const      { return m_strLine; }
-
-private:
-  wxString  m_strLine;      // line contents
-  LineList *m_pNext,        // next node
-           *m_pPrev;        // previous one
-};
-
-class wxFileConfig : public wxConfigBase
+class WXDLLEXPORT wxFileConfig : public wxConfigBase
 {
 public:
   // construct the "standard" full name for global (system-wide) and
@@ -147,14 +117,29 @@ public:
     // 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 = _T(""),
-               const wxString& localFilename = _T(""),
-               const wxString& globalFilename = _T(""),
-               long style = wxCONFIG_USE_LOCAL_FILE);
+               const wxString& vendorName = wxT(""),
+               const wxString& localFilename = wxT(""),
+               const wxString& globalFilename = wxT(""),
+               long style = wxCONFIG_USE_LOCAL_FILE,
+               wxMBConv& conv = wxConvUTF8);
+
+#if wxUSE_STREAMS
+    // ctor that takes an input stream.
+  wxFileConfig(wxInputStream &inStream,
+               wxMBConv& conv = wxConvUTF8);
+#endif // wxUSE_STREAMS
 
     // dtor will save unsaved data
   virtual ~wxFileConfig();
 
+  // under Unix, set the umask to be used for the file creation, do nothing
+  // under other systems
+#ifdef __UNIX__
+  void SetUmask(int mode) { m_umask = mode; }
+#else // !__UNIX__
+  void SetUmask(int WXUNUSED(mode)) { }
+#endif // __UNIX__/!__UNIX__
+
   // implement inherited pure virtual functions
   virtual void SetPath(const wxString& strPath);
   virtual const wxString& GetPath() const { return m_strPath; }
@@ -170,54 +155,30 @@ public:
   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); }
-
   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();
 
 public:
   // functions to work with this list
-  LineList *LineListAppend(const wxString& str);
-  LineList *LineListInsert(const wxString& str,
-                           LineList *pLine);    // NULL => Prepend()
-  void      LineListRemove(LineList *pLine);
+  wxFileConfigLineList *LineListAppend(const wxString& str);
+  wxFileConfigLineList *LineListInsert(const wxString& str,
+                           wxFileConfigLineList *pLine);    // NULL => Prepend()
+  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;
+
+  virtual bool DoWriteString(const wxString& key, const wxString& szValue);
+  virtual bool DoWriteLong(const wxString& key, long lValue);
+
 private:
   // GetXXXFileName helpers: return ('/' terminated) directory names
   static wxString GetGlobalDir();
@@ -231,123 +192,35 @@ private:
   void CleanUp();
 
   // parse the whole file
-  void Parse(wxTextFile& file, bool bLocal);
+  void Parse(wxTextBuffer& buffer, bool bLocal);
 
   // the same as SetPath("/")
   void SetRootPath();
 
   // member variables
   // ----------------
-  LineList   *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)
 
-  ConfigGroup *m_pRootGroup,      // the top (unnamed) group
-              *m_pCurrentGroup;   // the current group
+  wxFileConfigGroup *m_pRootGroup,      // the top (unnamed) group
+                    *m_pCurrentGroup;   // the current group
 
-public:
-  WX_DEFINE_SORTED_ARRAY(ConfigEntry *, ArrayEntries);
-  WX_DEFINE_SORTED_ARRAY(ConfigGroup *, ArrayGroups);
-};
+  wxMBConv   &m_conv;
+        
+#ifdef __UNIX__
+  int m_umask;                    // the umask to use for file creation
+#endif // __UNIX__
 
-class ConfigEntry
-{
-private:
-  ConfigGroup  *m_pParent;      // group that contains us
-  wxString      m_strName,      // entry name
-                m_strValue;     //       value
-  bool          m_bDirty,       // changed since last read?
-                m_bImmutable;   // can be overriden locally?
-  int           m_nLine;        // used if m_pLine == NULL only
-  LineList     *m_pLine;        // pointer to our line in the linked list
-                                // or NULL if it was found in global file
-
-public:
-  ConfigEntry(ConfigGroup *pParent, const wxString& strName, int nLine);
-
-  // simple accessors
-  const wxString& Name()        const { return m_strName;    }
-  const wxString& Value()       const { return m_strValue;   }
-  ConfigGroup    *Group()       const { return m_pParent;    }
-  bool            IsDirty()     const { return m_bDirty;     }
-  bool            IsImmutable() const { return m_bImmutable; }
-  bool            IsLocal()     const { return m_pLine != 0; }
-  int             Line()        const { return m_nLine;      }
-  LineList       *GetLine()     const { return m_pLine;      }
-
-  // modify entry attributes
-  void SetValue(const wxString& strValue, bool bUser = TRUE);
-  void SetDirty();
-  void SetLine(LineList *pLine);
+    DECLARE_NO_COPY_CLASS(wxFileConfig)
 };
 
-class ConfigGroup
-{
-private:
-  wxFileConfig *m_pConfig;        // config object we belong to
-  ConfigGroup  *m_pParent;        // parent group (NULL for root group)
-  wxFileConfig::ArrayEntries  m_aEntries;       // entries in this group
-  wxFileConfig::ArrayGroups   m_aSubgroups;     // subgroups
-  wxString      m_strName;        // group's name
-  bool          m_bDirty;         // if FALSE => all subgroups are not dirty
-  LineList     *m_pLine;          // pointer to our line in the linked list
-  ConfigEntry  *m_pLastEntry;     // last entry/subgroup of this group in the
-  ConfigGroup  *m_pLastGroup;     // local file (we insert new ones after it)
-
-  // DeleteSubgroupByName helper
-  bool DeleteSubgroup(ConfigGroup *pGroup);
-
-public:
-  // ctor
-  ConfigGroup(ConfigGroup *pParent, const wxString& strName, wxFileConfig *);
-
-  // dtor deletes all entries and subgroups also
-  ~ConfigGroup();
-
-  // simple accessors
-  const wxString& Name()    const { return m_strName; }
-  ConfigGroup    *Parent()  const { return m_pParent; }
-  wxFileConfig   *Config()  const { return m_pConfig; }
-  bool            IsDirty() const { return m_bDirty;  }
-
-  const wxFileConfig::ArrayEntries& Entries() const { return m_aEntries;   }
-  const wxFileConfig::ArrayGroups&  Groups()  const { return m_aSubgroups; }
-  bool  IsEmpty() const { return Entries().IsEmpty() && Groups().IsEmpty(); }
-
-  // find entry/subgroup (NULL if not found)
-  ConfigGroup *FindSubgroup(const wxChar *szName) const;
-  ConfigEntry *FindEntry   (const wxChar *szName) const;
-
-  // delete entry/subgroup, return FALSE if doesn't exist
-  bool DeleteSubgroupByName(const wxChar *szName);
-  bool DeleteEntry(const wxChar *szName);
-
-  // create new entry/subgroup returning pointer to newly created element
-  ConfigGroup *AddSubgroup(const wxString& strName);
-  ConfigEntry *AddEntry   (const wxString& strName, int nLine = wxNOT_FOUND);
-
-  // will also recursively set parent's dirty flag
-  void SetDirty();
-  void SetLine(LineList *pLine);
-
-  // rename: no checks are done to ensure that the name is unique!
-  void Rename(const wxString& newName);
-
-  //
-  wxString GetFullName() const;
-
-  // get the last line belonging to an entry/subgroup of this group
-  LineList *GetGroupLine();     // line which contains [group]
-  LineList *GetLastEntryLine(); // after which our subgroups start
-  LineList *GetLastGroupLine(); // after which the next group starts
-
-  // called by entries/subgroups when they're created/deleted
-  void SetLastEntry(ConfigEntry *pEntry) { m_pLastEntry = pEntry; }
-  void SetLastGroup(ConfigGroup *pGroup) { m_pLastGroup = pGroup; }
-};
+#endif
+  // wxUSE_CONFIG
 
-#endif  //_FILECONF_H
+#endif  
+  //_FILECONF_H