diff --git a/src/App/Expression.h b/src/App/Expression.h index d80c38fad..5f3f7fb44 100644 --- a/src/App/Expression.h +++ b/src/App/Expression.h @@ -46,6 +46,25 @@ public: virtual void visit(Expression * e) = 0; }; +template class AppExport ExpressionModifier : public ExpressionVisitor { +public: + ExpressionModifier(P & _prop) + : prop(_prop) { } + + virtual ~ExpressionModifier() { } + + void setExpressionChanged() { + if (!signaller) + signaller = boost::shared_ptr::AtomicPropertyChange>(AtomicPropertyChangeInterface

::getAtomicPropertyChange(prop)); + } + + bool getChanged() const { return signaller != 0; } + +protected: + P & prop; + boost::shared_ptr::AtomicPropertyChange> signaller; +}; + /** * Base class for expressions. * diff --git a/src/App/Property.h b/src/App/Property.h index cecfb44fd..b0855f3a7 100644 --- a/src/App/Property.h +++ b/src/App/Property.h @@ -212,6 +212,7 @@ template class AtomicPropertyChangeInterface { protected: AtomicPropertyChangeInterface() : signalCounter(0) { } +public: class AtomicPropertyChange { public: AtomicPropertyChange(P & prop) : mProp(prop) { @@ -234,6 +235,8 @@ protected: P & mProp; /**< Referenced to property we work on */ }; + static AtomicPropertyChange * getAtomicPropertyChange(P & prop) { return new AtomicPropertyChange(prop); } + private: int signalCounter; /**< Counter for invoking transaction start/stop */