added wxFileConfig::Save(stream); documented it in new, separate from wxConfig, wxFileConfig doc file (replaces patches 902372 and 900889)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@29632 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2004-10-03 22:55:08 +00:00
parent e1cc687422
commit a121d72052
6 changed files with 160 additions and 15 deletions

View 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:

View 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

View 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}

View File

@@ -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}

View 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);

View 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
// ----------------------------------------------------------------------------