bool wxVariant::operator== (const wxVariant& variant) const { if (IsNull() || variant.IsNull()) return (IsNull() == variant.IsNull()); return (GetData()->Eq(* variant.GetData())); }
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; }
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; }
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::wxVariant(const wxVariant& variant) : wxObject() { m_data = NULL; if (!variant.IsNull()) Ref(variant); m_name = variant.m_name; }
int wxGISGPGxObjectDomain::GetPosByValue(const wxVariant &oVal) const { if(!oVal.IsNull()) { wxFileName oName(oVal.GetString()); for(size_t i = 0; i < m_asoData.size(); ++i) { wxGxObjectFilter* poFilter = GetFilter(i); if(poFilter) { if( oName.GetExt().IsSameAs(poFilter->GetExt(), false) || poFilter->GetExt().IsEmpty() ) { return i; } } } } return wxNOT_FOUND; }
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; }
wxVariant wxAutomationObject::GetProperty(const wxString& property, const wxVariant& arg1, const wxVariant& arg2, const wxVariant& arg3, const wxVariant& arg4, const wxVariant& arg5, const wxVariant& arg6) { const wxVariant** args = new const wxVariant*[6]; int i = 0; if (!arg1.IsNull()) { args[i] = & arg1; i ++; } if (!arg2.IsNull()) { args[i] = & arg2; i ++; } if (!arg3.IsNull()) { args[i] = & arg3; i ++; } if (!arg4.IsNull()) { args[i] = & arg4; i ++; } if (!arg5.IsNull()) { args[i] = & arg5; i ++; } if (!arg6.IsNull()) { args[i] = & arg6; i ++; } wxVariant retVariant; if (!Invoke(property, DISPATCH_PROPERTYGET, retVariant, i, NULL, args)) { retVariant.MakeNull(); } delete[] args; return retVariant; }
wxVariant wxAutomationObject::CallMethod(const wxString& member, const wxVariant& arg1, const wxVariant& arg2, const wxVariant& arg3, const wxVariant& arg4, const wxVariant& arg5, const wxVariant& arg6) { const wxVariant** args = new const wxVariant*[6]; int i = 0; if (!arg1.IsNull()) { args[i] = & arg1; i ++; } if (!arg2.IsNull()) { args[i] = & arg2; i ++; } if (!arg3.IsNull()) { args[i] = & arg3; i ++; } if (!arg4.IsNull()) { args[i] = & arg4; i ++; } if (!arg5.IsNull()) { args[i] = & arg5; i ++; } if (!arg6.IsNull()) { args[i] = & arg6; i ++; } wxVariant retVariant; if (!Invoke(member, DISPATCH_METHOD, retVariant, i, NULL, args)) { retVariant.MakeNull(); } delete[] args; return retVariant; }
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("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; }
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; }
virtual bool SetValue(const wxVariant& value) { return base::SetValue(value.IsNull() ? wxVariant((bool)false) : value); }
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; }