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:
@@ -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
|
||||
// -----------------------------------------------------------------------
|
||||
|
Reference in New Issue
Block a user