]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/variant.h
Convert wxFSW_EVENT_{WARNING,ERROR} to string correctly.
[wxWidgets.git] / interface / wx / variant.h
index 6c32b33a84b9829b31516cc5707180123d4537ac..9730565dd24c4f0738e81560e6463e78aef9c368 100644 (file)
@@ -3,7 +3,7 @@
 // Purpose:     interface of wxVariant
 // Author:      wxWidgets team
 // RCS-ID:      $Id$
 // Purpose:     interface of wxVariant
 // Author:      wxWidgets team
 // RCS-ID:      $Id$
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 /**
 /////////////////////////////////////////////////////////////////////////////
 
 /**
     The wxVariant class represents a container for any type. A variant's value
     can be changed at run time, possibly to a different type of value.
 
     The wxVariant class represents a container for any type. A variant's value
     can be changed at run time, possibly to a different type of value.
 
+    @note As of wxWidgets 2.9.1, wxAny has become the preferred variant class.
+          While most controls still use wxVariant in their interface, you
+          can start using wxAny in your code because of an implicit conversion
+          layer. See below for more information.
+
     As standard, wxVariant can store values of type bool, wxChar, double, long,
     string, string list, time, date, void pointer, list of strings, and list of
     variants. However, an application can extend wxVariant's capabilities by
     As standard, wxVariant can store values of type bool, wxChar, double, long,
     string, string list, time, date, void pointer, list of strings, and list of
     variants. However, an application can extend wxVariant's capabilities by
     the wxVariantData object, unlike the case for basic data types where
     convenience functions such as GetLong() can be used.
 
     the wxVariantData object, unlike the case for basic data types where
     convenience functions such as GetLong() can be used.
 
+    Under Microsoft Windows, three additional wxVariantData-derived classes --
+    wxVariantDataCurrency, wxVariantDataErrorCode and wxVariantDataSafeArray --
+    are available for interoperation with OLE VARIANT when using wxAutomationObject.
+
     Pointers to any wxObject derived class can also easily be stored in a
     wxVariant. wxVariant will then use wxWidgets' built-in RTTI system to set
     the type name  (returned by GetType()) and to perform type-safety checks at
     Pointers to any wxObject derived class can also easily be stored in a
     wxVariant. wxVariant will then use wxWidgets' built-in RTTI system to set
     the type name  (returned by GetType()) and to perform type-safety checks at
     wxDynamicCast(), to use C++ RTTI type information instead of wxWidgets
     RTTI.
 
     wxDynamicCast(), to use C++ RTTI type information instead of wxWidgets
     RTTI.
 
+    @section variant_wxanyconversion wxVariant to wxAny Conversion Layer
+
+    wxAny is a more modern, template-based variant class. It is not
+    directly compatible with wxVariant, but there is a transparent conversion
+    layer.
+
+    Following is an example how to use these conversions with wxPropertyGrid's
+    property class wxPGProperty (which currently uses wxVariants both
+    internally and in the public API):
+
+    @code
+        // Get property value as wxAny instead of wxVariant
+        wxAny value = property->GetValue();
+
+        // Do something with it
+        DoSomethingWithString(value.As<wxString>());
+
+        // Write back new value to property
+        value = "New Value";
+        property->SetValue(value);
+
+    @endcode
+
+    Some caveats:
+    @li In wxAny, there are no separate types for handling integers of
+        different sizes, so converting wxAny with 'long long' value
+        will yield wxVariant of "long" type when the value is small
+        enough to fit in without overflow. Otherwise, variant type
+        "longlong" is used. Also note that wxAny holding unsigned integer
+        will always be converted to "ulonglong" wxVariant type.
+
+    @li Unlike wxVariant, wxAny does not store a (rarely needed) name string.
+
+    @li Because of implicit conversion of wxVariant to wxAny, wxAny cannot
+        usually contain value of type wxVariant. In other words,
+        any.CheckType<wxVariant>() can never return @true.
+
+    Supplied conversion functions will automatically work with all
+    built-in wxVariant types, and also with all user-specified types generated
+    using IMPLEMENT_VARIANT_OBJECT(). For hand-built wxVariantData classes,
+    you will need to use supplied macros in a following manner:
+
+    @code
+
+    // Declare wxVariantData for data type Foo
+    class wxVariantDataFoo: public wxVariantData
+    {
+    public:
+        // interface
+        // ...
+
+        DECLARE_WXANY_CONVERSION()
+    protected:
+        // data storage etc
+        // ...
+    };
+
+    IMPLEMENT_TRIVIAL_WXANY_CONVERSION(Foo, wxVariantDataFoo)
+
+    @endcode
+
     @library{wxbase}
     @category{data}
 
     @library{wxbase}
     @category{data}
 
-    @see wxVariantData
+    @see wxVariantData, wxAny
 */
 class wxVariant : public wxObject
 {
 */
 class wxVariant : public wxObject
 {
@@ -111,6 +181,11 @@ public:
     */
     wxVariant(const wxVariant& variant);
 
     */
     wxVariant(const wxVariant& variant);
 
+    /**
+        Constructs a variant by converting it from wxAny.
+    */
+    wxVariant(const wxAny& any);
+
     /**
         Constructs a variant from a wide string literal.
     */
     /**
         Constructs a variant from a wide string literal.
     */
@@ -265,6 +340,11 @@ public:
     bool Convert(wxDateTime* value) const;
     //@}
 
     bool Convert(wxDateTime* value) const;
     //@}
 
+    /**
+        Converts wxVariant into wxAny.
+    */
+    wxAny GetAny() const;
+
     /**
         Returns the string array value.
     */
     /**
         Returns the string array value.
     */
@@ -523,7 +603,7 @@ public:
 
     @see wxVariant, wxGetVariantCast()
 */
 
     @see wxVariant, wxGetVariantCast()
 */
-class wxVariantData
+class wxVariantData : public wxObjectRefData
 {
 public:
     /**
 {
 public:
     /**
@@ -552,6 +632,11 @@ public:
     */
     virtual bool Eq(wxVariantData& data) const = 0;
 
     */
     virtual bool Eq(wxVariantData& data) const = 0;
 
+    /**
+        Converts value to wxAny, if possible. Return @true if successful.
+    */
+    virtual bool GetAny(wxAny* any) const;
+
     /**
         Returns the string type of the data.
     */
     /**
         Returns the string type of the data.
     */