]> git.saurik.com Git - wxWidgets.git/blob - docs/latex/wx/variant.tex
Doc improvements
[wxWidgets.git] / docs / latex / wx / variant.tex
1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 %% Name: variant.tex
3 %% Purpose: wxVariant docs
4 %% Author: wxWidgets Team
5 %% Modified by:
6 %% Created: 01/30/2005
7 %% RCS-ID: $Id$
8 %% Copyright: (c) wxWidgets Team
9 %% License: wxWindows license
10 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
11
12 \section{\class{wxVariant}}\label{wxvariant}
13
14 The {\bf wxVariant} class represents a container for any type.
15 A variant's value can be changed at run time, possibly to a different type of value.
16
17 As standard, wxVariant can store values of type bool, wxChar, double, long, string,
18 string list, time, date, void pointer, list of strings, and list of variants.
19 However, an application can extend wxVariant's capabilities by deriving from the
20 class \helpref{wxVariantData}{wxvariantdata} and using the wxVariantData form of
21 the wxVariant constructor or assignment operator to assign this data to a variant.
22 Actual values for user-defined types will need to be accessed via the wxVariantData
23 object, unlike the case for basic data types where convenience functions such as
24 \helpref{GetLong}{wxvariantgetlong} can be used.
25
26 Pointers to any \helpref{wxObject}{wxobject} derived class can also easily be stored
27 in a wxVariant. wxVariant will then use wxWidgets' built-in RTTI system to set the
28 type name (returned by \helpref{GetType}{wxvariantgettype}) and to perform
29 type-safety checks at runtime.
30
31 This class is useful for reducing the programming for certain tasks, such as an editor
32 for different data types, or a remote procedure call protocol.
33
34 An optional name member is associated with a wxVariant. This might be used, for example,
35 in CORBA or OLE automation classes, where named parameters are required.
36
37 Note that as of wxWidgets 2.7.1, wxVariant is \helpref{reference counted}{trefcount}.
38 Additionally, the convenience macros {\bf DECLARE\_VARIANT\_OBJECT} and
39 {\bf IMPLEMENT\_VARIANT\_OBJECT} were added so that adding (limited) support
40 for conversion to and from wxVariant can be very easily implemented without modifying
41 either wxVariant or the class to be stored by wxVariant. Since assignment operators
42 cannot be declared outside the class, the shift left operators are used like this:
43
44 \begin{verbatim}
45 // in the header file
46 DECLARE_VARIANT_OBJECT(MyClass)
47
48 // in the implementation file
49 IMPLMENT_VARIANT_OBJECT(MyClass)
50
51 // in the user code
52 wxVariant variant;
53 MyClass value;
54 variant << value;
55
56 // or
57 value << variant;
58 \end{verbatim}
59
60 For this to work, MyClass must derive from \helpref{wxObject}{wxobject}, implement
61 the \helpref{wxWidgets RTTI system}{runtimeclassoverview}
62 and support the assignment operator and equality operator for itself. Ideally, it
63 should also be reference counted to make copying operations cheap and fast. This
64 can be most easily implemented using the reference counting support offered by
65 \helpref{wxObject}{wxobject} itself. By default, wxWidgets already implements
66 the shift operator conversion for a few of its drawing related classes:
67
68 Note that as of wxWidgets 2.9.0, wxVariantData no longer inherits from wxObject
69 and wxVariant no longer uses the type-unsafe wxList class for list
70 operations but the type-safe wxVariantList class.
71
72 \begin{verbatim}
73 IMPLEMENT_VARIANT_OBJECT(wxColour)
74 IMPLEMENT_VARIANT_OBJECT(wxImage)
75 IMPLEMENT_VARIANT_OBJECT(wxIcon)
76 IMPLEMENT_VARIANT_OBJECT(wxBitmap)
77 \end{verbatim}
78
79 \wxheading{Derived from}
80
81 \helpref{wxObject}{wxobject}
82
83 \wxheading{Include files}
84
85 <wx/variant.h>
86
87 \wxheading{Library}
88
89 \helpref{wxBase}{librarieslist}
90
91 \wxheading{See also}
92
93 \helpref{wxVariantData}{wxvariantdata}
94
95 \latexignore{\rtfignore{\wxheading{Members}}}
96
97 \membersection{wxVariant::wxVariant}\label{wxvariantctor}
98
99 \func{}{wxVariant}{\void}
100
101 Default constructor.
102
103 \func{}{wxVariant}{\param{const wxVariant\& }{variant}}
104
105 Copy constructor, uses \helpref{reference counting}{trefcount}.
106
107 \func{}{wxVariant}{\param{const wxChar*}{ value}, \param{const wxString\& }{name = ``"}}
108
109 \func{}{wxVariant}{\param{const wxString\&}{ value}, \param{const wxString\& }{name = ``"}}
110
111 Construction from a string value.
112
113 \func{}{wxVariant}{\param{wxChar}{ value}, \param{const wxString\& }{name = ``"}}
114
115 Construction from a character value.
116
117 \func{}{wxVariant}{\param{long}{ value}, \param{const wxString\& }{name = ``"}}
118
119 Construction from an integer value. You may need to cast to (long) to
120 avoid confusion with other constructors (such as the bool constructor).
121
122 \func{}{wxVariant}{\param{bool}{ value}, \param{const wxString\& }{name = ``"}}
123
124 Construction from a boolean value.
125
126 \func{}{wxVariant}{\param{double}{ value}, \param{const wxString\& }{name = ``"}}
127
128 Construction from a double-precision floating point value.
129
130 \func{}{wxVariant}{\param{const wxVariantList\&}{ value}, \param{const wxString\& }{name = ``"}}
131
132 Construction from a list of wxVariant objects. This constructor
133 copies {\it value}, the application is still responsible for
134 deleting {\it value} and its contents.
135
136 \func{}{wxVariant}{\param{void*}{ value}, \param{const wxString\& }{name = ``"}}
137
138 Construction from a void pointer.
139
140 \func{}{wxVariant}{\param{wxObject*}{ value}, \param{const wxString\& }{name = ``"}}
141
142 Construction from a wxObject pointer.
143
144 \func{}{wxVariant}{\param{wxVariantData*}{ data}, \param{const wxString\& }{name = ``"}}
145
146 Construction from user-defined data. The variant holds onto the {\it data} pointer.
147
148 \func{}{wxVariant}{\param{wxDateTime\&}{ val}, \param{const wxString\& }{name = ``"}}
149
150 Construction from a \helpref{wxDateTime}{wxdatetime}.
151
152 \func{}{wxVariant}{\param{wxArrayString\&}{ val}, \param{const wxString\& }{name = ``"}}
153
154 Construction from an array of strings. This constructor copies {\it value} and its contents.
155
156 \func{}{wxVariant}{\param{DATE\_STRUCT*}{ val}, \param{const wxString\& }{name = ``"}}
157
158 Construction from a odbc date value. Represented internally by a \helpref{wxDateTime}{wxdatetime} value.
159
160 \func{}{wxVariant}{\param{TIME\_STRUCT*}{ val}, \param{const wxString\& }{name = ``"}}
161
162 Construction from a odbc time value. Represented internally by a \helpref{wxDateTime}{wxdatetime} value.
163
164 \func{}{wxVariant}{\param{TIMESTAMP\_STRUCT*}{ val}, \param{const wxString\& }{name = ``"}}
165
166 Construction from a odbc timestamp value. Represented internally by a \helpref{wxDateTime}{wxdatetime} value.
167
168 \membersection{wxVariant::\destruct{wxVariant}}\label{wxvariantdtor}
169
170 \func{}{\destruct{wxVariant}}{\void}
171
172 Destructor.
173
174 Note that destructor is protected, so wxVariantData cannot usually
175 be deleted. Instead, \helpref{DecRef}{wxvariantdatadecref} should be called.
176 See \helpref{reference-counted object destruction}{refcountdestruct} for more info.
177
178
179 \membersection{wxVariant::Append}\label{wxvariantappend}
180
181 \func{void}{Append}{\param{const wxVariant\&}{ value}}
182
183 Appends a value to the list.
184
185 \membersection{wxVariant::Clear}\label{wxvariantclear}
186
187 \func{void}{Clear}{\void}
188
189 Makes the variant null by deleting the internal data and
190 set the name to {\it wxEmptyString}.
191
192 \membersection{wxVariant::ClearList}\label{wxvariantclearlist}
193
194 \func{void}{ClearList}{\void}
195
196 Deletes the contents of the list.
197
198
199 \membersection{wxVariant::Convert}\label{wxvariantconvert}
200
201 \constfunc{bool}{Convert}{\param{long*}{ value}}
202
203 \constfunc{bool}{Convert}{\param{bool*}{ value}}
204
205 \constfunc{bool}{Convert}{\param{double*}{ value}}
206
207 \constfunc{bool}{Convert}{\param{wxString*}{ value}}
208
209 \constfunc{bool}{Convert}{\param{wxChar*}{ value}}
210
211 \constfunc{bool}{Convert}{\param{wxDateTime*}{ value}}
212
213 Retrieves and converts the value of this variant to the type that {\it value} is.
214
215
216 \membersection{wxVariant::GetCount}\label{wxvariantgetcount}
217
218 \constfunc{size\_t}{GetCount}{\void}
219
220 Returns the number of elements in the list.
221
222 \membersection{wxVariant::Delete}\label{wxvariantdelete}
223
224 \func{bool}{Delete}{\param{size\_t }{item}}
225
226 Deletes the zero-based {\it item} from the list.
227
228 \membersection{wxVariant::GetArrayString}\label{wxvariantgetarraystring}
229
230 \constfunc{wxArrayString}{GetArrayString}{\void}
231
232 Returns the string array value.
233
234 \membersection{wxVariant::GetBool}\label{wxvariantgetbool}
235
236 \constfunc{bool}{GetBool}{\void}
237
238 Returns the boolean value.
239
240 \membersection{wxVariant::GetChar}\label{wxvariantgetchar}
241
242 \constfunc{wxChar}{GetChar}{\void}
243
244 Returns the character value.
245
246 \membersection{wxVariant::GetData}\label{wxvariantgetdata}
247
248 \constfunc{wxVariantData*}{GetData}{\void}
249
250 Returns a pointer to the internal variant data. To take ownership
251 of this data, you must call its \helpref{IncRef}{wxvariantdataincref}
252 method. When you stop using it, \helpref{DecRef}{wxvariantdatadecref}
253 must be likewise called.
254
255 \membersection{wxVariant::GetDateTime}\label{wxvariantgetdatetime}
256
257 \constfunc{wxDateTime}{GetDateTime}{\void}
258
259 Returns the date value.
260
261 \membersection{wxVariant::GetDouble}\label{wxvariantgetdouble}
262
263 \constfunc{double}{GetDouble}{\void}
264
265 Returns the floating point value.
266
267 \membersection{wxVariant::GetList}\label{wxvariantgetlist}
268
269 \constfunc{wxVariantList &}{GetList}{\void}
270
271 Returns a reference to the wxVariantList class used by
272 wxVariant if this wxVariant is currently a list of variants.
273
274 \membersection{wxVariant::GetLong}\label{wxvariantgetlong}
275
276 \constfunc{long}{GetLong}{\void}
277
278 Returns the integer value.
279
280 \membersection{wxVariant::GetName}\label{wxvariantgetname}
281
282 \constfunc{const wxString\&}{GetName}{\void}
283
284 Returns a constant reference to the variant name.
285
286 \membersection{wxVariant::GetString}\label{wxvariantgetstring}
287
288 \constfunc{wxString}{GetString}{\void}
289
290 Gets the string value.
291
292 \membersection{wxVariant::GetType}\label{wxvariantgettype}
293
294 \constfunc{wxString}{GetType}{\void}
295
296 Returns the value type as a string. The built-in types are: bool, char, datetime, double, list, long, string, arrstring, void*.
297
298 If the variant is null, the value type returned is the string ``null" (not the empty string).
299
300 \membersection{wxVariant::GetVoidPtr}\label{wxvariantgetvoidptr}
301
302 \constfunc{void*}{GetVoidPtr}{\void}
303
304 Gets the void pointer value.
305
306 \membersection{wxVariant::GetWxObjectPtr}\label{wxvariantgetwxobjectptr}
307
308 \constfunc{wxObject*}{GetWxObjectPtr}{\void}
309
310 Gets the wxObject pointer value.
311
312 \membersection{wxVariant::Insert}\label{wxvariantinsert}
313
314 \func{void}{Insert}{\param{const wxVariant\&}{ value}}
315
316 Inserts a value at the front of the list.
317
318 \membersection{wxVariant::IsNull}\label{wxvariantisnull}
319
320 \constfunc{bool}{IsNull}{\void}
321
322 Returns true if there is no data associated with this variant, false if there is data.
323
324 \membersection{wxVariant::IsType}\label{wxvariantistype}
325
326 \constfunc{bool}{IsType}{\param{const wxString\&}{ type}}
327
328 Returns true if {\it type} matches the type of the variant, false otherwise.
329
330 \membersection{wxVariant::IsValueKindOf}\label{wxvariantisvaluekindof}
331
332 \constfunc{bool}{IsValueKindOf}{\param{const wxClassInfo* type}{ type}}
333
334 Returns true if the data is derived from the class described by {\it type}, false otherwise.
335
336 \membersection{wxVariant::MakeNull}\label{wxvariantmakenull}
337
338 \func{void}{MakeNull}{\void}
339
340 Makes the variant null by deleting the internal data.
341
342 \membersection{wxVariant::MakeString}\label{wxvariantmakestring}
343
344 \constfunc{wxString}{MakeString}{\void}
345
346 Makes a string representation of the variant value (for any type).
347
348 \membersection{wxVariant::Member}\label{wxvariantmember}
349
350 \constfunc{bool}{Member}{\param{const wxVariant\&}{ value}}
351
352 Returns true if {\it value} matches an element in the list.
353
354 \membersection{wxVariant::NullList}\label{wxvariantnulllist}
355
356 \func{void}{NullList}{\void}
357
358 Makes an empty list. This differs from a null variant which has no data; a null list
359 is of type list, but the number of elements in the list is zero.
360
361 \membersection{wxVariant::SetData}\label{wxvariantsetdata}
362
363 \func{void}{SetData}{\param{wxVariantData*}{ data}}
364
365 Sets the internal variant data, deleting the existing data if there is any.
366
367 \membersection{wxVariant::operator $=$}\label{wxvariantassignment}
368
369 \func{void}{operator $=$}{\param{const wxVariant\& }{value}}
370
371 \func{void}{operator $=$}{\param{wxVariantData* }{value}}
372
373 \func{void}{operator $=$}{\param{const wxString\& }{value}}
374
375 \func{void}{operator $=$}{\param{const wxChar* }{value}}
376
377 \func{void}{operator $=$}{\param{wxChar }{value}}
378
379 \func{void}{operator $=$}{\param{const long }{value}}
380
381 \func{void}{operator $=$}{\param{const bool }{value}}
382
383 \func{void}{operator $=$}{\param{const double }{value}}
384
385 \func{void}{operator $=$}{\param{void* }{value}}
386
387 \func{void}{operator $=$}{\param{wxObject* }{value}}
388
389 \func{void}{operator $=$}{\param{const wxVariantList\& }{value}}
390
391 \func{void}{operator $=$}{\param{const wxDateTime\& }{value}}
392
393 \func{void}{operator $=$}{\param{const wxArrayString\& }{value}}
394
395 \func{void}{operator $=$}{\param{const DATE\_STRUCT* }{value}}
396
397 \func{void}{operator $=$}{\param{const TIME\_STRUCT* }{value}}
398
399 \func{void}{operator $=$}{\param{const TIMESTAMP\_STRUCT* }{value}}
400
401 Assignment operators, using \helpref{reference counting}{trefcount} when possible.
402
403 \membersection{wxVariant::operator $==$}\label{wxvarianteq}
404
405 \constfunc{bool}{operator $==$}{\param{const wxVariant\& }{value}}
406
407 \constfunc{bool}{operator $==$}{\param{const wxString\& }{value}}
408
409 \constfunc{bool}{operator $==$}{\param{const wxChar* }{value}}
410
411 \constfunc{bool}{operator $==$}{\param{wxChar }{value}}
412
413 \constfunc{bool}{operator $==$}{\param{const long }{value}}
414
415 \constfunc{bool}{operator $==$}{\param{const bool }{value}}
416
417 \constfunc{bool}{operator $==$}{\param{const double }{value}}
418
419 \constfunc{bool}{operator $==$}{\param{void* }{value}}
420
421 \constfunc{bool}{operator $==$}{\param{wxObject* }{value}}
422
423 \constfunc{bool}{operator $==$}{\param{const wxVariantList\& }{value}}
424
425 \constfunc{bool}{operator $==$}{\param{const wxArrayString\& }{value}}
426
427 \constfunc{bool}{operator $==$}{\param{const wxDateTime\& }{value}}
428
429 Equality test operators.
430
431 \membersection{wxVariant::operator $!=$}\label{wxvariantneq}
432
433 \constfunc{bool}{operator $!=$}{\param{const wxVariant\& }{value}}
434
435 \constfunc{bool}{operator $!=$}{\param{const wxString\& }{value}}
436
437 \constfunc{bool}{operator $!=$}{\param{const wxChar* }{value}}
438
439 \constfunc{bool}{operator $!=$}{\param{wxChar }{value}}
440
441 \constfunc{bool}{operator $!=$}{\param{const long }{value}}
442
443 \constfunc{bool}{operator $!=$}{\param{const bool }{value}}
444
445 \constfunc{bool}{operator $!=$}{\param{const double }{value}}
446
447 \constfunc{bool}{operator $!=$}{\param{void* }{value}}
448
449 \constfunc{bool}{operator $!=$}{\param{wxObject* }{value}}
450
451 \constfunc{bool}{operator $!=$}{\param{const wxVariantList\& }{value}}
452
453 \constfunc{bool}{operator $!=$}{\param{const wxArrayString\& }{value}}
454
455 \constfunc{bool}{operator $!=$}{\param{const wxDateTime\& }{value}}
456
457 Inequality test operators.
458
459 \membersection{wxVariant::operator $[]$}\label{wxvariantarray}
460
461 \constfunc{wxVariant}{operator $[]$}{\param{size\_t }{idx}}
462
463 Returns the value at {\it idx} (zero-based).
464
465 \func{wxVariant\&}{operator $[]$}{\param{size\_t }{idx}}
466
467 Returns a reference to the value at {\it idx} (zero-based). This can be used
468 to change the value at this index.
469
470 \membersection{wxVariant::operator wxChar}\label{wxvariantchar}
471
472 \constfunc{char}{operator wxChar}{\void}
473
474 Operator for implicit conversion to a wxChar, using \helpref{wxVariant::GetChar}{wxvariantgetchar}.
475
476 \membersection{wxVariant::operator double}\label{wxvariantdouble}
477
478 \constfunc{double}{operator double}{\void}
479
480 Operator for implicit conversion to a double, using \helpref{wxVariant::GetDouble}{wxvariantgetdouble}.
481
482 \constfunc{long}{operator long}{\void}
483
484 Operator for implicit conversion to a long, using \helpref{wxVariant::GetLong}{wxvariantgetlong}.
485
486 \membersection{wxVariant::operator wxString}\label{wxvariantwxstring}
487
488 \constfunc{wxString}{operator wxString}{\void}
489
490 Operator for implicit conversion to a string, using \helpref{wxVariant::MakeString}{wxvariantmakestring}.
491
492 \membersection{wxVariant::operator void*}\label{wxvariantvoid}
493
494 \constfunc{void*}{operator void*}{\void}
495
496 Operator for implicit conversion to a pointer to a void, using \helpref{wxVariant::GetVoidPtr}{wxvariantgetvoidptr}.
497
498 \membersection{wxVariant::operator wxDateTime}\label{wxvariantdatetime}
499
500 \constfunc{void*}{operator wxDateTime}{\void}
501
502 Operator for implicit conversion to a pointer to a \helpref{wxDateTime}{wxdatetime}, using \helpref{wxVariant::GetDateTime}{wxvariantgetdatetime}.
503
504
505
506 %% wxVariantData
507
508
509 \section{\class{wxVariantData}}\label{wxvariantdata}
510
511 The {\bf wxVariantData} class is used to implement a new type for \helpref{wxVariant}{wxvariant}.
512 Derive from wxVariantData, and override the pure virtual functions.
513
514 wxVariantData is \helpref{reference counted}{refcount}, but you don't normally have to care about this,
515 as wxVariant manages the count automatically. However, in case your application needs to take
516 ownership of wxVariantData, be aware that the object is created with reference count of 1,
517 and passing it to wxVariant will not increase this. In other words, \helpref{IncRef}{wxvariantdataincref}
518 needs to be called only if you both take ownership of wxVariantData and pass it to a wxVariant.
519 Also note that the destructor is protected, so you can never explicitly delete a wxVariantData
520 instance. Instead, \helpref{DecRef}{wxvariantdatadecref} will delete the object automatically
521 when the reference count reaches zero.
522
523 \wxheading{Include files}
524
525 <wx/variant.h>
526
527 \wxheading{Library}
528
529 \helpref{wxBase}{librarieslist}
530
531 \wxheading{See also}
532
533 \helpref{wxVariant}{wxvariant}
534
535 \latexignore{\rtfignore{\wxheading{Members}}}
536
537 \membersection{wxVariantData::wxVariantData}\label{wxvariantdatactor}
538
539 \func{}{wxVariantData}{\void}
540
541 Default constructor.
542
543 \membersection{wxVariantData::DecRef}\label{wxvariantdatadecref}
544
545 \func{void}{DecRef}{\void}
546
547 Decreases reference count. If the count reaches zero, the object is
548 automatically deleted.
549
550 Note that destructor of wxVariantData is protected, so delete
551 cannot be used as normal. Instead, \helpref{DecRef}{wxvariantdatadecref} should be called.
552
553
554
555 \membersection{wxVariantData::Eq}\label{wxvariantdataeq}
556
557 \constfunc{bool}{Eq}{\param{wxVariantData\&}{ data}}
558
559 Returns true if this object is equal to {\it data}.
560
561 \membersection{wxVariantData::GetType}\label{wxvariantdatagettype}
562
563 \constfunc{wxString}{GetType}{\void}
564
565 Returns the string type of the data.
566
567 \membersection{wxVariantData::GetValueClassInfo}\label{wxvariantdatagetvalueclassinfo}
568
569 \constfunc{wxClassInfo*}{GetValueClassInfo}{\void}
570
571 If the data is a wxObject returns a pointer to the objects wxClassInfo structure, if
572 the data isn't a wxObject the method returns NULL.
573
574 \membersection{wxVariantData::IncRef}\label{wxvariantdataincref}
575
576 \func{void}{IncRef}{\void}
577
578 Increases reference count. Note that initially wxVariantData has reference count of 1.
579
580 \membersection{wxVariantData::Read}\label{wxvariantdataread}
581
582 \func{bool}{Read}{\param{ostream\&}{ stream}}
583
584 \func{bool}{Read}{\param{wxString\&}{ string}}
585
586 Reads the data from {\it stream} or {\it string}.
587
588 \membersection{wxVariantData::Write}\label{wxvariantdatawrite}
589
590 \constfunc{bool}{Write}{\param{ostream\&}{ stream}}
591
592 \constfunc{bool}{Write}{\param{wxString\&}{ string}}
593
594 Writes the data to {\it stream} or {\it string}.
595
596
597 \membersection{wxGetVariantCast}\label{wxgetvariantcast}
598
599 \func{classname *}{wxGetVariantCast}{wxVariant\&, classname}
600
601 This macro returns the data stored in {\it variant} cast to the type {\it classname *} if
602 the data is of this type (the check is done during the run-time) or
603 {\tt NULL} otherwise.
604
605
606 \wxheading{See also}
607
608 \helpref{RTTI overview}{runtimeclassoverview}\\
609 \helpref{wxDynamicCast}{wxdynamiccast}
610