From 887b3b36f0882ec1d425d08ee88cb7e0e09e7c57 Mon Sep 17 00:00:00 2001 From: AndreaRigoni Date: Thu, 19 Mar 2026 12:51:37 +0000 Subject: [PATCH] add lambda connection --- src/Core/Object.cpp | 2 ++ src/Core/Object.h | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/Core/Object.cpp b/src/Core/Object.cpp index 3998ce2..d909f4e 100644 --- a/src/Core/Object.cpp +++ b/src/Core/Object.cpp @@ -145,6 +145,8 @@ GenericMFPtr *Object::findSlotImpl(const char *name) const { return NULL; } +void Object::Updated() { ULIB_SIGNAL_EMIT(Object::Updated); } + // std::ostream & // operator << (std::ostream &os, uLib::Object &ob) // { diff --git a/src/Core/Object.h b/src/Core/Object.h index 3c8865a..0dfc060 100644 --- a/src/Core/Object.h +++ b/src/Core/Object.h @@ -97,6 +97,9 @@ public: //////////////////////////////////////////////////////////////////////////// // SIGNALS // + signals: + virtual void Updated(); + // Qt4 style connector // static bool connect(const Object *ob1, const char *signal_name, const Object *receiver, const char *slot_name) { @@ -121,6 +124,25 @@ public: return true; } + // Lambda/Function object connector // + template + static bool connect(typename FunctionPointer::Object *sender, + Func1 sigf, SlotT slof) { + SignalBase *sigb = sender->findOrAddSignal(sigf); + typedef typename FunctionPointer::SignalSignature SigSignature; + typedef typename Signal::type SigT; + reinterpret_cast(sigb)->connect(slof); + return true; + } + + template + static bool + disconnect(typename FunctionPointer::Object *sender, Func1 sigf, + typename FunctionPointer::Object *receiver, Func2 slof) { + // TODO: implement actual disconnect in Signal.h // + return true; + } + template static inline bool connect(SignalBase *sigb, FuncT slof, Object *receiver) { ConnectSignal::SignalSignature>(sigb, slof,