HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::get_accDescription(VARIANT varID, BSTR* pszDescription) { QAccessibleInterface *accessible = accessibleInterface(); accessibleDebugClientCalls(accessible); if (!accessible) return E_FAIL; QString descr; if (varID.lVal) { QAccessibleInterface *child = childPointer(accessible, varID); if (!child) return E_FAIL; descr = child->text(QAccessible::Description); } else { descr = accessible->text(QAccessible::Description); } if (descr.size()) { *pszDescription = QStringToBSTR(descr); return S_OK; } *pszDescription = 0; return S_FALSE; }
static IFontDisp *QFontToIFont(const QFont &font) { #if defined(Q_OS_WINCE) Q_UNUSED(font); return 0; #else FONTDESC fdesc; memset(&fdesc, 0, sizeof(fdesc)); fdesc.cbSizeofstruct = sizeof(FONTDESC); fdesc.cySize.Lo = font.pointSize() * 10000; fdesc.fItalic = font.italic(); fdesc.fStrikethrough = font.strikeOut(); fdesc.fUnderline = font.underline(); fdesc.lpstrName = QStringToBSTR(font.family()); fdesc.sWeight = font.weight() * 10; IFontDisp *f; HRESULT res = OleCreateFontIndirect(&fdesc, IID_IFontDisp, (void**)&f); if (res != S_OK) { if (f) f->Release(); f = 0; #if defined(QT_CHECK_STATE) qWarning("QFontToIFont: Failed to create IFont"); #endif } return f; #endif }
// moz: [important] HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::get_accName(VARIANT varID, BSTR* pszName) { QAccessibleInterface *accessible = accessibleInterface(); accessibleDebugClientCalls(accessible); if (!accessible) return E_FAIL; QString name; if (varID.lVal) { QAccessibleInterface *child = childPointer(accessible, varID); if (!child) return E_FAIL; name = child->text(QAccessible::Name); if (name.isEmpty()) { if (QAccessibleInterface *labelInterface = relatedInterface(child, QAccessible::Label)) { name = labelInterface->text(QAccessible::Name); } } } else { name = accessible->text(QAccessible::Name); if (name.isEmpty()) { if (QAccessibleInterface *labelInterface = relatedInterface(accessible, QAccessible::Label)) { name = labelInterface->text(QAccessible::Name); } } } if (name.size()) { *pszName = QStringToBSTR(name); return S_OK; } *pszName = 0; return S_FALSE; }
// moz: [important] HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::get_accValue(VARIANT varID, BSTR* pszValue) { QAccessibleInterface *accessible = accessibleInterface(); accessibleDebugClientCalls(accessible); if (varID.vt != VT_I4) return E_INVALIDARG; if (!accessible || !accessible->isValid() || varID.lVal) { return E_FAIL; } QString value; if (accessible->valueInterface()) { value = QString::number(accessible->valueInterface()->currentValue().toDouble()); } else { value = accessible->text(QAccessible::Value); } if (!value.isNull()) { *pszValue = QStringToBSTR(value); return S_OK; } *pszValue = 0; accessibleDebug("return S_FALSE"); return S_FALSE; }
QT_BEGIN_NAMESPACE QString qax_docuFromName(ITypeInfo *typeInfo, const QString &name) { QString docu; if (!typeInfo) return docu; MEMBERID memId; BSTR names = QStringToBSTR(name); typeInfo->GetIDsOfNames((BSTR*)&names, 1, &memId); SysFreeString(names); if (memId != DISPID_UNKNOWN) { BSTR docStringBstr, helpFileBstr; ulong helpContext; HRESULT hres = typeInfo->GetDocumentation(memId, 0, &docStringBstr, &helpContext, &helpFileBstr); QString docString = QString::fromWCharArray(docStringBstr); QString helpFile = QString::fromWCharArray(helpFileBstr); SysFreeString(docStringBstr); SysFreeString(helpFileBstr); if (hres == S_OK) { if (!docString.isEmpty()) docu += docString + QLatin1String("\n"); if (!helpFile.isEmpty()) docu += QString::fromLatin1("For more information, see help context %1 in %2.").arg((uint)helpContext).arg(helpFile); } } return docu; }
HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accDefaultAction(VARIANT varID, BSTR* pszDefaultAction) { Q_UNUSED(varID); showDebug(__FUNCTION__, accessible); if (!accessible->isValid()) return E_FAIL; *pszDefaultAction = 0; if (QAccessibleActionInterface *actionIface = accessible->actionInterface()) { const QString def = actionIface->actionNames().value(0); if (!def.isEmpty()) *pszDefaultAction = QStringToBSTR(def); } return *pszDefaultAction ? S_OK : S_FALSE; }
HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accDefaultAction(VARIANT varID, BSTR* pszDefaultAction) { showDebug(__FUNCTION__, accessible); if (!accessible->isValid()) return E_FAIL; AccessibleElement elem(varID.lVal, accessible); QString def = elem.iface ? elem.iface->actionText(DefaultAction, Name, elem.entry) : QString(); if (def.isEmpty()) { *pszDefaultAction = 0; return S_FALSE; } *pszDefaultAction = QStringToBSTR(def); return S_OK; }
HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accDescription(VARIANT varID, BSTR* pszDescription) { showDebug(__FUNCTION__, accessible); if (!accessible->isValid()) return E_FAIL; AccessibleElement elem(varID.lVal, accessible); QString descr = elem.text(Description); if (descr.size()) { *pszDescription = QStringToBSTR(descr); return S_OK; } *pszDescription = 0; return S_FALSE; }
HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::get_accDefaultAction(VARIANT varID, BSTR* pszDefaultAction) { Q_UNUSED(varID); QAccessibleInterface *accessible = accessibleInterface(); accessibleDebugClientCalls(accessible); if (!accessible) return E_FAIL; *pszDefaultAction = 0; if (QAccessibleActionInterface *actionIface = accessible->actionInterface()) { const QString def = actionIface->actionNames().value(0); if (!def.isEmpty()) *pszDefaultAction = QStringToBSTR(def); } return *pszDefaultAction ? S_OK : S_FALSE; }
HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accValue(VARIANT varID, BSTR* pszValue) { showDebug(__FUNCTION__, accessible); if (!accessible->isValid()) return E_FAIL; AccessibleElement elem(varID.lVal, accessible); QString value = elem.text(Value); if (!value.isNull()) { *pszValue = QStringToBSTR(value); return S_OK; } *pszValue = 0; return S_FALSE; }
HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accName(VARIANT varID, BSTR* pszName) { showDebug(__FUNCTION__, accessible); if (!accessible->isValid()) return E_FAIL; AccessibleElement elem(varID.lVal, accessible); QString n = elem.text(Name); if (n.size()) { *pszName = QStringToBSTR(n); return S_OK; } *pszName = 0; return S_FALSE; }
HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accKeyboardShortcut(VARIANT varID, BSTR *pszKeyboardShortcut) { showDebug(__FUNCTION__, accessible); if (!accessible->isValid()) return E_FAIL; AccessibleElement elem(varID.lVal, accessible); QString sc = elem.text(Accelerator); if (sc.size()) { *pszKeyboardShortcut = QStringToBSTR(sc); return S_OK; } *pszKeyboardShortcut = 0; return S_FALSE; }
HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accHelp(VARIANT varID, BSTR *pszHelp) { showDebug(__FUNCTION__, accessible); if (!accessible->isValid()) return E_FAIL; AccessibleElement elem(varID.lVal, accessible); QString help = elem.text(Help); if (help.size()) { *pszHelp = QStringToBSTR(help); return S_OK; } *pszHelp = 0; return S_FALSE; }
HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accName(VARIANT varID, BSTR* pszName) { #ifdef DEBUG_SHOW_ATCLIENT_COMMANDS showDebug(__FUNCTION__, accessible); #endif //DEBUG_SHOW_ATCLIENT_COMMANDS if (!accessible->isValid()) return E_FAIL; QString n = accessible->text(Name, varID.lVal); if (n.size()) { *pszName = QStringToBSTR(n); return S_OK; } *pszName = 0; return S_FALSE; }
HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accKeyboardShortcut(VARIANT varID, BSTR *pszKeyboardShortcut) { #ifdef DEBUG_SHOW_ATCLIENT_COMMANDS showDebug(__FUNCTION__, accessible); #endif //DEBUG_SHOW_ATCLIENT_COMMANDS if (!accessible->isValid()) return E_FAIL; QString sc = accessible->text(Accelerator, varID.lVal); if (sc.size()) { *pszKeyboardShortcut = QStringToBSTR(sc); return S_OK; } *pszKeyboardShortcut = 0; return S_FALSE; }
HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accDescription(VARIANT varID, BSTR* pszDescription) { #ifdef DEBUG_SHOW_ATCLIENT_COMMANDS showDebug(__FUNCTION__, accessible); #endif //DEBUG_SHOW_ATCLIENT_COMMANDS if (!accessible->isValid()) return E_FAIL; QString descr = accessible->text(Description, varID.lVal); if (descr.size()) { *pszDescription = QStringToBSTR(descr); return S_OK; } *pszDescription = 0; return S_FALSE; }
HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accKeyboardShortcut(VARIANT varID, BSTR *pszKeyboardShortcut) { Q_UNUSED(varID); showDebug(__FUNCTION__, accessible); if (!accessible->isValid()) return E_FAIL; *pszKeyboardShortcut = 0; if (QAccessibleActionInterface *actionIface = accessible->actionInterface()) { const QString def = actionIface->actionNames().value(0); if (!def.isEmpty()) { const QString keyBoardShortCut = actionIface->keyBindingsForAction(def).value(0); if (!keyBoardShortCut.isEmpty()) *pszKeyboardShortcut = QStringToBSTR(keyBoardShortCut); } } return *pszKeyboardShortcut ? S_OK : S_FALSE; }
// moz: [important] HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accValue(VARIANT varID, BSTR* pszValue) { showDebug(__FUNCTION__, accessible); if (!accessible->isValid() || varID.lVal) return E_FAIL; QString value; if (accessible->valueInterface()) { value = QString::number(accessible->valueInterface()->currentValue().toDouble()); } else { value = accessible->text(QAccessible::Value); } if (!value.isNull()) { *pszValue = QStringToBSTR(value); return S_OK; } *pszValue = 0; return S_FALSE; }
// moz: [important] HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accName(VARIANT varID, BSTR* pszName) { showDebug(__FUNCTION__, accessible); if (!accessible->isValid()) return E_FAIL; QString name; if (varID.lVal) { QAIPointer child = childPointer(varID); if (!child) return E_FAIL; name = child->text(QAccessible::Name); } else { name = accessible->text(QAccessible::Name); } if (name.size()) { *pszName = QStringToBSTR(name); return S_OK; } *pszName = 0; return S_FALSE; }
HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accHelp(VARIANT varID, BSTR *pszHelp) { showDebug(__FUNCTION__, accessible); if (!accessible->isValid()) return E_FAIL; QString help; if (varID.lVal) { QAIPointer child = childPointer(varID); if (!child) return E_FAIL; help = child->text(QAccessible::Help); } else { help = accessible->text(QAccessible::Help); } if (help.size()) { *pszHelp = QStringToBSTR(help); return S_OK; } *pszHelp = 0; return S_FALSE; }
HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::get_accHelp(VARIANT varID, BSTR *pszHelp) { QAccessibleInterface *accessible = accessibleInterface(); accessibleDebugClientCalls(accessible); if (!accessible) return E_FAIL; QString help; if (varID.lVal) { QAccessibleInterface *child = childPointer(accessible, varID); if (!child) return E_FAIL; help = child->text(QAccessible::Help); } else { help = accessible->text(QAccessible::Help); } if (help.size()) { *pszHelp = QStringToBSTR(help); return S_OK; } *pszHelp = 0; return S_FALSE; }
HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accDescription(VARIANT varID, BSTR* pszDescription) { showDebug(__FUNCTION__, accessible); if (!accessible->isValid()) return E_FAIL; QString descr; if (varID.lVal) { QAIPointer child = childPointer(varID); if (!child) return E_FAIL; descr = child->text(QAccessible::Description); } else { descr = accessible->text(QAccessible::Description); } if (descr.size()) { *pszDescription = QStringToBSTR(descr); return S_OK; } *pszDescription = 0; return S_FALSE; }
/*! \reimp */ bool QAxScriptEngine::initialize(IUnknown **ptr) { *ptr = 0; #ifndef QT_NO_QAXSCRIPT if (!script_code || script_language.isEmpty()) return false; CLSID clsid; HRESULT hres = CLSIDFromProgID((WCHAR*)script_language.utf16(), &clsid); if(FAILED(hres)) return false; CoCreateInstance(clsid, 0, CLSCTX_INPROC_SERVER, IID_IActiveScript, (void**)&engine); if (!engine) return false; IActiveScriptParse *parser = 0; engine->QueryInterface(IID_IActiveScriptParse, (void**)&parser); if (!parser) { engine->Release(); engine = 0; return false; } if (engine->SetScriptSite(script_code->script_site) != S_OK) { engine->Release(); engine = 0; return false; } if (parser->InitNew() != S_OK) { parser->Release(); engine->Release(); engine = 0; return false; } BSTR bstrCode = QStringToBSTR(script_code->scriptCode()); #ifdef Q_OS_WIN64 hres = parser->ParseScriptText(bstrCode, 0, 0, 0, DWORDLONG(this), 0, SCRIPTTEXT_ISVISIBLE, 0, 0); #else hres = parser->ParseScriptText(bstrCode, 0, 0, 0, DWORD(this), 0, SCRIPTTEXT_ISVISIBLE, 0, 0); #endif SysFreeString(bstrCode); parser->Release(); parser = 0; script_code->updateObjects(); if (engine->SetScriptState(SCRIPTSTATE_CONNECTED) != S_OK) { engine = 0; return false; } IDispatch *scriptDispatch = 0; engine->GetScriptDispatch(0, &scriptDispatch); if (scriptDispatch) { scriptDispatch->QueryInterface(IID_IUnknown, (void**)ptr); scriptDispatch->Release(); } #endif return *ptr != 0; }
/* Converts \a var to \a arg, and tries to coerce \a arg to \a type. Used by QAxServerBase: - QAxServerBase::qt_metacall - IDispatch::Invoke(PROPERTYGET, METHOD) - IPersistPropertyBag::Save QAxBase: - IDispatch::Invoke (QAxEventSink) - QAxBase::internalProperty(WriteProperty) - QAxBase::internalInvoke() - QAxBase::dynamicCallHelper() - IPropertyBag::Read (QtPropertyBag) Also called recoursively for lists. */ bool QVariantToVARIANT(const QVariant &var, VARIANT &arg, const QByteArray &typeName, bool out) { QVariant qvar = var; // "type" is the expected type, so coerce if necessary QVariant::Type proptype = typeName.isEmpty() ? QVariant::Invalid : QVariant::nameToType(typeName); if (proptype == QVariant::UserType && !typeName.isEmpty()) { if (typeName == "short" || typeName == "char") proptype = QVariant::Int; else if (typeName == "float") proptype = QVariant::Double; } if (proptype != QVariant::Invalid && proptype != QVariant::UserType && proptype != qvar.type()) { if (qvar.canConvert(proptype)) qvar.convert(proptype); else qvar = QVariant(proptype); } if (out && arg.vt == (VT_VARIANT|VT_BYREF) && arg.pvarVal) { return QVariantToVARIANT(var, *arg.pvarVal, typeName, false); } if (out && proptype == QVariant::UserType && typeName == "QVariant") { VARIANT *pVariant = new VARIANT; QVariantToVARIANT(var, *pVariant, QByteArray(), false); arg.vt = VT_VARIANT|VT_BYREF; arg.pvarVal = pVariant; return true; } switch ((int)qvar.type()) { case QVariant::String: if (out && arg.vt == (VT_BSTR|VT_BYREF)) { if (*arg.pbstrVal) SysFreeString(*arg.pbstrVal); *arg.pbstrVal = QStringToBSTR(qvar.toString()); arg.vt = VT_BSTR|VT_BYREF; } else { arg.vt = VT_BSTR; arg.bstrVal = QStringToBSTR(qvar.toString()); if (out) { arg.pbstrVal = new BSTR(arg.bstrVal); arg.vt |= VT_BYREF; } } break; case QVariant::Int: if (out && arg.vt == (VT_I4|VT_BYREF)) { *arg.plVal = qvar.toInt(); } else { arg.vt = VT_I4; arg.lVal = qvar.toInt(); if (out) { if (typeName == "short") { arg.vt = VT_I2; arg.piVal = new short(arg.lVal); } else if (typeName == "char") { arg.vt = VT_I1; arg.pcVal= new char(arg.lVal); } else { arg.plVal = new long(arg.lVal); } arg.vt |= VT_BYREF; } } break; case QVariant::UInt: if (out && (arg.vt == (VT_UINT|VT_BYREF) || arg.vt == (VT_I4|VT_BYREF))) { *arg.puintVal = qvar.toUInt(); } else { arg.vt = VT_UINT; arg.uintVal = qvar.toUInt(); if (out) { arg.puintVal = new uint(arg.uintVal); arg.vt |= VT_BYREF; } } break; case QVariant::LongLong: if (out && arg.vt == (VT_CY|VT_BYREF)) { arg.pcyVal->int64 = qvar.toLongLong(); #if !defined(Q_OS_WINCE) && defined(_MSC_VER) && _MSC_VER >= 1400 } else if (out && arg.vt == (VT_I8|VT_BYREF)) { *arg.pllVal = qvar.toLongLong(); } else { arg.vt = VT_I8; arg.llVal = qvar.toLongLong(); if (out) { arg.pllVal = new LONGLONG(arg.llVal); arg.vt |= VT_BYREF; } } #else } else {