wxVariant::wxVariant()
{
- m_data = (wxVariantData*) NULL;
+ m_data = NULL;
}
bool wxVariant::IsNull() const
{
- return (m_data == (wxVariantData*) NULL);
+ return (m_data == NULL);
}
void wxVariant::MakeNull()
wxVariant::wxVariant(const wxVariant& variant)
: wxObject()
{
- m_data = (wxVariantData*) NULL;
+ m_data = NULL;
if (!variant.IsNull())
Ref(variant);
bool wxVariantDataWxObjectPtr::Write(wxString& str) const
{
- str.Printf(wxT("%s(%p)"), GetType().c_str(), wx_static_cast(void*, m_value));
+ str.Printf(wxT("%s(%p)"), GetType().c_str(), static_cast<void*>(m_value));
return true;
}
void* wxVariant::GetVoidPtr() const
{
- wxASSERT( (GetType() == wxT("void*")) );
+ // handling this specially is convenient when working with COM, see #9873
+ if ( IsNull() )
+ return NULL;
+
+ wxASSERT( GetType() == wxT("void*") );
return (void*) ((wxVariantDataVoidPtr*) m_data)->GetValue();
}
bool wxVariantDataDateTime::Write(wxString& str) const
{
- str = m_value.Format();
+ if ( m_value.IsValid() )
+ str = m_value.Format();
+ else
+ str = wxS("Invalid");
return true;
}
bool wxVariantDataDateTime::Read(wxString& str)
{
+ if ( str == wxS("Invalid") )
+ {
+ m_value = wxInvalidDateTime;
+ return true;
+ }
+
if(! m_value.ParseDateTime(str.c_str()/*FIXME-UTF8*/))
return false;
return true;