Added support for wxLongLong and wxULongLong in wxVariant (closes #10166)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61070 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Jaakko Salli
2009-06-15 22:43:27 +00:00
parent 958e4b4b75
commit 4e00b90802
13 changed files with 577 additions and 351 deletions

View File

@@ -56,173 +56,8 @@ const wxChar *wxPGTypeName_wxArrayString = wxT("arrstring");
WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED(wxPoint, WXDLLIMPEXP_PROPGRID)
WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED(wxSize, WXDLLIMPEXP_PROPGRID)
WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED_DUMMY_EQ(wxArrayInt, WXDLLIMPEXP_PROPGRID)
// For wxLongLong and wxULongLong have custom classname << variant
// implementation for improved flexibility.
WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED_NO_EQ_NO_GETTER(wxLongLong, WXDLLIMPEXP_PROPGRID)
WX_PG_IMPLEMENT_VARIANT_DATA_EQ(wxLongLong, WXDLLIMPEXP_PROPGRID)
WXDLLIMPEXP_PROPGRID wxLongLong& operator << ( wxLongLong &value, const wxVariant &variant )
{
wxLongLong_t ll;
if ( !wxPGVariantToLongLong(variant, &ll) )
{
wxFAIL_MSG("Cannot convert to wxLongLong");
}
value = ll;
return value;
}
WXDLLIMPEXP_PROPGRID wxLongLong_t& operator << ( wxLongLong_t &value, const wxVariant &variant )
{
if ( !wxPGVariantToLongLong(variant, &value) )
{
wxFAIL_MSG("Cannot convert to wxLongLong");
}
return value;
}
WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED_NO_EQ_NO_GETTER(wxULongLong, WXDLLIMPEXP_PROPGRID)
WX_PG_IMPLEMENT_VARIANT_DATA_EQ(wxULongLong, WXDLLIMPEXP_PROPGRID)
WXDLLIMPEXP_PROPGRID wxULongLong& operator << ( wxULongLong &value, const wxVariant &variant )
{
wxULongLong_t ull;
if ( !wxPGVariantToULongLong(variant, &ull) )
{
wxFAIL_MSG("Cannot convert to wxULongLong");
}
value = ull;
return value;
}
WXDLLIMPEXP_PROPGRID wxULongLong_t& operator << ( wxULongLong_t &value, const wxVariant &variant )
{
if ( !wxPGVariantToULongLong(variant, &value) )
{
wxFAIL_MSG("Cannot convert to wxULongLong");
}
return value;
}
IMPLEMENT_VARIANT_OBJECT_EXPORTED(wxFont, WXDLLIMPEXP_PROPGRID)
// -----------------------------------------------------------------------
// wxVariant helpers
// -----------------------------------------------------------------------
long wxPGVariantToInt( const wxVariant& variant, long defVal )
{
if ( variant.IsNull() )
return defVal;
if ( variant.GetType() == wxS("long") )
return variant.GetLong();
if ( variant.GetType() == wxS("bool") )
return variant.GetBool() ? 1 : 0;
if ( variant.GetType() == wxS("wxLongLong") )
{
wxLongLong ll;
ll << variant;
if ( ll >= LONG_MAX )
return LONG_MAX;
else if ( ll <= LONG_MIN )
return LONG_MIN;
return ll.ToLong();
}
long l = defVal;
if ( variant.GetType() == wxPG_VARIANT_TYPE_STRING )
variant.GetString().ToLong(&l, 0);
return l;
}
// -----------------------------------------------------------------------
bool wxPGVariantToLongLong( const wxVariant& variant, wxLongLong_t* pResult )
{
if ( variant.IsNull() )
return false;
wxString variantType = variant.GetType();
if ( variantType == wxPG_VARIANT_TYPE_LONG )
{
*pResult = variant.GetLong();
return true;
}
if ( variantType == wxLongLong_VariantType )
{
// NOTE: << operator uses this functions, so we can't use it here
*pResult = wxLongLongRefFromVariant(variant).GetValue();
return true;
}
return false;
}
// -----------------------------------------------------------------------
bool wxPGVariantToULongLong( const wxVariant& variant, wxULongLong_t* pResult )
{
if ( variant.IsNull() )
return false;
wxString variantType = variant.GetType();
if ( variantType == wxPG_VARIANT_TYPE_LONG )
{
*pResult = (unsigned long)variant.GetLong();
return true;
}
if ( variantType == wxULongLong_VariantType )
{
// NOTE: << operator uses this functions, so we can't use it here
*pResult = wxULongLongRefFromVariant(variant).GetValue();
return true;
}
return false;
}
// -----------------------------------------------------------------------
bool wxPGVariantToDouble( const wxVariant& variant, double* pResult )
{
if ( variant.IsNull() )
return false;
wxString variantType = variant.GetType();
if ( variantType == wxPG_VARIANT_TYPE_DOUBLE )
{
*pResult = variant.GetDouble();
return true;
}
if ( variantType == wxPG_VARIANT_TYPE_LONG )
{
*pResult = (double)variant.GetLong();
return true;
}
if ( variantType == wxLongLong_VariantType )
{
wxLongLong ll;
ll << variant;
*pResult = ll.ToDouble();
return true;
}
if ( variantType == wxPG_VARIANT_TYPE_STRING )
if ( variant.GetString().ToDouble(pResult) )
return true;
return false;
}
// -----------------------------------------------------------------------
// wxPGPropArgCls
// -----------------------------------------------------------------------