]>
Commit | Line | Data |
---|---|---|
c4afa2cb VZ |
1 | \section{\class{wxConfigBase}}\label{wxconfigbase} |
2 | ||
3 | wxConfigBase class defines the basic interface of all config classes. It can | |
f6bcfd97 | 4 | not be used by itself (it is an abstract base class) and you will always use one |
7ad56d27 | 5 | of its derivations: \helpref{wxFileConfig}{wxfileconfig}, |
a121d720 | 6 | wxRegConfig or any other. |
c4afa2cb VZ |
7 | |
8 | However, usually you don't even need to know the precise nature of the class | |
9 | you're working with but you would just use the wxConfigBase methods. This | |
10 | allows you to write the same code regardless of whether you're working with | |
11 | the registry under Win32 or text-based config files under Unix (or even | |
12 | Windows 3.1 .INI files if you're really unlucky). To make writing the portable | |
fc2171bd | 13 | code even easier, wxWidgets provides a typedef wxConfig |
c4afa2cb | 14 | which is mapped onto the native wxConfigBase implementation on the given |
7ad56d27 | 15 | platform: i.e. wxRegConfig under Win32 and |
c4afa2cb VZ |
16 | wxFileConfig otherwise. |
17 | ||
5f3cd8a2 VZ |
18 | See \helpref{config overview}{wxconfigoverview} for the descriptions of all |
19 | features of this class. | |
c4afa2cb | 20 | |
eee786e9 VS |
21 | It is highly recommended to use static functions {\it Get()} and/or {\it Set()}, |
22 | so please have a \helpref{look at them.}{wxconfigstaticfunctions} | |
23 | ||
c4afa2cb VZ |
24 | \wxheading{Derived from} |
25 | ||
c4ec0ce8 | 26 | \helpref{wxObject}{wxobject} |
c4afa2cb | 27 | |
954b8ae6 JS |
28 | \wxheading{Include files} |
29 | ||
fc2171bd | 30 | <wx/config.h> (to let wxWidgets choose a wxConfig class for your platform)\\ |
954b8ae6 | 31 | <wx/confbase.h> (base config class)\\ |
2f930c85 | 32 | <wx/fileconf.h> (wxFileConfig class)\\ |
7ad56d27 | 33 | <wx/msw/regconf.h> (wxRegConfig class) |
954b8ae6 | 34 | |
c4afa2cb VZ |
35 | \wxheading{Example} |
36 | ||
37 | Here is how you would typically use this class: | |
38 | ||
39 | \begin{verbatim} | |
40 | // using wxConfig instead of writing wxFileConfig or wxRegConfig enhances | |
41 | // portability of the code | |
42 | wxConfig *config = new wxConfig("MyAppName"); | |
43 | ||
44 | wxString str; | |
052ae0e5 | 45 | if ( config->Read("LastPrompt", &str) ) { |
b8de493f | 46 | // last prompt was found in the config file/registry and its value is now |
c4afa2cb VZ |
47 | // in str |
48 | ... | |
49 | } | |
50 | else { | |
51 | // no last prompt... | |
52 | } | |
53 | ||
54 | // another example: using default values and the full path instead of just | |
55 | // key name: if the key is not found , the value 17 is returned | |
873fb06d | 56 | long value = config->Read("/LastRun/CalculatedValues/MaxValue", 17); |
c4afa2cb VZ |
57 | ... |
58 | ... | |
59 | ... | |
60 | // at the end of the program we would save everything back | |
61 | config->Write("LastPrompt", str); | |
62 | config->Write("/LastRun/CalculatedValues/MaxValue", value); | |
63 | ||
64 | // the changes will be written back automatically | |
65 | delete config; | |
66 | \end{verbatim} | |
67 | ||
68 | This basic example, of course, doesn't show all wxConfig features, such as | |
69 | enumerating, testing for existence and deleting the entries and groups of | |
b8de493f | 70 | entries in the config file, its abilities to automatically store the default |
c4afa2cb VZ |
71 | values or expand the environment variables on the fly. However, the main idea |
72 | is that using this class is easy and that it should normally do what you | |
73 | expect it to. | |
74 | ||
75 | NB: in the documentation of this class, the words "config file" also mean | |
76 | "registry hive" for wxRegConfig and, generally speaking, might mean any | |
b8de493f | 77 | physical storage where a wxConfigBase-derived class stores its data. |
c4afa2cb | 78 | |
b8de493f | 79 | \latexignore{\rtfignore{\wxheading{Function groups}}} |
c4afa2cb | 80 | |
a121d720 | 81 | |
eee786e9 | 82 | \membersection{Static functions}\label{wxconfigstaticfunctions} |
c4afa2cb | 83 | |
052ae0e5 | 84 | These functions deal with the "default" config object. Although its usage is |
c4afa2cb VZ |
85 | not at all mandatory it may be convenient to use a global config object |
86 | instead of creating and deleting the local config objects each time you need | |
87 | one (especially because creating a wxFileConfig object might be a time | |
88 | consuming operation). In this case, you may create this global config object | |
89 | in the very start of the program and {\it Set()} it as the default. Then, from | |
b52ea5c5 | 90 | anywhere in your program, you may access it using the {\it Get()} function. |
74970435 VZ |
91 | This global wxConfig object will be deleted by wxWidgets automatically if it |
92 | exists. Note that this implies that if you do delete this object yourself | |
93 | (usually in \helpref{wxApp::OnExit}{wxapponexit}) you must use {\it Set(NULL)} | |
94 | to prevent wxWidgets from deleting it the second time. | |
c4afa2cb VZ |
95 | |
96 | As it happens, you may even further simplify the procedure described above: | |
97 | you may forget about calling {\it Set()}. When {\it Get()} is called and there | |
98 | is no current object, it will create one using {\it Create()} function. To | |
99 | disable this behaviour {\it DontCreateOnDemand()} is provided. | |
100 | ||
fc2171bd | 101 | {\bf Note:} You should use either {\it Set()} or {\it Get()} because wxWidgets |
eee786e9 VS |
102 | library itself would take advantage of it and could save various information |
103 | in it. For example \helpref{wxFontMapper}{wxfontmapper} or Unix version | |
43e8916f | 104 | of \helpref{wxFileDialog}{wxfiledialog} have the ability to use wxConfig class. |
eee786e9 | 105 | |
b8de493f JS |
106 | \helpref{Set}{wxconfigbaseset}\\ |
107 | \helpref{Get}{wxconfigbaseget}\\ | |
108 | \helpref{Create}{wxconfigbasecreate}\\ | |
109 | \helpref{DontCreateOnDemand}{wxconfigbasedontcreateondemand} | |
c4afa2cb | 110 | |
a121d720 | 111 | |
f510b7b2 | 112 | \membersection{Constructor and destructor}\label{congigconstructordestructor} |
c4afa2cb | 113 | |
b8de493f JS |
114 | \helpref{wxConfigBase}{wxconfigbasector}\\ |
115 | \helpref{\destruct{wxConfigBase}}{wxconfigbasedtor} | |
c4afa2cb | 116 | |
a121d720 | 117 | |
f510b7b2 | 118 | \membersection{Path management}\label{configpathmanagement} |
c4afa2cb | 119 | |
5f3cd8a2 VZ |
120 | As explained in \helpref{config overview}{wxconfigoverview}, the config classes |
121 | support a file system-like hierarchy of keys (files) and groups (directories). | |
c4afa2cb VZ |
122 | As in the file system case, to specify a key in the config class you must use |
123 | a path to it. Config classes also support the notion of the current group, | |
124 | which makes it possible to use the relative paths. To clarify all this, here | |
f6bcfd97 | 125 | is an example (it is only for the sake of demonstration, it doesn't do anything |
c4afa2cb VZ |
126 | sensible!): |
127 | ||
128 | \begin{verbatim} | |
129 | wxConfig *config = new wxConfig("FooBarApp"); | |
130 | ||
131 | // right now the current path is '/' | |
132 | conf->Write("RootEntry", 1); | |
133 | ||
134 | // go to some other place: if the group(s) don't exist, they will be created | |
135 | conf->SetPath("/Group/Subgroup"); | |
136 | ||
137 | // create an entry in subgroup | |
138 | conf->Write("SubgroupEntry", 3); | |
21f280f4 | 139 | |
c4afa2cb VZ |
140 | // '..' is understood |
141 | conf->Write("../GroupEntry", 2); | |
142 | conf->SetPath(".."); | |
143 | ||
144 | wxASSERT( conf->Read("Subgroup/SubgroupEntry", 0l) == 3 ); | |
145 | ||
f6bcfd97 | 146 | // use absolute path: it is allowed, too |
c4afa2cb VZ |
147 | wxASSERT( conf->Read("/RootEntry", 0l) == 1 ); |
148 | \end{verbatim} | |
149 | ||
f6bcfd97 | 150 | {\it Warning}: it is probably a good idea to always restore the path to its |
c4afa2cb | 151 | old value on function exit: |
b8de493f | 152 | |
c4afa2cb VZ |
153 | \begin{verbatim} |
154 | void foo(wxConfigBase *config) | |
155 | { | |
156 | wxString strOldPath = config->GetPath(); | |
157 | ||
158 | config->SetPath("/Foo/Data"); | |
159 | ... | |
160 | ||
161 | config->SetPath(strOldPath); | |
162 | } | |
163 | \end{verbatim} | |
164 | ||
165 | because otherwise the assert in the following example will surely fail | |
166 | (we suppose here that {\it foo()} function is the same as above except that it | |
167 | doesn't save and restore the path): | |
168 | ||
169 | \begin{verbatim} | |
170 | void bar(wxConfigBase *config) | |
171 | { | |
172 | config->Write("Test", 17); | |
21f280f4 | 173 | |
c4afa2cb VZ |
174 | foo(config); |
175 | ||
176 | // we're reading "/Foo/Data/Test" here! -1 will probably be returned... | |
177 | wxASSERT( config->Read("Test", -1) == 17 ); | |
178 | } | |
179 | \end{verbatim} | |
180 | ||
181 | Finally, the path separator in wxConfigBase and derived classes is always '/', | |
f6bcfd97 | 182 | regardless of the platform (i.e. it is {\bf not} '$\backslash\backslash$' under Windows). |
c4afa2cb | 183 | |
b8de493f JS |
184 | \helpref{SetPath}{wxconfigbasesetpath}\\ |
185 | \helpref{GetPath}{wxconfigbasegetpath} | |
c4afa2cb | 186 | |
a121d720 | 187 | |
f510b7b2 | 188 | \membersection{Enumeration}\label{configenumeration} |
c4afa2cb VZ |
189 | |
190 | The functions in this section allow to enumerate all entries and groups in the | |
43e8916f | 191 | config file. All functions here return \false when there are no more items. |
c4afa2cb | 192 | |
b8de493f | 193 | You must pass the same index to GetNext and GetFirst (don't modify it). |
f6bcfd97 | 194 | Please note that it is {\bf not} the index of the current item (you will have |
2edb0bde | 195 | some great surprises with wxRegConfig if you assume this) and you shouldn't |
f6bcfd97 | 196 | even look at it: it is just a "cookie" which stores the state of the |
c4afa2cb VZ |
197 | enumeration. It can't be stored inside the class because it would prevent you |
198 | from running several enumerations simultaneously, that's why you must pass it | |
199 | explicitly. | |
200 | ||
201 | Having said all this, enumerating the config entries/groups is very simple: | |
202 | ||
203 | \begin{verbatim} | |
aefcdeee | 204 | wxConfigBase *config = ...; |
c4afa2cb VZ |
205 | wxArrayString aNames; |
206 | ||
207 | // enumeration variables | |
208 | wxString str; | |
209 | long dummy; | |
210 | ||
211 | // first enum all entries | |
212 | bool bCont = config->GetFirstEntry(str, dummy); | |
213 | while ( bCont ) { | |
214 | aNames.Add(str); | |
215 | ||
216 | bCont = GetConfig()->GetNextEntry(str, dummy); | |
217 | } | |
218 | ||
219 | ... we have all entry names in aNames... | |
220 | ||
221 | // now all groups... | |
222 | bCont = GetConfig()->GetFirstGroup(str, dummy); | |
223 | while ( bCont ) { | |
224 | aNames.Add(str); | |
225 | ||
226 | bCont = GetConfig()->GetNextGroup(str, dummy); | |
227 | } | |
228 | ||
229 | ... we have all group (and entry) names in aNames... | |
230 | ||
231 | \end{verbatim} | |
232 | ||
b8de493f | 233 | There are also functions to get the number of entries/subgroups without |
c4afa2cb VZ |
234 | actually enumerating them, but you will probably never need them. |
235 | ||
b8de493f JS |
236 | \helpref{GetFirstGroup}{wxconfigbasegetfirstgroup}\\ |
237 | \helpref{GetNextGroup}{wxconfigbasegetnextgroup}\\ | |
238 | \helpref{GetFirstEntry}{wxconfigbasegetfirstentry}\\ | |
239 | \helpref{GetNextEntry}{wxconfigbasegetnextentry}\\ | |
240 | \helpref{GetNumberOfEntries}{wxconfigbasegetnumberofentries}\\ | |
241 | \helpref{GetNumberOfGroups}{wxconfigbasegetnumberofgroups} | |
c4afa2cb | 242 | |
a121d720 | 243 | |
f510b7b2 | 244 | \membersection{Tests of existence}\label{configtestsofexistence} |
c4afa2cb | 245 | |
b8de493f JS |
246 | \helpref{HasGroup}{wxconfigbasehasgroup}\\ |
247 | \helpref{HasEntry}{wxconfigbasehasentry}\\ | |
19d40bab VZ |
248 | \helpref{Exists}{wxconfigbaseexists}\\ |
249 | \helpref{GetEntryType}{wxconfigbasegetentrytype} | |
c4afa2cb | 250 | |
a121d720 | 251 | |
f510b7b2 | 252 | \membersection{Miscellaneous functions}\label{configmiscellaneous} |
052ae0e5 | 253 | |
052ae0e5 | 254 | \helpref{GetAppName}{wxconfigbasegetappname}\\ |
f6bcfd97 BP |
255 | \helpref{GetVendorName}{wxconfigbasegetvendorname}\\ |
256 | \helpref{SetUmask}{wxfileconfigsetumask} | |
052ae0e5 | 257 | |
a121d720 | 258 | |
f510b7b2 | 259 | \membersection{Key access}\label{configkeyaccess} |
c4afa2cb VZ |
260 | |
261 | These function are the core of wxConfigBase class: they allow you to read and | |
262 | write config file data. All {\it Read} function take a default value which | |
263 | will be returned if the specified key is not found in the config file. | |
264 | ||
3e1512cd VZ |
265 | Currently, supported types of data are: |
266 | \helpref{wxString}{wxstring}, {\it long}, {\it double}, {\it bool}, | |
267 | \helpref{wxColour}{wxcolour} and any other types, | |
268 | for which functions \helpref{wxToString}{wxtostring} | |
269 | and \helpref{wxFromString}{wxfromstring} are defined. | |
c4afa2cb VZ |
270 | |
271 | Try not to read long values into string variables and vice versa: although it | |
272 | just might work with wxFileConfig, you will get a system error with | |
273 | wxRegConfig because in the Windows registry the different types of entries are | |
274 | indeed used. | |
275 | ||
276 | Final remark: the {\it szKey} parameter for all these functions can contain an | |
277 | arbitrary path (either relative or absolute), not just the key name. | |
278 | ||
b8de493f JS |
279 | \helpref{Read}{wxconfigbaseread}\\ |
280 | \helpref{Write}{wxconfigbasewrite}\\ | |
281 | \helpref{Flush}{wxconfigbaseflush} | |
282 | ||
a121d720 | 283 | |
f510b7b2 | 284 | \membersection{Rename entries/groups}\label{configrenaming} |
5d1902d6 VZ |
285 | |
286 | The functions in this section allow to rename entries or subgroups of the | |
43e8916f | 287 | current group. They will return \false on error. typically because either the |
5d1902d6 VZ |
288 | entry/group with the original name doesn't exist, because the entry/group with |
289 | the new name already exists or because the function is not supported in this | |
290 | wxConfig implementation. | |
291 | ||
292 | \helpref{RenameEntry}{wxconfigbaserenameentry}\\ | |
293 | \helpref{RenameGroup}{wxconfigbaserenamegroup} | |
294 | ||
a121d720 | 295 | |
f510b7b2 | 296 | \membersection{Delete entries/groups}\label{configdeleting} |
b8de493f JS |
297 | |
298 | The functions in this section delete entries and/or groups of entries from the | |
299 | config file. {\it DeleteAll()} is especially useful if you want to erase all | |
300 | traces of your program presence: for example, when you uninstall it. | |
301 | ||
302 | \helpref{DeleteEntry}{wxconfigbasedeleteentry}\\ | |
303 | \helpref{DeleteGroup}{wxconfigbasedeletegroup}\\ | |
304 | \helpref{DeleteAll}{wxconfigbasedeleteall} | |
305 | ||
a121d720 | 306 | |
f510b7b2 | 307 | \membersection{Options}\label{configoptions} |
b8de493f JS |
308 | |
309 | Some aspects of wxConfigBase behaviour can be changed during run-time. The | |
310 | first of them is the expansion of environment variables in the string values | |
311 | read from the config file: for example, if you have the following in your | |
312 | config file: | |
313 | ||
314 | \begin{verbatim} | |
315 | # config file for my program | |
316 | UserData = $HOME/data | |
317 | ||
318 | # the following syntax is valud only under Windows | |
319 | UserData = %windir%\\data.dat | |
320 | \end{verbatim} | |
9722642d | 321 | % $ % help EMACS syntax highlighting... |
7af3ca16 VZ |
322 | the call to {\tt config->Read("UserData")} will return something like |
323 | {\tt "/home/zeitlin/data"} if you're lucky enough to run a Linux system ;-) | |
b8de493f JS |
324 | |
325 | Although this feature is very useful, it may be annoying if you read a value | |
326 | which containts '\$' or '\%' symbols (\% is used for environment variables | |
327 | expansion under Windows) which are not used for environment variable | |
cc81d32f VS |
328 | expansion. In this situation you may call SetExpandEnvVars(false) just before |
329 | reading this value and SetExpandEnvVars(true) just after. Another solution | |
b8de493f JS |
330 | would be to prefix the offending symbols with a backslash. |
331 | ||
332 | The following functions control this option: | |
333 | ||
334 | \helpref{IsExpandingEnvVars}{wxconfigbaseisexpandingenvvars}\\ | |
f6bcfd97 | 335 | \helpref{SetExpandEnvVars}{wxconfigbasesetexpandenvvars}\\ |
b8de493f JS |
336 | \helpref{SetRecordDefaults}{wxconfigbasesetrecorddefaults}\\ |
337 | \helpref{IsRecordingDefaults}{wxconfigbaseisrecordingdefaults} | |
338 | ||
339 | %%%%% MEMBERS HERE %%%%% | |
340 | \helponly{\insertatlevel{2}{ | |
341 | ||
342 | \wxheading{Members} | |
343 | ||
344 | }} | |
345 | ||
a121d720 | 346 | |
052ae0e5 | 347 | \membersection{wxConfigBase::wxConfigBase}\label{wxconfigbasector} |
b8de493f | 348 | |
052ae0e5 JS |
349 | \func{}{wxConfigBase}{\param{const wxString\& }{appName = wxEmptyString}, |
350 | \param{const wxString\& }{vendorName = wxEmptyString}, | |
351 | \param{const wxString\& }{localFilename = wxEmptyString}, | |
352 | \param{const wxString\& }{globalFilename = wxEmptyString}, | |
4561e95d | 353 | \param{long}{ style = 0}, |
5487ff0f | 354 | \param{const wxMBConv\&}{ conv = wxConvAuto()}} |
b8de493f | 355 | |
5f3cd8a2 VZ |
356 | This is the default and only constructor of the wxConfigBase class, and |
357 | derived classes. | |
b8de493f | 358 | |
052ae0e5 | 359 | \wxheading{Parameters} |
b8de493f | 360 | |
5f3cd8a2 VZ |
361 | \docparam{appName}{The application name. If this is empty, the class will |
362 | normally use \helpref{wxApp::GetAppName}{wxappgetappname} to set it. The | |
363 | application name is used in the registry key on Windows, and can be used to | |
364 | deduce the local filename parameter if that is missing.} | |
b8de493f | 365 | |
052ae0e5 JS |
366 | \docparam{vendorName}{The vendor name. If this is empty, it is assumed that |
367 | no vendor name is wanted, if this is optional for the current config class. | |
368 | The vendor name is appended to the application name for wxRegConfig.} | |
b8de493f | 369 | |
5f3cd8a2 VZ |
370 | \docparam{localFilename}{Some config classes require a local filename. If this |
371 | is not present, but required, the application name will be used instead.} | |
b8de493f | 372 | |
5f3cd8a2 VZ |
373 | \docparam{globalFilename}{Some config classes require a global filename. If |
374 | this is not present, but required, the application name will be used instead.} | |
b8de493f | 375 | |
5f3cd8a2 VZ |
376 | \docparam{style}{Can be one of wxCONFIG\_USE\_LOCAL\_FILE and |
377 | wxCONFIG\_USE\_GLOBAL\_FILE. The style interpretation depends on the config | |
04af2f5c | 378 | class and is ignored by some implementations. For wxFileConfig, these styles |
5e1fd3eb VS |
379 | determine whether a local or global config file is created or used: if |
380 | wxCONFIG\_USE\_GLOBAL\_FILE is used, then settings are read from the global | |
381 | config file and if wxCONFIG\_USE\_LOCAL\_FILE is used, settings are read from | |
382 | and written to local config file (if they are both set, global file is read | |
383 | first, then local file, overwriting global settings). If the | |
04af2f5c VZ |
384 | flag is present but the parameter is empty, the parameter will be set to a |
385 | default. If the parameter is present but the style flag not, the relevant flag | |
386 | will be added to the style. For wxRegConfig, thie GLOBAL flag refers to HKLM | |
387 | key while LOCAL one is for the usual HKCU one. | |
388 | ||
389 | For wxFileConfig you can also add wxCONFIG\_USE\_RELATIVE\_PATH by logically | |
390 | or'ing it to either of the \_FILE options to tell wxFileConfig to use relative | |
391 | instead of absolute paths. | |
392 | ||
393 | On non-VMS Unix systems, the default local configuration file is \tt{~/.appname}. | |
394 | However, this path may be also used as user data directory | |
395 | (see \helpref{wxStandardPaths::GetUserDataDir}{wxstandardpathsgetuserdatadir}) if | |
396 | the application has several data files. In this case wxCONFIG\_USE\_SUBDIR | |
397 | flag, which changes the default local configuration file to \tt{~/.appname/appname} | |
466e87bd VZ |
398 | should be used. Notice that this flag is ignored if \textit{localFilename} is |
399 | provided. \newsince{2.8.2} | |
04af2f5c VZ |
400 | |
401 | For wxFileConfig, you can also add wxCONFIG\_USE\_NO\_ESCAPE\_CHARACTERS which | |
402 | will turn off character escaping for the values of entries stored in the config | |
403 | file: for example a {\it foo} key with some backslash characters will be stored | |
404 | as {\tt foo=C:$\backslash$mydir} instead of the usual storage of {\tt | |
405 | foo=C:$\backslash\backslash$mydir}. | |
2b5f62a0 | 406 | |
8dce54c9 | 407 | The wxCONFIG\_USE\_NO\_ESCAPE\_CHARACTERS style can be helpful if your config |
fc2171bd | 408 | file must be read or written to by a non-wxWidgets program (which might not |
8dce54c9 VZ |
409 | understand the escape characters). Note, however, that if |
410 | wxCONFIG\_USE\_NO\_ESCAPE\_CHARACTERS style is used, it is is now | |
411 | your application's responsibility to ensure that there is no newline or | |
412 | other illegal characters in a value, before writing that value to the file.} | |
b8de493f | 413 | |
b867ed68 | 414 | \docparam{conv}{This parameter is only used by wxFileConfig when compiled |
3980000c | 415 | in Unicode mode. It specifies the encoding in which the configuration file |
b867ed68 VS |
416 | is written.} |
417 | ||
418 | ||
052ae0e5 | 419 | \wxheading{Remarks} |
b8de493f | 420 | |
5f3cd8a2 VZ |
421 | By default, environment variable expansion is on and recording defaults is |
422 | off. | |
b8de493f | 423 | |
a121d720 | 424 | |
052ae0e5 | 425 | \membersection{wxConfigBase::\destruct{wxConfigBase}}\label{wxconfigbasedtor} |
b8de493f | 426 | |
052ae0e5 | 427 | \func{}{\destruct{wxConfigBase}}{\void} |
b8de493f | 428 | |
052ae0e5 | 429 | Empty but ensures that dtor of all derived classes is virtual. |
b8de493f | 430 | |
a121d720 | 431 | |
b8de493f JS |
432 | \membersection{wxConfigBase::Create}\label{wxconfigbasecreate} |
433 | ||
052ae0e5 | 434 | \func{static wxConfigBase *}{Create}{\void} |
b8de493f JS |
435 | |
436 | Create a new config object: this function will create the "best" | |
5f3cd8a2 VZ |
437 | implementation of wxConfig available for the current platform, see comments |
438 | near the definition of wxCONFIG\_WIN32\_NATIVE for details. It returns the | |
439 | created object and also sets it as the current one. | |
b8de493f | 440 | |
a121d720 | 441 | |
b8de493f JS |
442 | \membersection{wxConfigBase::DontCreateOnDemand}\label{wxconfigbasedontcreateondemand} |
443 | ||
444 | \func{void}{DontCreateOnDemand}{\void} | |
445 | ||
446 | Calling this function will prevent {\it Get()} from automatically creating a | |
447 | new config object if the current one is NULL. It might be useful to call it | |
43e8916f | 448 | near the program end to prevent "accidental" creation of a new config object. |
b8de493f | 449 | |
a121d720 | 450 | |
052ae0e5 | 451 | \membersection{wxConfigBase::DeleteAll}\label{wxconfigbasedeleteall} |
b8de493f | 452 | |
052ae0e5 | 453 | \func{bool}{DeleteAll}{\void} |
b8de493f | 454 | |
052ae0e5 | 455 | Delete the whole underlying object (disk file, registry key, ...). Primarly |
43e8916f | 456 | for use by uninstallation routine. |
b8de493f | 457 | |
a121d720 | 458 | |
052ae0e5 | 459 | \membersection{wxConfigBase::DeleteEntry}\label{wxconfigbasedeleteentry} |
b8de493f | 460 | |
cc81d32f | 461 | \func{bool}{DeleteEntry}{\param{const wxString\& }{ key}, \param{bool}{ bDeleteGroupIfEmpty = true}} |
b8de493f | 462 | |
5f3cd8a2 VZ |
463 | Deletes the specified entry and the group it belongs to if it was the last key |
464 | in it and the second parameter is true. | |
b8de493f | 465 | |
a121d720 | 466 | |
052ae0e5 | 467 | \membersection{wxConfigBase::DeleteGroup}\label{wxconfigbasedeletegroup} |
b8de493f | 468 | |
052ae0e5 | 469 | \func{bool}{DeleteGroup}{\param{const wxString\& }{ key}} |
b8de493f | 470 | |
41f30152 VZ |
471 | Delete the group (with all subgroups). If the current path is under the group |
472 | being deleted it is changed to its deepest still existing component. E.g. if | |
473 | the current path is \texttt{/A/B/C/D} and the group \texttt{C} is deleted the | |
474 | path becomes \texttt{/A/B}. | |
052ae0e5 | 475 | |
a121d720 | 476 | |
052ae0e5 JS |
477 | \membersection{wxConfigBase::Exists}\label{wxconfigbaseexists} |
478 | ||
479 | \constfunc{bool}{Exists}{\param{wxString\& }{strName}} | |
480 | ||
43e8916f | 481 | returns \true if either a group or an entry with a given name exists |
052ae0e5 | 482 | |
a121d720 | 483 | |
052ae0e5 JS |
484 | \membersection{wxConfigBase::Flush}\label{wxconfigbaseflush} |
485 | ||
cc81d32f | 486 | \func{bool}{Flush}{\param{bool }{bCurrentOnly = false}} |
052ae0e5 JS |
487 | |
488 | permanently writes all changes (otherwise, they're only written from object's | |
489 | destructor) | |
490 | ||
a121d720 | 491 | |
052ae0e5 JS |
492 | \membersection{wxConfigBase::Get}\label{wxconfigbaseget} |
493 | ||
cc81d32f | 494 | \func{static wxConfigBase *}{Get}{\param{bool }{CreateOnDemand = true}} |
052ae0e5 | 495 | |
eee786e9 | 496 | Get the current config object. If there is no current object and |
cc81d32f | 497 | {\it CreateOnDemand} is true, creates one |
052ae0e5 JS |
498 | (using {\it Create}) unless DontCreateOnDemand was called previously. |
499 | ||
a121d720 | 500 | |
052ae0e5 JS |
501 | \membersection{wxConfigBase::GetAppName}\label{wxconfigbasegetappname} |
502 | ||
503 | \constfunc{wxString}{GetAppName}{\void} | |
504 | ||
505 | Returns the application name. | |
506 | ||
a121d720 | 507 | |
19d40bab VZ |
508 | \membersection{wxConfigBase::GetEntryType}\label{wxconfigbasegetentrytype} |
509 | ||
510 | \constfunc{enum wxConfigBase::EntryType}{GetEntryType}{\param{const wxString\& }{name}} | |
511 | ||
512 | Returns the type of the given entry or {\it Unknown} if the entry doesn't | |
513 | exist. This function should be used to decide which version of Read() should | |
514 | be used because some of wxConfig implementations will complain about type | |
515 | mismatch otherwise: e.g., an attempt to read a string value from an integer | |
6776a0b2 | 516 | key with wxRegConfig will fail. |
19d40bab VZ |
517 | |
518 | The result is an element of enum EntryType: | |
519 | ||
520 | \begin{verbatim} | |
521 | enum EntryType | |
522 | { | |
43e8916f MW |
523 | Type_Unknown, |
524 | Type_String, | |
525 | Type_Boolean, | |
526 | Type_Integer, | |
527 | Type_Float | |
19d40bab VZ |
528 | }; |
529 | \end{verbatim} | |
530 | ||
a121d720 | 531 | |
052ae0e5 JS |
532 | \membersection{wxConfigBase::GetFirstGroup}\label{wxconfigbasegetfirstgroup} |
533 | ||
f6bcfd97 | 534 | \constfunc{bool}{GetFirstGroup}{\param{wxString\& }{str}, \param{long\&}{ index}} |
052ae0e5 JS |
535 | |
536 | Gets the first group. | |
537 | ||
21f280f4 RD |
538 | \pythonnote{The wxPython version of this method returns a 3-tuple |
539 | consisting of the continue flag, the value string, and the index for | |
540 | the next call.} | |
541 | ||
9722642d MB |
542 | \perlnote{In wxPerl this method takes no arguments and returns a 3-element |
543 | list {\tt ( continue, str, index )}.} | |
544 | ||
a121d720 | 545 | |
052ae0e5 JS |
546 | \membersection{wxConfigBase::GetFirstEntry}\label{wxconfigbasegetfirstentry} |
547 | ||
f6bcfd97 | 548 | \constfunc{bool}{GetFirstEntry}{\param{wxString\& }{str}, \param{long\&}{ index}} |
052ae0e5 JS |
549 | |
550 | Gets the first entry. | |
551 | ||
21f280f4 RD |
552 | \pythonnote{The wxPython version of this method returns a 3-tuple |
553 | consisting of the continue flag, the value string, and the index for | |
554 | the next call.} | |
555 | ||
9722642d MB |
556 | \perlnote{In wxPerl this method takes no arguments and returns a 3-element |
557 | list {\tt ( continue, str, index )}.} | |
558 | ||
a121d720 | 559 | |
052ae0e5 JS |
560 | \membersection{wxConfigBase::GetNextGroup}\label{wxconfigbasegetnextgroup} |
561 | ||
f6bcfd97 | 562 | \constfunc{bool}{GetNextGroup}{\param{wxString\& }{str}, \param{long\&}{ index}} |
052ae0e5 JS |
563 | |
564 | Gets the next group. | |
565 | ||
21f280f4 RD |
566 | \pythonnote{The wxPython version of this method returns a 3-tuple |
567 | consisting of the continue flag, the value string, and the index for | |
568 | the next call.} | |
569 | ||
9722642d MB |
570 | \perlnote{In wxPerl this method only takes the {\tt index} parameter |
571 | and returns a 3-element list {\tt ( continue, str, index )}.} | |
572 | ||
a121d720 | 573 | |
052ae0e5 JS |
574 | \membersection{wxConfigBase::GetNextEntry}\label{wxconfigbasegetnextentry} |
575 | ||
f6bcfd97 | 576 | \constfunc{bool}{GetNextEntry}{\param{wxString\& }{str}, \param{long\&}{ index}} |
052ae0e5 JS |
577 | |
578 | Gets the next entry. | |
579 | ||
21f280f4 RD |
580 | \pythonnote{The wxPython version of this method returns a 3-tuple |
581 | consisting of the continue flag, the value string, and the index for | |
582 | the next call.} | |
583 | ||
9722642d MB |
584 | \perlnote{In wxPerl this method only takes the {\tt index} parameter |
585 | and returns a 3-element list {\tt ( continue, str, index )}.} | |
586 | ||
a121d720 | 587 | |
052ae0e5 JS |
588 | \membersection{wxConfigBase::GetNumberOfEntries}\label{wxconfigbasegetnumberofentries} |
589 | ||
cc81d32f | 590 | \constfunc{uint }{GetNumberOfEntries}{\param{bool }{bRecursive = false}} |
052ae0e5 | 591 | |
a121d720 | 592 | |
052ae0e5 JS |
593 | \membersection{wxConfigBase::GetNumberOfGroups}\label{wxconfigbasegetnumberofgroups} |
594 | ||
cc81d32f | 595 | \constfunc{uint}{GetNumberOfGroups}{\param{bool }{bRecursive = false}} |
052ae0e5 | 596 | |
5f3cd8a2 VZ |
597 | Get number of entries/subgroups in the current group, with or without its |
598 | subgroups. | |
b8de493f | 599 | |
a121d720 | 600 | |
b8de493f JS |
601 | \membersection{wxConfigBase::GetPath}\label{wxconfigbasegetpath} |
602 | ||
052ae0e5 | 603 | \constfunc{const wxString\&}{GetPath}{\void} |
b8de493f JS |
604 | |
605 | Retrieve the current path (always as absolute path). | |
606 | ||
a121d720 | 607 | |
052ae0e5 | 608 | \membersection{wxConfigBase::GetVendorName}\label{wxconfigbasegetvendorname} |
b8de493f | 609 | |
052ae0e5 | 610 | \constfunc{wxString}{GetVendorName}{\void} |
b8de493f | 611 | |
052ae0e5 | 612 | Returns the vendor name. |
b8de493f | 613 | |
a121d720 | 614 | |
b8de493f JS |
615 | \membersection{wxConfigBase::HasEntry}\label{wxconfigbasehasentry} |
616 | ||
617 | \constfunc{bool}{HasEntry}{\param{wxString\& }{strName}} | |
618 | ||
43e8916f | 619 | returns \true if the entry by this name exists |
b8de493f | 620 | |
a121d720 | 621 | |
052ae0e5 | 622 | \membersection{wxConfigBase::HasGroup}\label{wxconfigbasehasgroup} |
b8de493f | 623 | |
052ae0e5 | 624 | \constfunc{bool}{HasGroup}{\param{const wxString\& }{strName}} |
b8de493f | 625 | |
43e8916f | 626 | returns \true if the group by this name exists |
052ae0e5 | 627 | |
a121d720 | 628 | |
052ae0e5 JS |
629 | \membersection{wxConfigBase::IsExpandingEnvVars}\label{wxconfigbaseisexpandingenvvars} |
630 | ||
631 | \constfunc{bool}{IsExpandingEnvVars}{\void} | |
632 | ||
43e8916f | 633 | Returns \true if we are expanding environment variables in key values. |
052ae0e5 | 634 | |
a121d720 | 635 | |
052ae0e5 JS |
636 | \membersection{wxConfigBase::IsRecordingDefaults}\label{wxconfigbaseisrecordingdefaults} |
637 | ||
f6bcfd97 | 638 | \constfunc{bool}{IsRecordingDefaults}{\void} |
052ae0e5 | 639 | |
43e8916f | 640 | Returns \true if we are writing defaults back to the config file. |
b8de493f | 641 | |
a121d720 | 642 | |
b8de493f JS |
643 | \membersection{wxConfigBase::Read}\label{wxconfigbaseread} |
644 | ||
f6bcfd97 | 645 | \constfunc{bool}{Read}{\param{const wxString\& }{key}, \param{wxString*}{ str}} |
052ae0e5 | 646 | |
43e8916f | 647 | Read a string from the key, returning \true if the value was read. If the key |
5f3cd8a2 | 648 | was not found, {\it str} is not changed. |
052ae0e5 | 649 | |
f6bcfd97 | 650 | \constfunc{bool}{Read}{\param{const wxString\& }{key}, \param{wxString*}{ str}, \param{const wxString\& }{defaultVal}} |
052ae0e5 | 651 | |
5f3cd8a2 VZ |
652 | Read a string from the key. The default value is returned if the key was not |
653 | found. | |
c4afa2cb | 654 | |
43e8916f | 655 | Returns \true if value was really read, \false if the default was used. |
c4afa2cb | 656 | |
5f3cd8a2 VZ |
657 | \constfunc{wxString}{Read}{\param{const wxString\& }{key}, \param{const |
658 | wxString\& }{defaultVal}} | |
c4afa2cb | 659 | |
052ae0e5 | 660 | Another version of {\it Read()}, returning the string value directly. |
c4afa2cb | 661 | |
052ae0e5 | 662 | \constfunc{bool}{Read}{\param{const wxString\& }{ key}, \param{long*}{ l}} |
c4afa2cb | 663 | |
43e8916f | 664 | Reads a long value, returning \true if the value was found. If the value was |
5f3cd8a2 | 665 | not found, {\it l} is not changed. |
c4afa2cb | 666 | |
5f3cd8a2 VZ |
667 | \constfunc{bool}{Read}{\param{const wxString\& }{ key}, \param{long*}{ l}, |
668 | \param{long}{ defaultVal}} | |
052ae0e5 | 669 | |
43e8916f | 670 | Reads a long value, returning \true if the value was found. If the value was |
5f3cd8a2 | 671 | not found, {\it defaultVal} is used instead. |
052ae0e5 | 672 | |
f6bcfd97 | 673 | \constfunc{long }{Read}{\param{const wxString\& }{key}, \param{long}{ defaultVal}} |
052ae0e5 | 674 | |
5f3cd8a2 VZ |
675 | Reads a long value from the key and returns it. {\it defaultVal} is returned |
676 | if the key is not found. | |
c4afa2cb VZ |
677 | |
678 | NB: writing | |
052ae0e5 | 679 | |
6aa358ae GT |
680 | {\small |
681 | \begin{verbatim} | |
682 | conf->Read("key", 0); | |
683 | \end{verbatim} | |
684 | } | |
052ae0e5 | 685 | |
5f3cd8a2 VZ |
686 | won't work because the call is ambiguous: compiler can not choose between two |
687 | {\it Read} functions. Instead, write: | |
052ae0e5 | 688 | |
6aa358ae GT |
689 | {\small |
690 | \begin{verbatim} | |
691 | conf->Read("key", 0l); | |
692 | \end{verbatim} | |
693 | } | |
c4afa2cb | 694 | |
052ae0e5 | 695 | \constfunc{bool}{Read}{\param{const wxString\& }{ key}, \param{double*}{ d}} |
c4afa2cb | 696 | |
43e8916f | 697 | Reads a double value, returning \true if the value was found. If the value was |
5f3cd8a2 | 698 | not found, {\it d} is not changed. |
c4afa2cb | 699 | |
5f3cd8a2 | 700 | \constfunc{bool}{Read}{\param{const wxString\& }{ key}, \param{double*}{ d}, |
0d57be45 | 701 | \param{double}{ defaultVal}} |
b8de493f | 702 | |
43e8916f | 703 | Reads a double value, returning \true if the value was found. If the value was |
5f3cd8a2 | 704 | not found, {\it defaultVal} is used instead. |
b8de493f | 705 | |
052ae0e5 | 706 | \constfunc{bool}{Read}{\param{const wxString\& }{ key}, \param{bool*}{ b}} |
c4afa2cb | 707 | |
43e8916f | 708 | Reads a bool value, returning \true if the value was found. If the value was |
5f3cd8a2 | 709 | not found, {\it b} is not changed. |
b8de493f | 710 | |
5f3cd8a2 VZ |
711 | \constfunc{bool}{Read}{\param{const wxString\& }{ key}, \param{bool*}{ d}, |
712 | \param{bool}{ defaultVal}} | |
c4afa2cb | 713 | |
43e8916f | 714 | Reads a bool value, returning \true if the value was found. If the value was |
5f3cd8a2 | 715 | not found, {\it defaultVal} is used instead. |
c4afa2cb | 716 | |
5814e8ba VZ |
717 | \constfunc{bool}{Read}{\param{const wxString\& }{ key}, \param{wxMemoryBuffer*}{ buf}} |
718 | ||
719 | Reads a binary block, returning \true if the value was found. If the value was | |
720 | not found, {\it buf} is not changed. | |
721 | ||
3e1512cd VZ |
722 | \constfunc{bool}{Read}{\param{const wxString\& }{ key}, \param{T*}{ value}} |
723 | ||
724 | Reads a value of type T, for which function | |
725 | \helpref{wxFromString}{wxfromstring} is defined, | |
726 | returning \true if the value was found. | |
727 | If the value was not found, {\it value} is not changed. | |
728 | ||
729 | \constfunc{bool}{Read}{\param{const wxString\& }{ key}, \param{T*}{ value}, | |
730 | \param{T const\& }{ defaultVal}} | |
731 | ||
732 | Reads a value of type T, for which function | |
733 | \helpref{wxFromString}{wxfromstring} is defined, | |
734 | returning \true if the value was found. | |
735 | If the value was not found, {\it defaultVal} is used instead. | |
736 | ||
737 | bool Read(const wxString& key, T* value) const; | |
738 | ||
21f280f4 RD |
739 | \pythonnote{In place of a single overloaded method name, wxPython |
740 | implements the following methods:\par | |
741 | \indented{2cm}{\begin{twocollist} | |
c9110876 VS |
742 | \twocolitem{{\bf Read(key, default="")}}{Returns a string.} |
743 | \twocolitem{{\bf ReadInt(key, default=0)}}{Returns an int.} | |
744 | \twocolitem{{\bf ReadFloat(key, default=0.0)}}{Returns a floating point number.} | |
21f280f4 RD |
745 | \end{twocollist}} |
746 | } | |
747 | ||
9722642d MB |
748 | \perlnote{In place of a single overloaded method, wxPerl uses:\par |
749 | \indented{2cm}{\begin{twocollist} | |
750 | \twocolitem{{\bf Read(key, default="")}}{Returns a string} | |
751 | \twocolitem{{\bf ReadInt(key, default=0)}}{Returns an integer} | |
752 | \twocolitem{{\bf ReadFloat(key, default=0.0)}}{Returns a floating point number} | |
753 | \twocolitem{{\bf ReadBool(key, default=0)}}{Returns a boolean} | |
754 | \end{twocollist} | |
755 | }} | |
756 | ||
a121d720 | 757 | |
5d1902d6 VZ |
758 | \membersection{wxConfigBase::RenameEntry}\label{wxconfigbaserenameentry} |
759 | ||
760 | \func{bool}{RenameEntry}{\param{const wxString\& }{ oldName}, \param{const wxString\& }{ newName}} | |
761 | ||
762 | Renames an entry in the current group. The entries names (both the old and | |
763 | the new one) shouldn't contain backslashes, i.e. only simple names and not | |
764 | arbitrary paths are accepted by this function. | |
765 | ||
43e8916f | 766 | Returns \false if {\it oldName} doesn't exist or if {\it newName} already |
5d1902d6 VZ |
767 | exists. |
768 | ||
a121d720 | 769 | |
5d1902d6 VZ |
770 | \membersection{wxConfigBase::RenameGroup}\label{wxconfigbaserenamegroup} |
771 | ||
772 | \func{bool}{RenameGroup}{\param{const wxString\& }{ oldName}, \param{const wxString\& }{ newName}} | |
773 | ||
774 | Renames a subgroup of the current group. The subgroup names (both the old and | |
775 | the new one) shouldn't contain backslashes, i.e. only simple names and not | |
776 | arbitrary paths are accepted by this function. | |
777 | ||
43e8916f | 778 | Returns \false if {\it oldName} doesn't exist or if {\it newName} already |
5d1902d6 VZ |
779 | exists. |
780 | ||
a121d720 | 781 | |
052ae0e5 | 782 | \membersection{wxConfigBase::Set}\label{wxconfigbaseset} |
c4afa2cb | 783 | |
142b3bc2 | 784 | \func{static wxConfigBase *}{Set}{\param{wxConfigBase *}{pConfig}} |
c4afa2cb | 785 | |
052ae0e5 JS |
786 | Sets the config object as the current one, returns the pointer to the previous |
787 | current object (both the parameter and returned value may be NULL) | |
c4afa2cb | 788 | |
a121d720 | 789 | |
f6bcfd97 | 790 | \membersection{wxConfigBase::SetExpandEnvVars}\label{wxconfigbasesetexpandenvvars} |
c4afa2cb | 791 | |
cc81d32f | 792 | \func{void}{SetExpandEnvVars }{\param{bool }{bDoIt = true}} |
b8de493f | 793 | |
052ae0e5 | 794 | Determine whether we wish to expand environment variables in key values. |
c4afa2cb | 795 | |
a121d720 | 796 | |
052ae0e5 | 797 | \membersection{wxConfigBase::SetPath}\label{wxconfigbasesetpath} |
c4afa2cb | 798 | |
052ae0e5 | 799 | \func{void}{SetPath}{\param{const wxString\& }{strPath}} |
c4afa2cb | 800 | |
f6bcfd97 | 801 | Set current path: if the first character is '/', it is the absolute path, |
43e8916f | 802 | otherwise it is a relative path. '..' is supported. If strPath doesn't |
5f3cd8a2 | 803 | exist it is created. |
c4afa2cb | 804 | |
a121d720 | 805 | |
052ae0e5 | 806 | \membersection{wxConfigBase::SetRecordDefaults}\label{wxconfigbasesetrecorddefaults} |
c4afa2cb | 807 | |
cc81d32f | 808 | \func{void}{SetRecordDefaults}{\param{bool }{bDoIt = true}} |
052ae0e5 | 809 | |
cb3b65d4 | 810 | Sets whether defaults are recorded to the config file whenever an attempt to |
43e8916f | 811 | read the value which is not present in it is done. |
c4afa2cb | 812 | |
cb3b65d4 VZ |
813 | If on (default is off) all default values for the settings used by the program |
814 | are written back to the config file. This allows the user to see what config | |
815 | options may be changed and is probably useful only for wxFileConfig. | |
c4afa2cb | 816 | |
f6bcfd97 | 817 | |
052ae0e5 JS |
818 | \membersection{wxConfigBase::Write}\label{wxconfigbasewrite} |
819 | ||
5f3cd8a2 VZ |
820 | \func{bool}{Write}{\param{const wxString\& }{ key}, \param{const wxString\& }{ |
821 | value}} | |
052ae0e5 JS |
822 | |
823 | \func{bool}{Write}{\param{const wxString\& }{ key}, \param{long}{ value}} | |
824 | ||
825 | \func{bool}{Write}{\param{const wxString\& }{ key}, \param{double}{ value}} | |
826 | ||
827 | \func{bool}{Write}{\param{const wxString\& }{ key}, \param{bool}{ value}} | |
828 | ||
5814e8ba VZ |
829 | \func{bool}{Write}{\param{const wxString\& }{ key}, \param{const wxMemoryBuffer\&}{ buf}} |
830 | ||
3e1512cd VZ |
831 | \func{bool}{Write}{\param{const wxString\& }{ key}, \param{const T\&}{ buf}} |
832 | ||
833 | These functions write the specified value to the config file and return \true | |
834 | on success. In the last one, function \helpref{wxToString}{wxtostring} must be | |
835 | defined for type {\it T}. | |
c4afa2cb | 836 | |
21f280f4 RD |
837 | \pythonnote{In place of a single overloaded method name, wxPython |
838 | implements the following methods:\par | |
839 | \indented{2cm}{\begin{twocollist} | |
c9110876 VS |
840 | \twocolitem{{\bf Write(key, value)}}{Writes a string.} |
841 | \twocolitem{{\bf WriteInt(key, value)}}{Writes an int.} | |
842 | \twocolitem{{\bf WriteFloat(key, value)}}{Writes a floating point number.} | |
21f280f4 RD |
843 | \end{twocollist}} |
844 | } | |
845 | ||
9722642d MB |
846 | \perlnote{In place of a single overloaded method, wxPerl uses:\par |
847 | \indented{2cm}{\begin{twocollist} | |
848 | \twocolitem{{\bf Write(key, value)}}{Writes a string} | |
849 | \twocolitem{{\bf WriteInt(key, value)}}{Writes an integer} | |
850 | \twocolitem{{\bf WriteFloat(key, value)}}{Writes a floating point number} | |
851 | \twocolitem{{\bf WriteBool(key, value)}}{Writes a boolean} | |
852 | \end{twocollist} | |
853 | }} | |
dceb1c09 | 854 |