]> git.saurik.com Git - wxWidgets.git/commitdiff
added wxFileConfig::Save(stream); documented it in new, separate from wxConfig, wxFil...
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 3 Oct 2004 22:55:08 +0000 (22:55 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 3 Oct 2004 22:55:08 +0000 (22:55 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@29632 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
docs/latex/wx/classes.tex
docs/latex/wx/config.tex
docs/latex/wx/fileconf.tex [new file with mode: 0644]
include/wx/fileconf.h
src/common/fileconf.cpp

index 7fb57b17580fd43126aa4dcf56d524215f4b6352..2294e2d263c128a743238055a6a037003eeaf072 100644 (file)
@@ -217,8 +217,7 @@ All:
 - active mode support in wxFTP (Randall Fox)
 - sped up wxHTTP and wxFTP
 - added wxStringInput/OutputStreams
-- wxSystemSettings::GetMetric now returns -1 for metrics that are not
-  supported, instead of zero.
+- added wxFileConfig::Save(wxOutputStream)
 
 
 All (GUI):
@@ -247,6 +246,8 @@ All (GUI):
 - wx(Choice/List/Note)book controls send CHANG(ED/ING) events in SetSelection
 - it is now possible to create a wxFont with given size in pixels (d2walter)
 - added wxTopLevelWindow::IsActive()
+- wxSystemSettings::GetMetric now returns -1 for metrics that are not
+  supported, instead of zero.
 
 Unix:
 
index abc7ae3218861e4a3c75f4ffd7feadc55dfceac6..b8c8c0d82948fcfe91cc6f1c493e0a6efef226ce 100644 (file)
@@ -95,6 +95,7 @@
 \input ffile.tex
 \input ffilestr.tex
 \input file.tex
+\input fileconf.tex
 \input fildatob.tex
 \input filedlg.tex
 \input fildrptg.tex
index 1e7a62879c320f7ac868888a454637b27bfa2435..19839abcc9218d1915c495ee99eb5cc0a13d74d6 100644 (file)
@@ -2,7 +2,8 @@
 
 wxConfigBase class defines the basic interface of all config classes. It can
 not be used by itself (it is an abstract base class) and you will always use one
-of its derivations: wxIniConfig, wxFileConfig, wxRegConfig or any other.
+of its derivations: wxIniConfig, \helpref{wxFileConfig}{wxfileconfig},
+wxRegConfig or any other.
 
 However, usually you don't even need to know the precise nature of the class
 you're working with but you would just use the wxConfigBase methods. This
@@ -78,6 +79,7 @@ physical storage where a wxConfigBase-derived class stores its data.
 
 \latexignore{\rtfignore{\wxheading{Function groups}}}
 
+
 \membersection{Static functions}\label{wxconfigstaticfunctions}
 
 These functions deal with the "default" config object. Although its usage is
@@ -105,11 +107,13 @@ of \helpref{wxFileDialog}{wxfiledialog} have ability to use wxConfig class.
 \helpref{Create}{wxconfigbasecreate}\\
 \helpref{DontCreateOnDemand}{wxconfigbasedontcreateondemand}
 
+
 \membersection{Constructor and destructor}
 
 \helpref{wxConfigBase}{wxconfigbasector}\\
 \helpref{\destruct{wxConfigBase}}{wxconfigbasedtor}
 
+
 \membersection{Path management}
 
 As explained in \helpref{config overview}{wxconfigoverview}, the config classes
@@ -179,6 +183,7 @@ regardless of the platform (i.e. it is {\bf not} '$\backslash\backslash$' under
 \helpref{SetPath}{wxconfigbasesetpath}\\
 \helpref{GetPath}{wxconfigbasegetpath}
 
+
 \membersection{Enumeration}
 
 The functions in this section allow to enumerate all entries and groups in the
@@ -233,6 +238,7 @@ actually enumerating them, but you will probably never need them.
 \helpref{GetNumberOfEntries}{wxconfigbasegetnumberofentries}\\
 \helpref{GetNumberOfGroups}{wxconfigbasegetnumberofgroups}
 
+
 \membersection{Tests of existence}
 
 \helpref{HasGroup}{wxconfigbasehasgroup}\\
@@ -240,12 +246,14 @@ actually enumerating them, but you will probably never need them.
 \helpref{Exists}{wxconfigbaseexists}\\
 \helpref{GetEntryType}{wxconfigbasegetentrytype}
 
+
 \membersection{Miscellaneous functions}
 
 \helpref{GetAppName}{wxconfigbasegetappname}\\
 \helpref{GetVendorName}{wxconfigbasegetvendorname}\\
 \helpref{SetUmask}{wxfileconfigsetumask}
 
+
 \membersection{Key access}
 
 These function are the core of wxConfigBase class: they allow you to read and
@@ -272,6 +280,7 @@ arbitrary path (either relative or absolute), not just the key name.
 \helpref{Write}{wxconfigbasewrite}\\
 \helpref{Flush}{wxconfigbaseflush}
 
+
 \membersection{Rename entries/groups}
 
 The functions in this section allow to rename entries or subgroups of the
@@ -283,6 +292,7 @@ wxConfig implementation.
 \helpref{RenameEntry}{wxconfigbaserenameentry}\\
 \helpref{RenameGroup}{wxconfigbaserenamegroup}
 
+
 \membersection{Delete entries/groups}
 
 The functions in this section delete entries and/or groups of entries from the
@@ -293,6 +303,7 @@ traces of your program presence: for example, when you uninstall it.
 \helpref{DeleteGroup}{wxconfigbasedeletegroup}\\
 \helpref{DeleteAll}{wxconfigbasedeleteall}
 
+
 \membersection{Options}
 
 Some aspects of wxConfigBase behaviour can be changed during run-time. The
@@ -332,6 +343,7 @@ The following functions control this option:
 
 }}
 
+
 \membersection{wxConfigBase::wxConfigBase}\label{wxconfigbasector}
 
 \func{}{wxConfigBase}{\param{const wxString\& }{appName = wxEmptyString},
@@ -392,12 +404,14 @@ is written.}
 By default, environment variable expansion is on and recording defaults is
 off.
 
+
 \membersection{wxConfigBase::\destruct{wxConfigBase}}\label{wxconfigbasedtor}
 
 \func{}{\destruct{wxConfigBase}}{\void}
 
 Empty but ensures that dtor of all derived classes is virtual.
 
+
 \membersection{wxConfigBase::Create}\label{wxconfigbasecreate}
 
 \func{static wxConfigBase *}{Create}{\void}
@@ -407,6 +421,7 @@ implementation of wxConfig available for the current platform, see comments
 near the definition of wxCONFIG\_WIN32\_NATIVE for details. It returns the
 created object and also sets it as the current one.
 
+
 \membersection{wxConfigBase::DontCreateOnDemand}\label{wxconfigbasedontcreateondemand}
 
 \func{void}{DontCreateOnDemand}{\void}
@@ -415,6 +430,7 @@ Calling this function will prevent {\it Get()} from automatically creating a
 new config object if the current one is NULL. It might be useful to call it
 near the program end to prevent new config object "accidental" creation.
 
+
 \membersection{wxConfigBase::DeleteAll}\label{wxconfigbasedeleteall}
 
 \func{bool}{DeleteAll}{\void}
@@ -422,6 +438,7 @@ near the program end to prevent new config object "accidental" creation.
 Delete the whole underlying object (disk file, registry key, ...). Primarly
 for use by desinstallation routine.
 
+
 \membersection{wxConfigBase::DeleteEntry}\label{wxconfigbasedeleteentry}
 
 \func{bool}{DeleteEntry}{\param{const wxString\& }{ key}, \param{bool}{ bDeleteGroupIfEmpty = true}}
@@ -429,18 +446,21 @@ for use by desinstallation routine.
 Deletes the specified entry and the group it belongs to if it was the last key
 in it and the second parameter is true.
 
+
 \membersection{wxConfigBase::DeleteGroup}\label{wxconfigbasedeletegroup}
 
 \func{bool}{DeleteGroup}{\param{const wxString\& }{ key}}
 
 Delete the group (with all subgroups)
 
+
 \membersection{wxConfigBase::Exists}\label{wxconfigbaseexists}
 
 \constfunc{bool}{Exists}{\param{wxString\& }{strName}}
 
 returns true if either a group or an entry with a given name exists
 
+
 \membersection{wxConfigBase::Flush}\label{wxconfigbaseflush}
 
 \func{bool}{Flush}{\param{bool }{bCurrentOnly = false}}
@@ -448,6 +468,7 @@ returns true if either a group or an entry with a given name exists
 permanently writes all changes (otherwise, they're only written from object's
 destructor)
 
+
 \membersection{wxConfigBase::Get}\label{wxconfigbaseget}
 
 \func{static wxConfigBase *}{Get}{\param{bool }{CreateOnDemand = true}}
@@ -456,12 +477,14 @@ Get the current config object. If there is no current object and
 {\it CreateOnDemand} is true, creates one
 (using {\it Create}) unless DontCreateOnDemand was called previously.
 
+
 \membersection{wxConfigBase::GetAppName}\label{wxconfigbasegetappname}
 
 \constfunc{wxString}{GetAppName}{\void}
 
 Returns the application name.
 
+
 \membersection{wxConfigBase::GetEntryType}\label{wxconfigbasegetentrytype}
 
 \constfunc{enum wxConfigBase::EntryType}{GetEntryType}{\param{const wxString\& }{name}}
@@ -485,6 +508,7 @@ The result is an element of enum EntryType:
   };
 \end{verbatim}
 
+
 \membersection{wxConfigBase::GetFirstGroup}\label{wxconfigbasegetfirstgroup}
 
 \constfunc{bool}{GetFirstGroup}{\param{wxString\& }{str}, \param{long\&}{ index}}
@@ -498,6 +522,7 @@ the next call.}
 \perlnote{In wxPerl this method takes no arguments and returns a 3-element
 list {\tt ( continue, str, index )}.}
 
+
 \membersection{wxConfigBase::GetFirstEntry}\label{wxconfigbasegetfirstentry}
 
 \constfunc{bool}{GetFirstEntry}{\param{wxString\& }{str}, \param{long\&}{ index}}
@@ -511,6 +536,7 @@ the next call.}
 \perlnote{In wxPerl this method takes no arguments and returns a 3-element
 list {\tt ( continue, str, index )}.}
 
+
 \membersection{wxConfigBase::GetNextGroup}\label{wxconfigbasegetnextgroup}
 
 \constfunc{bool}{GetNextGroup}{\param{wxString\& }{str}, \param{long\&}{ index}}
@@ -524,6 +550,7 @@ the next call.}
 \perlnote{In wxPerl this method only takes the {\tt index} parameter
 and returns a 3-element list {\tt ( continue, str, index )}.}
 
+
 \membersection{wxConfigBase::GetNextEntry}\label{wxconfigbasegetnextentry}
 
 \constfunc{bool}{GetNextEntry}{\param{wxString\& }{str}, \param{long\&}{ index}}
@@ -537,10 +564,12 @@ the next call.}
 \perlnote{In wxPerl this method only takes the {\tt index} parameter
 and returns a 3-element list {\tt ( continue, str, index )}.}
 
+
 \membersection{wxConfigBase::GetNumberOfEntries}\label{wxconfigbasegetnumberofentries}
 
 \constfunc{uint }{GetNumberOfEntries}{\param{bool }{bRecursive = false}}
 
+
 \membersection{wxConfigBase::GetNumberOfGroups}\label{wxconfigbasegetnumberofgroups}
 
 \constfunc{uint}{GetNumberOfGroups}{\param{bool }{bRecursive = false}}
@@ -548,42 +577,49 @@ and returns a 3-element list {\tt ( continue, str, index )}.}
 Get number of entries/subgroups in the current group, with or without its
 subgroups.
 
+
 \membersection{wxConfigBase::GetPath}\label{wxconfigbasegetpath}
 
 \constfunc{const wxString\&}{GetPath}{\void}
 
 Retrieve the current path (always as absolute path).
 
+
 \membersection{wxConfigBase::GetVendorName}\label{wxconfigbasegetvendorname}
 
 \constfunc{wxString}{GetVendorName}{\void}
 
 Returns the vendor name.
 
+
 \membersection{wxConfigBase::HasEntry}\label{wxconfigbasehasentry}
 
 \constfunc{bool}{HasEntry}{\param{wxString\& }{strName}}
 
 returns true if the entry by this name exists
 
+
 \membersection{wxConfigBase::HasGroup}\label{wxconfigbasehasgroup}
 
 \constfunc{bool}{HasGroup}{\param{const wxString\& }{strName}}
 
 returns true if the group by this name exists
 
+
 \membersection{wxConfigBase::IsExpandingEnvVars}\label{wxconfigbaseisexpandingenvvars}
 
 \constfunc{bool}{IsExpandingEnvVars}{\void}
 
 Returns true if we are expanding environment variables in key values.
 
+
 \membersection{wxConfigBase::IsRecordingDefaults}\label{wxconfigbaseisrecordingdefaults}
 
 \constfunc{bool}{IsRecordingDefaults}{\void}
 
 Returns true if we are writing defaults back to the config file.
 
+
 \membersection{wxConfigBase::Read}\label{wxconfigbaseread}
 
 \constfunc{bool}{Read}{\param{const wxString\& }{key}, \param{wxString*}{ str}}
@@ -676,6 +712,7 @@ implements the following methods:\par
 \end{twocollist}
 }}
 
+
 \membersection{wxConfigBase::RenameEntry}\label{wxconfigbaserenameentry}
 
 \func{bool}{RenameEntry}{\param{const wxString\& }{ oldName}, \param{const wxString\& }{ newName}}
@@ -687,6 +724,7 @@ arbitrary paths are accepted by this function.
 Returns false if the {\it oldName} doesn't exist or if {\it newName} already
 exists.
 
+
 \membersection{wxConfigBase::RenameGroup}\label{wxconfigbaserenamegroup}
 
 \func{bool}{RenameGroup}{\param{const wxString\& }{ oldName}, \param{const wxString\& }{ newName}}
@@ -698,6 +736,7 @@ arbitrary paths are accepted by this function.
 Returns false if the {\it oldName} doesn't exist or if {\it newName} already
 exists.
 
+
 \membersection{wxConfigBase::Set}\label{wxconfigbaseset}
 
 \func{static wxConfigBase *}{Set}{\param{wxConfigBase *}{pConfig}}
@@ -705,12 +744,14 @@ exists.
 Sets the config object as the current one, returns the pointer to the previous
 current object (both the parameter and returned value may be NULL)
 
+
 \membersection{wxConfigBase::SetExpandEnvVars}\label{wxconfigbasesetexpandenvvars}
 
 \func{void}{SetExpandEnvVars }{\param{bool }{bDoIt = true}}
 
 Determine whether we wish to expand environment variables in key values.
 
+
 \membersection{wxConfigBase::SetPath}\label{wxconfigbasesetpath}
 
 \func{void}{SetPath}{\param{const wxString\& }{strPath}}
@@ -719,6 +760,7 @@ Set current path: if the first character is '/', it is the absolute path,
 otherwise it is a relative path. '..' is supported. If the strPath doesn't
 exist it is created.
 
+
 \membersection{wxConfigBase::SetRecordDefaults}\label{wxconfigbasesetrecorddefaults}
 
 \func{void}{SetRecordDefaults}{\param{bool }{bDoIt = true}}
@@ -730,18 +772,6 @@ If on (default is off) all default values for the settings used by the program
 are written back to the config file. This allows the user to see what config
 options may be changed and is probably useful only for wxFileConfig.
 
-\membersection{wxConfigBase::SetUmask}\label{wxfileconfigsetumask}
-
-\func{void}{SetUmask}{\param{int }{mode}}
-
-{\bf NB:} this function is not in the base wxConfigBase class but is only
-implemented in wxFileConfig. Moreover, this function is Unix-specific and
-doesn't do anything on other platforms.
-
-SetUmask() allows to set the mode to be used for the config file creation.
-For example, to create a config file which is not readable by other users
-(useful if it stores some sensitive information, such as passwords), you
-should do {\tt SetUmask(0077)}.
 
 \membersection{wxConfigBase::Write}\label{wxconfigbasewrite}
 
diff --git a/docs/latex/wx/fileconf.tex b/docs/latex/wx/fileconf.tex
new file mode 100644 (file)
index 0000000..f914d1f
--- /dev/null
@@ -0,0 +1,81 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Name:        fileconf.tex
+%% Purpose:     wxFileConfig documentation
+%% Author:      Vadim Zeitlin
+%% Modified by:
+%% Created:     2004-10-04
+%% RCS-ID:      $Id$
+%% Copyright:   (c) 2004 Vadim Zeitlin
+%% License:     wxWidgets license
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section{\class{wxFileConfig}}\label{wxfileconfig}
+
+wxFileConfig implements \helpref{wxConfigBase}{wxconfigbase} interface for
+storing and retrieving configuration information using plain text files. The
+files have a simple format reminiscent of Windows INI files with lines of the
+form \texttt{key = value} defining the keys and lines of special form
+\texttt{$[$group$]$} indicating the start of each group.
+
+This class is used by default for wxConfig on Unix platforms but may also be
+used explicitly if you want to use files and not the registry even under
+Windows.
+
+\wxheading{Derived from}
+
+\helpref{wxConfigBase}{wxconfigbase}
+
+\wxheading{Include files}
+
+<wx/fileconf.h>
+
+
+\helponly{\insertatlevel{2}{\wxheading{Members}}}
+
+\membersection{wxFileConfig::wxFileConfig}{wxfileconfigctorstream}
+
+\func{}{wxFileConfig}{\param{wxInputStream\& }{is}, \param{wxMBConv\& }{conv = wxConvUTF8}}
+
+Read the config data from the specified stream instead of the associated file,
+as usual.
+
+\wxheading{See also}
+
+\helpref{Save}{wxfileconfigsave}
+
+
+\membersection{wxFileConfig::Save}{wxfileconfigsave}
+
+\func{bool}{Save}{\param{wxOutputStream\& }{os}, \param{wxMBConv\& }{conv = wxConvUTF8}}
+
+Saves all config data to the given stream, returns \true if data was saved
+successfully or \false on error.
+
+Note the interaction of this function with the internal ``dirty flag'': the
+data is saved unconditionally, i.e. even if the object is not dirty. However
+after saving it successfully, the dirty flag is reset so no changes will be
+written back to the file this object is associated with until you change its
+contents again.
+
+\wxheading{See also}
+
+\helpref{Flush}{wxconfigbaseflush}
+
+
+\membersection{wxFileConfig::SetUmask}\label{wxfileconfigsetumask}
+
+\func{void}{SetUmask}{\param{int }{mode}}
+
+Allows to set the mode to be used for the config file creation. For example, to
+create a config file which is not readable by other users (useful if it stores
+some sensitive information, such as passwords), you could use 
+{\tt SetUmask(0077)}.
+
+This function doesn't do anything on non-Unix platforms.
+
+\wxheading{See also}
+
+\helpref{wxCHANGE\_UMASK}{wxchangeumask}
+
+
+
index 0c8944ce4ced964a7f5e831a930ffb3cc733412d..67296ab9564eb7cfdcde6fbf9392c50c33cd8ab4 100644 (file)
@@ -164,6 +164,14 @@ public:
   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, wxMBConv& conv = wxConvUTF8);
+#endif // wxUSE_STREAMS
+
 public:
   // functions to work with this list
   wxFileConfigLineList *LineListAppend(const wxString& str);
index 4592781a632415204a05ac9f904b7abdb247f3c4..5e445db8ce67796c7b3ffddf6460a24cc235d9f1 100644 (file)
@@ -994,6 +994,30 @@ bool wxFileConfig::Flush(bool /* bCurrentOnly */)
   return true;
 }
 
+#if wxUSE_STREAMS
+
+bool wxFileConfig::Save(wxOutputStream& os, wxMBConv& conv)
+{
+    // save unconditionally, even if not dirty
+    for ( wxFileConfigLineList *p = m_linesHead; p != NULL; p = p->Next() )
+    {
+        wxString line = p->Text();
+        line += wxTextFile::GetEOL();
+        if ( !os.Write(line.mb_str(conv), line.length()) )
+        {
+            wxLogError(_("Error saving user configuration data."));
+
+            return false;
+        }
+    }
+
+    ResetDirty();
+
+    return true;
+}
+
+#endif // wxUSE_STREAMS
+
 // ----------------------------------------------------------------------------
 // renaming groups/entries
 // ----------------------------------------------------------------------------