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:
@@ -905,6 +905,111 @@ bool wxVariantDataVoidPtr::Read(wxString& WXUNUSED(str))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* wxVariantDataWxObjectPtr
|
||||
*/
|
||||
|
||||
class wxVariantDataWxObjectPtr: public wxVariantData
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxVariantDataWxObjectPtr)
|
||||
public:
|
||||
wxVariantDataWxObjectPtr() { }
|
||||
wxVariantDataWxObjectPtr(wxObject* value) { m_value = value; }
|
||||
|
||||
inline wxObject* GetValue() const { return m_value; }
|
||||
inline void SetValue(wxObject* value) { m_value = value; }
|
||||
|
||||
virtual void Copy(wxVariantData& data);
|
||||
virtual bool Eq(wxVariantData& data) const;
|
||||
#if wxUSE_STD_IOSTREAM
|
||||
virtual bool Write(wxSTD ostream& str) const;
|
||||
#endif
|
||||
virtual bool Write(wxString& str) const;
|
||||
#if wxUSE_STD_IOSTREAM
|
||||
virtual bool Read(wxSTD istream& str);
|
||||
#endif
|
||||
virtual bool Read(wxString& str);
|
||||
virtual wxString GetType() const ;
|
||||
virtual wxVariantData* Clone() { return new wxVariantDataWxObjectPtr; }
|
||||
|
||||
virtual wxClassInfo* GetValueClassInfo() ;
|
||||
protected:
|
||||
wxObject* m_value;
|
||||
|
||||
DECLARE_NO_COPY_CLASS(wxVariantDataWxObjectPtr)
|
||||
};
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxVariantDataWxObjectPtr, wxVariantData)
|
||||
|
||||
void wxVariantDataWxObjectPtr::Copy(wxVariantData& data)
|
||||
{
|
||||
wxASSERT_MSG( wxIsKindOf((&data), wxVariantDataWxObjectPtr) ,\
|
||||
wxT("wxVariantDataWxObjectPtr::Copy: Can't copy to this type of data") \
|
||||
);
|
||||
|
||||
wxVariantDataWxObjectPtr& otherData = (wxVariantDataWxObjectPtr&) data;
|
||||
|
||||
otherData.m_value = m_value;
|
||||
}
|
||||
|
||||
bool wxVariantDataWxObjectPtr::Eq(wxVariantData& data) const
|
||||
{
|
||||
wxASSERT_MSG( wxIsKindOf((&data), wxVariantDataWxObjectPtr), wxT("wxVariantDataWxObjectPtr::Eq: argument mismatch") );
|
||||
|
||||
wxVariantDataWxObjectPtr& otherData = (wxVariantDataWxObjectPtr&) data;
|
||||
|
||||
return (otherData.m_value == m_value);
|
||||
}
|
||||
|
||||
wxString wxVariantDataWxObjectPtr::GetType() const
|
||||
{
|
||||
wxString returnVal(wxT("wxObject"));
|
||||
if (m_value) {
|
||||
returnVal = m_value->GetClassInfo()->GetClassName();
|
||||
}
|
||||
return returnVal;
|
||||
}
|
||||
|
||||
wxClassInfo* wxVariantDataWxObjectPtr::GetValueClassInfo()
|
||||
{
|
||||
wxClassInfo* returnVal=NULL;
|
||||
|
||||
if (m_value) returnVal = m_value->GetClassInfo();
|
||||
|
||||
return returnVal;
|
||||
}
|
||||
|
||||
#if wxUSE_STD_IOSTREAM
|
||||
bool wxVariantDataWxObjectPtr::Write(wxSTD ostream& str) const
|
||||
{
|
||||
wxString s;
|
||||
Write(s);
|
||||
str << (const char*) s.mb_str();
|
||||
return TRUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool wxVariantDataWxObjectPtr::Write(wxString& str) const
|
||||
{
|
||||
str.Printf(wxT("%s(%ld)"), GetType().mb_str() ,(long) m_value);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#if wxUSE_STD_IOSTREAM
|
||||
bool wxVariantDataWxObjectPtr::Read(wxSTD istream& WXUNUSED(str))
|
||||
{
|
||||
// Not implemented
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool wxVariantDataWxObjectPtr::Read(wxString& WXUNUSED(str))
|
||||
{
|
||||
// Not implemented
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* wxVariantDataDateTime
|
||||
*/
|
||||
@@ -1173,6 +1278,12 @@ wxVariant::wxVariant( void* val, const wxString& name)
|
||||
m_name = name;
|
||||
}
|
||||
|
||||
wxVariant::wxVariant( wxObject* val, const wxString& name)
|
||||
{
|
||||
m_data = new wxVariantDataWxObjectPtr(val);
|
||||
m_name = name;
|
||||
}
|
||||
|
||||
#if wxUSE_DATETIME
|
||||
wxVariant::wxVariant(const wxDateTime& val, const wxString& name) // Date
|
||||
{
|
||||
@@ -1697,6 +1808,12 @@ bool wxVariant::IsType(const wxString& type) const
|
||||
return (GetType() == type);
|
||||
}
|
||||
|
||||
bool wxVariant::IsValueKindOf(const wxClassInfo* type) const
|
||||
{
|
||||
wxClassInfo* info=m_data->GetValueClassInfo();
|
||||
return info ? info->IsKindOf(type) : false ;
|
||||
}
|
||||
|
||||
|
||||
// Value accessors
|
||||
double wxVariant::GetReal() const
|
||||
@@ -1765,6 +1882,12 @@ void* wxVariant::GetVoidPtr() const
|
||||
return (void*) ((wxVariantDataVoidPtr*) m_data)->GetValue();
|
||||
}
|
||||
|
||||
wxObject* wxVariant::GetWxObjectPtr()
|
||||
{
|
||||
wxASSERT(wxIsKindOf(m_data, wxVariantDataWxObjectPtr));
|
||||
return (wxObject*) ((wxVariantDataWxObjectPtr*) m_data)->GetValue();
|
||||
}
|
||||
|
||||
#if wxUSE_DATETIME
|
||||
wxDateTime wxVariant::GetDateTime() const
|
||||
{
|
||||
|
Reference in New Issue
Block a user