'wx(U)LongLong << variant' type safety improved (now works even if variant has plain long value). Added << operator and WXVARIANT template specialization for wx(U)LongLong_t as well. Changed WX_PG_DECLARE/IMPLEMENT_VARIANT_DATA so that classname << variant can be customized.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55771 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Jaakko Salli
2008-09-21 16:54:22 +00:00
parent bc35c72867
commit a6162a3eaf
5 changed files with 157 additions and 33 deletions

View File

@@ -68,8 +68,50 @@ 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)
WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED(wxLongLong, WXDLLIMPEXP_PROPGRID)
WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED(wxULongLong, 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)
@@ -124,9 +166,8 @@ bool wxPGVariantToLongLong( const wxVariant& variant, wxLongLong_t* pResult )
if ( variantType == wxLongLong_VariantType )
{
wxLongLong ll;
ll << variant;
*pResult = ll.GetValue();
// NOTE: << operator uses this functions, so we can't use it here
*pResult = wxLongLongRefFromVariant(variant).GetValue();
return true;
}
@@ -150,9 +191,8 @@ bool wxPGVariantToULongLong( const wxVariant& variant, wxULongLong_t* pResult )
if ( variantType == wxULongLong_VariantType )
{
wxULongLong ull;
ull << variant;
*pResult = ull.GetValue();
// NOTE: << operator uses this functions, so we can't use it here
*pResult = wxULongLongRefFromVariant(variant).GetValue();
return true;
}