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