{
enabled = QQmlProfilerService::instance
? QQmlProfilerService::instance->profilingEnabled() : false;
- if (enabled)
- init(signal, expression);
- }
-
- QQmlHandlingSignalProfiler(QObject *object, int index, QQmlBoundSignalExpression *expression)
- {
- enabled = QQmlProfilerService::instance
- ? QQmlProfilerService::instance->profilingEnabled() : false;
- if (enabled)
- init(object->metaObject()->method(index), expression);
+ if (enabled) {
+ QQmlProfilerService *service = QQmlProfilerService::instance;
+ service->startRange(QQmlProfilerService::HandlingSignal);
+ service->rangeData(QQmlProfilerService::HandlingSignal,
+ QLatin1String(signal.signature()) + QLatin1String(": ")
+ + expression->expression());
+ service->rangeLocation(QQmlProfilerService::HandlingSignal,
+ expression->sourceFile(), expression->lineNumber(),
+ expression->columnNumber());
+ }
}
~QQmlHandlingSignalProfiler()
}
bool enabled;
-
-private:
- void init(const QMetaMethod &signal, QQmlBoundSignalExpression *expression)
- {
- QQmlProfilerService *service = QQmlProfilerService::instance;
- service->startRange(QQmlProfilerService::HandlingSignal);
- service->rangeData(QQmlProfilerService::HandlingSignal,
- QLatin1String(signal.signature()) + QLatin1String(": ")
- + expression->expression());
- service->rangeLocation(QQmlProfilerService::HandlingSignal,
- expression->sourceFile(), expression->lineNumber(),
- expression->columnNumber());
- }
};
struct QQmlObjectCreatingProfiler {
}
}
-////////////////////////////////////////////////////////////////////////
-
-QQmlBoundSignalNoParams::QQmlBoundSignalNoParams(QObject *scope, const QMetaMethod &signal,
- QObject *owner)
-: m_expression(0), m_owner(owner), m_index(signal.methodIndex()), m_isEvaluating(false)
-{
- callback = &subscriptionCallback;
- QQmlNotifierEndpoint::connect(scope, m_index);
-}
-
-QQmlBoundSignalNoParams::~QQmlBoundSignalNoParams()
-{
- delete m_expression;
- m_expression = 0;
-}
-
-int QQmlBoundSignalNoParams::index() const
-{
- return m_index;
-}
-
-/*!
- Returns the signal expression.
-*/
-QQmlBoundSignalExpression *QQmlBoundSignalNoParams::expression() const
-{
- return m_expression;
-}
-
-/*!
- Sets the signal expression to \a e. Returns the current signal expression,
- or null if there is no signal expression.
-
- The QQmlBoundSignalNoParams instance takes ownership of \a e. The caller is
- assumes ownership of the returned QQmlExpression.
-*/
-QQmlBoundSignalExpression *QQmlBoundSignalNoParams::setExpression(QQmlBoundSignalExpression *e)
-{
- QQmlBoundSignalExpression *rv = m_expression;
- m_expression = e;
- if (m_expression) m_expression->setNotifyOnValueChanged(false);
- return rv;
-}
-
-void QQmlBoundSignalNoParams::subscriptionCallback(QQmlNotifierEndpoint *e)
-{
- QQmlBoundSignalNoParams *s = static_cast<QQmlBoundSignalNoParams*>(e);
- if (!s->m_expression)
- return;
-
- if (QQmlDebugService::isDebuggingEnabled())
- QV8DebugService::instance()->signalEmitted(QString::fromAscii(s->m_owner->metaObject()->method(s->m_index).signature()));
-
- QQmlHandlingSignalProfiler prof(s->m_owner, s->m_index, s->m_expression);
-
- s->m_isEvaluating = true;
- if (s->m_expression && s->m_expression->engine()) {
- s->m_expression->evaluate(); // evaluate signal expression.
- if (s->m_expression && s->m_expression->hasError())
- QQmlEnginePrivate::warning(s->m_expression->engine(), s->m_expression->error());
- }
- s->m_isEvaluating = false;
-}
-
QT_END_NAMESPACE
#include <qqmlboundsignal.moc>
#include <private/qqmlabstractexpression_p.h>
#include <private/qqmljavascriptexpression_p.h>
-#include <private/qqmlnotifier_p.h>
#include <private/qobject_p.h>
QT_BEGIN_NAMESPACE
QObject *m_owner;
};
-class Q_QML_EXPORT QQmlBoundSignalNoParams : public QQmlAbstractBoundSignal,
- public QQmlNotifierEndpoint
-{
-public:
- QQmlBoundSignalNoParams(QObject *scope, const QMetaMethod &signal, QObject *owner);
- virtual ~QQmlBoundSignalNoParams();
-
- int index() const;
-
- QQmlBoundSignalExpression *expression() const;
- QQmlBoundSignalExpression *setExpression(QQmlBoundSignalExpression *);
- QObject *object() { return m_owner; }
-
- static void subscriptionCallback(QQmlNotifierEndpoint *e);
-
- bool isEvaluating() const { return m_isEvaluating; }
-
-private:
- QQmlBoundSignalExpression *m_expression;
- QObject *m_owner;
- int m_index;
- bool m_isEvaluating;
-};
-
-
QT_END_NAMESPACE
#endif // QQMLBOUNDSIGNAL_P_H
return signalHandler->setExpression(expr);
if (expr) {
- QQmlAbstractBoundSignal *signal = 0;
- if (that.method().parameterTypes().count())
- signal = new QQmlBoundSignal(that.d->object, that.method(), that.d->object);
- else
- signal = new QQmlBoundSignalNoParams(that.d->object, that.method(), that.d->object);
+ QQmlBoundSignal *signal = new QQmlBoundSignal(that.d->object, that.method(), that.d->object);
QQmlBoundSignalExpression *oldExpr = signal->setExpression(expr);
signal->addToObject();
return oldExpr;
QMetaMethod signal = target->metaObject()->method(instr.signalIndex);
- QQmlAbstractBoundSignal *bs = 0;
- if (signal.parameterTypes().count())
- bs = new QQmlBoundSignal(target, signal, target);
- else
- bs = new QQmlBoundSignalNoParams(target, signal, target);
+ QQmlBoundSignal *bs = new QQmlBoundSignal(target, signal, target);
QQmlBoundSignalExpression *expr =
new QQmlBoundSignalExpression(CTXT, context, DATAS.at(instr.value), true, COMP->name, instr.line, instr.column);
bs->setExpression(expr);