Addition at simple wxObject*, support into wxVariant.

This includes 2 new methods wxVariant::IsValueKindOf() and
wxVariantData::GetValueClassInfo() to allow query of the
wxRTTI data of the variant's data.

Also included is a macro analogues to dynamicCast for fetching
objects out of a wxVariant.

Documentation patches for the above.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20860 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Roger Gammans
2003-06-02 21:17:28 +00:00
parent 8647bec62d
commit cf6ae2907c
4 changed files with 183 additions and 2 deletions

View File

@@ -67,6 +67,8 @@ public:
virtual bool Read(wxString& str) = 0;
// What type is it? Return a string name.
virtual wxString GetType() const = 0;
// If it based on wxObject return the ClassInfo.
virtual wxClassInfo* GetValueClassInfo() { return NULL; }
};
/*
@@ -95,6 +97,7 @@ public:
wxVariant(const wxStringList& val, const wxString& name = wxEmptyString);
wxVariant(const wxList& val, const wxString& name = wxEmptyString); // List of variants
wxVariant(void* ptr, const wxString& name = wxEmptyString); // void* (general purpose)
wxVariant(wxObject* ptr, const wxString& name = wxEmptyString); //wxObject
wxVariant(wxVariantData* data, const wxString& name = wxEmptyString); // User-defined data
//TODO: Need to document
#if wxUSE_DATETIME
@@ -181,6 +184,9 @@ public:
inline operator long () const { return GetLong(); }
inline operator bool () const { return GetBool(); }
inline operator void* () const { return GetVoidPtr(); }
// No implicit conversion to wxObject, as that would really
// confuse people between conversion to our contained data
// and downcasting to see our base type.
//TODO: Need to document
#if wxUSE_DATETIME
inline operator wxDateTime () const { return GetDateTime(); }
@@ -203,6 +209,7 @@ public:
wxString GetType() const;
bool IsType(const wxString& type) const;
bool IsValueKindOf(const wxClassInfo* type) const;
// Return the number of elements in a list
int GetCount() const;
@@ -219,6 +226,7 @@ public:
wxStringList& GetStringList() const ;
void* GetVoidPtr() const ;
wxObject* GetWxObjectPtr() ;
//TODO: Need to document
#if wxUSE_DATETIME
wxDateTime GetDateTime() const ;
@@ -268,6 +276,14 @@ protected:
wxString m_name;
};
//Since we want type safety wxVariant we need to fetch and dynamic_cast
//in a seemingly safe way so the compiler can check, so we define
//a dynamic_cast /wxDynamicCast analogue.
#define wxGetVariantCast(var,classname) \
((classname*)(var.IsValueKindOf(&classname::sm_class##classname) ?\
var.GetWxObjectPtr() : NULL));
extern wxVariant WXDLLEXPORT wxNullVariant;
#endif