+ApiTraceState *ApiTraceEvent::state() const
+{
+ return m_state;
+}
+
+void ApiTraceEvent::setState(ApiTraceState *state)
+{
+ m_state = state;
+}
+
+ApiTraceCall::ApiTraceCall(ApiTraceFrame *parentFrame,
+ TraceLoader *loader,
+ const trace::Call *call)
+ : ApiTraceEvent(ApiTraceEvent::Call),
+ m_parentFrame(parentFrame)
+{
+ m_index = call->no;
+
+ m_signature = loader->signature(call->sig->id);
+
+ if (!m_signature) {
+ QString name = QString::fromStdString(call->sig->name);
+ QStringList argNames;
+ argNames.reserve(call->sig->num_args);
+ for (int i = 0; i < call->sig->num_args; ++i) {
+ argNames += QString::fromStdString(call->sig->arg_names[i]);
+ }
+ m_signature = new ApiTraceCallSignature(name, argNames);
+ loader->addSignature(call->sig->id, m_signature);
+ }
+ if (call->ret) {
+ VariantVisitor retVisitor(loader);
+ call->ret->visit(retVisitor);
+ m_returnValue = retVisitor.variant();
+ }
+ m_argValues.reserve(call->args.size());
+ for (int i = 0; i < call->args.size(); ++i) {
+ if (call->args[i].value) {
+ VariantVisitor argVisitor(loader);
+ call->args[i].value->visit(argVisitor);
+ m_argValues.append(argVisitor.variant());
+ if (m_argValues[i].type() == QVariant::ByteArray) {
+ m_hasBinaryData = true;
+ m_binaryDataIndex = i;
+ }
+ } else {
+ m_argValues.append(QVariant());
+ }
+ }
+ m_argValues.squeeze();
+ m_flags = call->flags;
+}
+
+ApiTraceCall::~ApiTraceCall()
+{
+}
+
+
+bool ApiTraceCall::hasError() const
+{
+ return !m_error.isEmpty();
+}
+
+QString ApiTraceCall::error() const
+{
+ return m_error;
+}
+
+void ApiTraceCall::setError(const QString &msg)
+{
+ if (m_error != msg) {
+ m_error = msg;
+ m_richText = QString();
+ }
+}
+
+ApiTrace * ApiTraceCall::parentTrace() const
+{
+ if (m_parentFrame)
+ return m_parentFrame->parentTrace();
+ return NULL;
+}
+
+QVector<QVariant> ApiTraceCall::originalValues() const
+{
+ return m_argValues;
+}
+
+void ApiTraceCall::setEditedValues(const QVector<QVariant> &lst)
+{
+ ApiTrace *trace = parentTrace();
+
+ m_editedValues = lst;
+ //lets regenerate data
+ m_richText = QString();
+ m_searchText = QString();
+ delete m_staticText;
+ m_staticText = 0;
+
+ if (trace) {
+ if (!lst.isEmpty()) {
+ trace->callEdited(this);
+ } else {
+ trace->callReverted(this);
+ }
+ }
+}
+
+QVector<QVariant> ApiTraceCall::editedValues() const
+{
+ return m_editedValues;
+}
+
+bool ApiTraceCall::edited() const
+{
+ return !m_editedValues.isEmpty();
+}
+
+void ApiTraceCall::revert()
+{
+ setEditedValues(QVector<QVariant>());
+}
+
+void ApiTraceCall::setHelpUrl(const QUrl &url)
+{
+ m_signature->setHelpUrl(url);
+}
+
+void ApiTraceCall::setParentFrame(ApiTraceFrame *frame)
+{
+ m_parentFrame = frame;
+}
+
+ApiTraceFrame * ApiTraceCall::parentFrame()const
+{
+ return m_parentFrame;
+}
+
+int ApiTraceCall::index() const
+{
+ return m_index;
+}
+
+QString ApiTraceCall::name() const
+{
+ return m_signature->name();
+}
+
+QStringList ApiTraceCall::argNames() const
+{
+ return m_signature->argNames();
+}
+
+QVector<QVariant> ApiTraceCall::arguments() const
+{
+ if (m_editedValues.isEmpty())
+ return m_argValues;
+ else
+ return m_editedValues;
+}
+
+QVariant ApiTraceCall::returnValue() const
+{
+ return m_returnValue;
+}
+
+trace::CallFlags ApiTraceCall::flags() const
+{
+ return m_flags;
+}
+
+QUrl ApiTraceCall::helpUrl() const
+{
+ return m_signature->helpUrl();
+}
+
+bool ApiTraceCall::hasBinaryData() const
+{
+ return m_hasBinaryData;
+}
+
+int ApiTraceCall::binaryDataIndex() const
+{
+ return m_binaryDataIndex;
+}
+