std::string ScalarSelectionDialog::GetValueString(const wxVariant& variant, std::type_index type, int precision) { std::string result; if (!variant.IsNull()) { if (IsFloat(type)) { std::stringstream strstream; if (precision > 0) { strstream << std::setprecision(precision) << std::fixed << variant.GetDouble(); } else { strstream << std::fixed << variant.GetDouble(); } auto tmpStr = strstream.str(); size_t last_not_zero = tmpStr.find_last_not_of('0'); result = tmpStr.substr(0, last_not_zero == std::string::npos ? last_not_zero : last_not_zero+1); } else if (IsIntegral(type)) { result = std::to_string(variant.GetInteger()); } } return result; }
wxVariant luVector3Property::ChildChanged( wxVariant& thisValue, int childIndex, wxVariant& childValue ) const { gkVector3 v; v << thisValue; switch ( childIndex ) { case 0: v.x = childValue.GetDouble(); break; case 1: v.y = childValue.GetDouble(); break; case 2: v.z = childValue.GetDouble(); break; } return thisValue << v; }
wxVariant wxRangeProperty::ChildChanged( wxVariant& thisValue, int childIndex, wxVariant& childValue ) const { Range& range = RangeRefFromVariant(thisValue); switch ( childIndex ) { case 0: range.Min = childValue.GetDouble(); break; case 1: range.Max = childValue.GetDouble(); break; } wxVariant newVariant; newVariant << range; return newVariant; }
wxVariant wxVector2Property::ChildChanged( wxVariant& thisValue, int childIndex, wxVariant& childValue ) const { Vector2& vec = Vector2RefFromVariant(thisValue); switch ( childIndex ) { case 0: vec.X = childValue.GetDouble(); break; case 1: vec.Y = childValue.GetDouble(); break; } wxVariant newVariant; newVariant << vec; return newVariant; }
wxVariant nsVector3Property::ChildChanged(wxVariant& thisValue, int childIndex, wxVariant& childValue) const { Vector3 vector; vector << thisValue; switch (childIndex) { case 0: vector._x = childValue.GetDouble(); break; case 1: vector._y = childValue.GetDouble(); break; case 2: vector._z = childValue.GetDouble(); break; } wxVariant newVariant; newVariant << vector; return newVariant; }
// ----------------------------------------------------------------------- wxVariant WxGUISizeProperty::ChildChanged( wxVariant& thisValue, int childIndex, wxVariant& childValue ) const { CGUISize& size = CGUISizeRefFromVariant(thisValue); switch ( childIndex ) { case 0: size.m_fWidth = childValue.GetDouble(); break; case 1: size.m_fHeight = childValue.GetDouble(); break; } wxVariant newVariant; newVariant << size; return newVariant; }
// ----------------------------------------------------------------------- wxVariant WxGUIVector3Property::ChildChanged( wxVariant& thisValue, int childIndex, wxVariant& childValue ) const { CGUIVector3& vector = CGUIVector3RefFromVariant(thisValue); switch ( childIndex ) { case 0: vector.x = childValue.GetDouble(); break; case 1: vector.y = childValue.GetDouble(); break; case 2: vector.z = childValue.GetDouble(); break; } wxVariant newVariant; newVariant << vector; return newVariant; }
// ----------------------------------------------------------------------- wxVariant WxGUIRotatorProperty::ChildChanged( wxVariant& thisValue, int childIndex, wxVariant& childValue ) const { CGUIRotator& rotator = CGUIRotatorRefFromVariant(thisValue); switch ( childIndex ) { case 0: rotator.Pitch = childValue.GetDouble(); break; case 1: rotator.Yaw = childValue.GetDouble(); break; case 2: rotator.Roll = childValue.GetDouble(); break; } wxVariant newVariant; newVariant << rotator; return newVariant; }
// ----------------------------------------------------------------------- wxVariant WxGUIRectProperty::ChildChanged( wxVariant& thisValue, int childIndex, wxVariant& childValue ) const { CGUIRect& rect = CGUIRectRefFromVariant(thisValue); switch ( childIndex ) { case 0: rect.m_fLeft = childValue.GetDouble(); break; case 1: rect.m_fTop = childValue.GetDouble(); break; case 2: rect.m_fRight = childValue.GetDouble(); break; case 3: rect.m_fBottom = childValue.GetDouble(); break; } wxVariant newVariant; newVariant << rect; return newVariant; }
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; }
//----------------------------------------------------------------------------- void wxFloat3Property::ChildChanged(wxVariant &thisValue, int childIndex, wxVariant &childValue ) const { Float3 &value = Float3FromVariant(thisValue); switch (childIndex) { case 0: value[0] = (float)childValue.GetDouble(); break; case 1: value[1] = (float)childValue.GetDouble(); break; case 2: value[2] = (float)childValue.GetDouble(); break; } }
//----------------------------------------------------------------------------- void wxAPoint3Property::ChildChanged(wxVariant &thisValue, int childIndex, wxVariant &childValue ) const { APoint &point = APointFromVariant(thisValue); switch (childIndex) { case 0: point.X() = (float)childValue.GetDouble(); break; case 1: point.Y() = (float)childValue.GetDouble(); break; case 2: point.Z() = (float)childValue.GetDouble(); break; } }
// ----------------------------------------------------------------------- wxVariant WxGUIStringInfoProperty::ChildChanged( wxVariant& thisValue, int childIndex, wxVariant& childValue ) const { CGUIStringRenderInfo& string_info = CGUIStringRenderInfoRefFromVariant(thisValue); switch ( childIndex ) { case 0: string_info.m_fFontScale = childValue.GetDouble(); break; case 1: string_info.m_uFontID = childValue.GetInteger(); break; case 2: string_info.m_aColor << childValue; break; } wxVariant newVariant; newVariant << string_info; return newVariant; }
//------------------------------------------------------------------------ // variant <= wxVariant //------------------------------------------------------------------------ _variant_t memmonitor::wxVariant2Variant(const wxVariant &wxVar) { _variant_t var; const wxString type = wxVar.GetType(); if (type == "bool") { var = _variant_t(wxVar.GetBool()); } else if (type == "char") { var = _variant_t((char)wxVar); } else if (type == "datetime") { } else if (type == "double") { var = _variant_t(wxVar.GetDouble()); } else if (type == "list") { } else if (type == "long") { var = _variant_t(wxVar.GetLong()); } else if (type == "longlong") { } else if (type == "string") { } else if (type == "ulonglong") { } else if (type == "arrstring") { } else if (type == "void*") { } return var; }
WXDLLEXPORT bool wxConvertVariantToOle(const wxVariant& variant, VARIANTARG& oleVariant) { VariantInit(&oleVariant); if (variant.IsNull()) { oleVariant.vt = VT_NULL; return true; } wxString type(variant.GetType()); if (type == wxT("errorcode")) { wxVariantDataErrorCode* const ec = wxStaticCastVariantData(variant.GetData(), wxVariantDataErrorCode); oleVariant.vt = VT_ERROR; oleVariant.scode = ec->GetValue(); } else if (type == wxT("currency")) { wxVariantDataCurrency* const c = wxStaticCastVariantData(variant.GetData(), wxVariantDataCurrency); oleVariant.vt = VT_CY; oleVariant.cyVal = c->GetValue(); } else if (type == wxT("safearray")) { wxVariantDataSafeArray* const vsa = wxStaticCastVariantData(variant.GetData(), wxVariantDataSafeArray); SAFEARRAY* psa = vsa->GetValue(); VARTYPE vt; wxCHECK(psa, false); HRESULT hr = SafeArrayGetVartype(psa, &vt); if ( FAILED(hr) ) { wxLogApiError(wxS("SafeArrayGetVartype()"), hr); SafeArrayDestroy(psa); return false; } oleVariant.vt = vt | VT_ARRAY; oleVariant.parray = psa; } else if (type == wxT("long")) { oleVariant.vt = VT_I4; oleVariant.lVal = variant.GetLong() ; } #if wxUSE_LONGLONG else if (type == wxT("longlong")) { oleVariant.vt = VT_I8; oleVariant.llVal = variant.GetLongLong().GetValue(); } #endif else if (type == wxT("char")) { oleVariant.vt=VT_I1; // Signed Char oleVariant.cVal=variant.GetChar(); } else if (type == wxT("double")) { oleVariant.vt = VT_R8; oleVariant.dblVal = variant.GetDouble(); } else if (type == wxT("bool")) { oleVariant.vt = VT_BOOL; oleVariant.boolVal = variant.GetBool() ? VARIANT_TRUE : VARIANT_FALSE; } else if (type == wxT("string")) { wxString str( variant.GetString() ); oleVariant.vt = VT_BSTR; oleVariant.bstrVal = wxConvertStringToOle(str); } #if wxUSE_DATETIME else if (type == wxT("datetime")) { wxDateTime date( variant.GetDateTime() ); oleVariant.vt = VT_DATE; SYSTEMTIME st; date.GetAsMSWSysTime(&st); SystemTimeToVariantTime(&st, &oleVariant.date); } #endif else if (type == wxT("void*")) { oleVariant.vt = VT_DISPATCH; oleVariant.pdispVal = (IDispatch*) variant.GetVoidPtr(); } else if (type == wxT("list")) { wxSafeArray<VT_VARIANT> safeArray; if (!safeArray.CreateFromListVariant(variant)) return false; oleVariant.vt = VT_VARIANT | VT_ARRAY; oleVariant.parray = safeArray.Detach(); } else if (type == wxT("arrstring")) { wxSafeArray<VT_BSTR> safeArray; if (!safeArray.CreateFromArrayString(variant.GetArrayString())) return false; oleVariant.vt = VT_BSTR | VT_ARRAY; oleVariant.parray = safeArray.Detach(); } else { oleVariant.vt = VT_NULL; return false; } return true; }
WXDLLEXPORT bool wxConvertVariantToOle(const wxVariant& variant, VARIANTARG& oleVariant) { VariantInit(&oleVariant); if (variant.IsNull()) { oleVariant.vt = VT_NULL; return true; } wxString type(variant.GetType()); if (type == wxT("long")) { oleVariant.vt = VT_I4; oleVariant.lVal = variant.GetLong() ; } else if (type == wxT("char")) { oleVariant.vt=VT_I1; // Signed Char oleVariant.cVal=variant.GetChar(); } else if (type == wxT("double")) { oleVariant.vt = VT_R8; oleVariant.dblVal = variant.GetDouble(); } else if (type == wxT("bool")) { oleVariant.vt = VT_BOOL; oleVariant.boolVal = variant.GetBool(); } else if (type == wxT("string")) { wxString str( variant.GetString() ); oleVariant.vt = VT_BSTR; oleVariant.bstrVal = wxConvertStringToOle(str); } #if wxUSE_DATETIME else if (type == wxT("datetime")) { wxDateTime date( variant.GetDateTime() ); oleVariant.vt = VT_DATE; SYSTEMTIME st; date.GetAsMSWSysTime(&st); SystemTimeToVariantTime(&st, &oleVariant.date); } #endif else if (type == wxT("void*")) { oleVariant.vt = VT_DISPATCH; oleVariant.pdispVal = (IDispatch*) variant.GetVoidPtr(); } else if (type == wxT("list") || type == wxT("stringlist")) { oleVariant.vt = VT_VARIANT | VT_ARRAY; SAFEARRAY *psa; SAFEARRAYBOUND saBound; VARIANTARG *pvargBase; VARIANTARG *pvarg; int i, j; int iCount = variant.GetCount(); saBound.lLbound = 0; saBound.cElements = iCount; psa = SafeArrayCreate(VT_VARIANT, 1, &saBound); if (psa == NULL) return false; SafeArrayAccessData(psa, (void**)&pvargBase); pvarg = pvargBase; for (i = 0; i < iCount; i++) { // copy each string in the list of strings wxVariant eachVariant(variant[i]); if (!wxConvertVariantToOle(eachVariant, * pvarg)) { // memory failure: back out and free strings alloc'ed up to // now, and then the array itself. pvarg = pvargBase; for (j = 0; j < i; j++) { SysFreeString(pvarg->bstrVal); pvarg++; } SafeArrayDestroy(psa); return false; } pvarg++; } SafeArrayUnaccessData(psa); oleVariant.parray = psa; } else { oleVariant.vt = VT_NULL; return false; } return true; }
WXDLLEXPORT bool wxConvertVariantToOle(const wxVariant& variant, VARIANTARG& oleVariant) { VariantInit(&oleVariant); if (variant.IsNull()) { oleVariant.vt = VT_NULL; return true; } wxString type(variant.GetType()); if (type == wxT("long")) { oleVariant.vt = VT_I4; oleVariant.lVal = variant.GetLong() ; } // Original VC6 came with SDK too old to contain VARIANT::llVal declaration // and there doesn't seem to be any way to test for it as Microsoft simply // added it to the later version of oaidl.h without changing anything else. // So assume it's not present for VC6, even though it might be if an // updated SDK is used. In this case the user would need to disable this // check himself. #if wxUSE_LONGLONG && !defined(__VISUALC6__) else if (type == wxT("longlong")) { oleVariant.vt = VT_I8; oleVariant.llVal = variant.GetLongLong().GetValue(); } #endif else if (type == wxT("char")) { oleVariant.vt=VT_I1; // Signed Char oleVariant.cVal=variant.GetChar(); } else if (type == wxT("double")) { oleVariant.vt = VT_R8; oleVariant.dblVal = variant.GetDouble(); } else if (type == wxT("bool")) { oleVariant.vt = VT_BOOL; oleVariant.boolVal = variant.GetBool() ? VARIANT_TRUE : VARIANT_FALSE; } else if (type == wxT("string")) { wxString str( variant.GetString() ); oleVariant.vt = VT_BSTR; oleVariant.bstrVal = wxConvertStringToOle(str); } #if wxUSE_DATETIME else if (type == wxT("datetime")) { wxDateTime date( variant.GetDateTime() ); oleVariant.vt = VT_DATE; SYSTEMTIME st; date.GetAsMSWSysTime(&st); SystemTimeToVariantTime(&st, &oleVariant.date); } #endif else if (type == wxT("void*")) { oleVariant.vt = VT_DISPATCH; oleVariant.pdispVal = (IDispatch*) variant.GetVoidPtr(); } else if (type == wxT("list")) { wxSafeArrayHelper sah; if (!sah.Create(VT_VARIANT, variant.GetCount())) return false; for (size_t i = 0; i < variant.GetCount(); i++) { if (!sah.SetElement(i, variant[i])) return false; } oleVariant.vt = VT_VARIANT | VT_ARRAY; oleVariant.parray = sah.Detach(); } else if (type == wxT("arrstring")) { wxArrayString strings(variant.GetArrayString()); wxSafeArrayHelper sah; if (!sah.Create(VT_BSTR, strings.GetCount())) return false; for (size_t i = 0; i < strings.GetCount(); i++) { if (!sah.SetElement(i, strings[i])) return false; } oleVariant.vt = VT_BSTR | VT_ARRAY; oleVariant.parray = sah.Detach(); } else { oleVariant.vt = VT_NULL; return false; } return true; }
WXDLLEXPORT bool wxConvertVariantToOle(const wxVariant& variant, VARIANTARG& oleVariant) { VariantInit(&oleVariant); if (variant.IsNull()) { oleVariant.vt = VT_NULL; return true; } wxString type(variant.GetType()); if (type == wxT("errorcode")) { wxVariantDataErrorCode* const ec = wxStaticCastVariantData(variant.GetData(), wxVariantDataErrorCode); oleVariant.vt = VT_ERROR; oleVariant.scode = ec->GetValue(); } else if (type == wxT("currency")) { wxVariantDataCurrency* const c = wxStaticCastVariantData(variant.GetData(), wxVariantDataCurrency); oleVariant.vt = VT_CY; oleVariant.cyVal = c->GetValue(); } else if (type == wxT("safearray")) { wxVariantDataSafeArray* const vsa = wxStaticCastVariantData(variant.GetData(), wxVariantDataSafeArray); SAFEARRAY* psa = vsa->GetValue(); VARTYPE vt; wxCHECK(psa, false); HRESULT hr = SafeArrayGetVartype(psa, &vt); if ( FAILED(hr) ) { wxLogApiError(wxS("SafeArrayGetVartype()"), hr); SafeArrayDestroy(psa); return false; } oleVariant.vt = vt | VT_ARRAY; oleVariant.parray = psa; } else if (type == wxT("long")) { oleVariant.vt = VT_I4; oleVariant.lVal = variant.GetLong() ; } // Original VC6 came with SDK too old to contain VARIANT::llVal declaration // and there doesn't seem to be any way to test for it as Microsoft simply // added it to the later version of oaidl.h without changing anything else. // So assume it's not present for VC6, even though it might be if an // updated SDK is used. In this case the user would need to disable this // check himself. #if wxUSE_LONGLONG && !defined(__VISUALC6__) else if (type == wxT("longlong")) { oleVariant.vt = VT_I8; oleVariant.llVal = variant.GetLongLong().GetValue(); } #endif else if (type == wxT("char")) { oleVariant.vt=VT_I1; // Signed Char oleVariant.cVal=variant.GetChar(); } else if (type == wxT("double")) { oleVariant.vt = VT_R8; oleVariant.dblVal = variant.GetDouble(); } else if (type == wxT("bool")) { oleVariant.vt = VT_BOOL; oleVariant.boolVal = variant.GetBool() ? VARIANT_TRUE : VARIANT_FALSE; } else if (type == wxT("string")) { wxString str( variant.GetString() ); oleVariant.vt = VT_BSTR; oleVariant.bstrVal = wxConvertStringToOle(str); } #if wxUSE_DATETIME else if (type == wxT("datetime")) { wxDateTime date( variant.GetDateTime() ); oleVariant.vt = VT_DATE; SYSTEMTIME st; date.GetAsMSWSysTime(&st); SystemTimeToVariantTime(&st, &oleVariant.date); } #endif else if (type == wxT("void*")) { oleVariant.vt = VT_DISPATCH; oleVariant.pdispVal = (IDispatch*) variant.GetVoidPtr(); } else if (type == wxT("list")) { wxSafeArray<VT_VARIANT> safeArray; if (!safeArray.CreateFromListVariant(variant)) return false; oleVariant.vt = VT_VARIANT | VT_ARRAY; oleVariant.parray = safeArray.Detach(); } else if (type == wxT("arrstring")) { wxSafeArray<VT_BSTR> safeArray; if (!safeArray.CreateFromArrayString(variant.GetArrayString())) return false; oleVariant.vt = VT_BSTR | VT_ARRAY; oleVariant.parray = safeArray.Detach(); } else { oleVariant.vt = VT_NULL; return false; } return true; }