/*static*/ PyObject * PythonScript::callMethod(PyObject * o, PyObject * pyArgs, PyObject * kw) { Q_UNUSED(kw) QObject * obj; QString methodName; QVariantList args; QVariant result; int i; // Get the QObject* we operate on obj = (QObject*)GET_ENCAPSULATED_C_POINTER((PyObject*)(((pyQObjectMethodObject*)o)->_TWcontext)); if (!asQString((PyObject*)(((pyQObjectMethodObject*)o)->_methodName), methodName)) { PyErr_SetString(PyExc_TypeError, qPrintable(tr("call: invalid method name"))); return NULL; } for (i = 0; i < PyTuple_Size(pyArgs); ++i) { args.append(PythonScript::PythonToVariant(PyTuple_GetItem(pyArgs, i))); } if (methodName.length() > 1 && methodName.endsWith(QChar('_'))) methodName.chop(1); switch (doCallMethod(obj, methodName, args, result)) { case Method_OK: return PythonScript::VariantToPython(result); case Method_DoesNotExist: PyErr_Format(PyExc_TypeError, qPrintable(tr("call: the method %s doesn't exist")), qPrintable(methodName)); return NULL; case Method_WrongArgs: PyErr_Format(PyExc_TypeError, qPrintable(tr("call: couldn't call %s with the given arguments")), qPrintable(methodName)); return NULL; case Method_Failed: PyErr_Format(PyExc_TypeError, qPrintable(tr("call: internal error while executing %s")), qPrintable(methodName)); return NULL; default: break; } // we should never reach this point return NULL; }
void ObjectService::performObjectService(TasCommandModel& model, TasResponse& response) { TasLogger::logger()->debug(QString("TasCommander::performObjectService entry")); QListIterator<TasTarget*> i(model.targetList()); QString errorString; while (i.hasNext()){ TasTarget* commandTarget = i.next(); QString targetId = commandTarget->id(); QString targetType = commandTarget->type(); QObject* target = 0; if(targetType == TYPE_GRAPHICS_VIEW){ QGraphicsItem* item = findGraphicsItem(targetId); //target = TestabilityUtils::castToGraphicsWidget(item); target = item->toGraphicsObject(); } else if(targetType == TYPE_STANDARD_VIEW){ target = findWidget(targetId); //If Type is Standard View check QObjects in cache too. if(!target) { target = findObject(targetId); } } else if(targetType == TYPE_QSCENEGRAPH){ target = findQuickItem(targetId); } else if(targetType == TYPE_APPLICATION_VIEW ){ target = qApp; } // TODO: add support //else if(targetType == TYPE_ACTION_VIEW = "Action"; //else if(targetType == TYPE_LAYOUT = "Layout"; //else if(targetType == TYPE_LAYOUT_ITEM = "LayoutItem"; //else if(targetType == TYPE_WEB = "Web"; //else if(targetType == TYPE_QWEB = "QWeb"; else { errorString.append(targetType + " target type not supported. "); } TasLogger::logger()->debug( QString("TasCommander::performObjectService %1 %2 found: %3") .arg(targetType).arg(targetId).arg(target!=NULL)); if (target) { QListIterator<TasCommand*> j(commandTarget->commandList()); while (j.hasNext()){ TasCommand* command = j.next(); if(command->name() == "SetAttribute"){ doSetAttribute(command, target, errorString); } else if (command->name() == "CallMethod"){ response.setData(doCallMethod(command, target, errorString)); } else { TasLogger::logger()->debug( QString("TasCommander::performObjectService %1 %2: unsupported %3") .arg(targetType).arg(targetId).arg(command->name())); } } } } if(!errorString.isEmpty()){ response.setErrorMessage(errorString); TasLogger::logger()->debug( QString("TasCommander::performObjectService errors: %1") .arg(errorString)); } else { TasLogger::logger()->debug( QString("TasCommander::performObjectService, no errors.")); } }