refactor: unify Object signal system, update property connections, and integrate Eigen3 into Root module
This commit is contained in:
@@ -78,28 +78,30 @@ public:
|
||||
Object(const Object ©);
|
||||
virtual ~Object();
|
||||
|
||||
virtual const char * GetClassName() const { return type_name(); }
|
||||
virtual const char * type_name() const { return "Object"; }
|
||||
virtual const char *GetClassName() const { return type_name(); }
|
||||
virtual const char *type_name() const { return "Object"; }
|
||||
|
||||
const std::string& GetInstanceName() const;
|
||||
void SetInstanceName(const std::string& name);
|
||||
|
||||
/** @brief Temporarily blocks all signal emissions from this object. Returns previous state. */
|
||||
const std::string &GetInstanceName() const;
|
||||
void SetInstanceName(const std::string &name);
|
||||
|
||||
/** @brief Temporarily blocks all signal emissions from this object. Returns
|
||||
* previous state. */
|
||||
bool blockSignals(bool block);
|
||||
|
||||
|
||||
/** @brief Checks if signals are currently blocked. */
|
||||
bool signalsBlocked() const;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// PROPERTIES //
|
||||
virtual void RegisterProperty(PropertyBase* property);
|
||||
virtual void RegisterDynamicProperty(PropertyBase* property);
|
||||
virtual void RegisterDisplayProperty(PropertyBase* property);
|
||||
virtual const std::vector<PropertyBase*>& GetProperties() const;
|
||||
virtual const std::vector<PropertyBase*>& GetDisplayProperties() const;
|
||||
PropertyBase* GetProperty(const std::string& name) const;
|
||||
virtual void RegisterProperty(PropertyBase *property);
|
||||
virtual void RegisterDynamicProperty(PropertyBase *property);
|
||||
virtual void RegisterDisplayProperty(PropertyBase *property);
|
||||
virtual const std::vector<PropertyBase *> &GetProperties() const;
|
||||
virtual const std::vector<PropertyBase *> &GetDisplayProperties() const;
|
||||
PropertyBase *GetProperty(const std::string &name) const;
|
||||
|
||||
/** @brief Sends an Updated signal for all properties of this object. useful for real-time UI refresh. */
|
||||
/** @brief Sends an Updated signal for all properties of this object. useful
|
||||
* for real-time UI refresh. */
|
||||
void NotifyPropertiesUpdated();
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
@@ -109,7 +111,7 @@ public:
|
||||
virtual void DeepCopy(const Object ©);
|
||||
|
||||
/** @brief Returns a nested context for children objects, if any. */
|
||||
virtual ObjectsContext* GetChildren() { return nullptr; }
|
||||
virtual ObjectsContext *GetChildren() { return nullptr; }
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// SERIALIZATION //
|
||||
@@ -117,13 +119,20 @@ public:
|
||||
template <class ArchiveT>
|
||||
void serialize(ArchiveT &ar, const unsigned int version);
|
||||
|
||||
virtual void serialize(Archive::xml_oarchive & ar, const unsigned int version) {}
|
||||
virtual void serialize(Archive::xml_iarchive & ar, const unsigned int version) {}
|
||||
virtual void serialize(Archive::text_oarchive & ar, const unsigned int version) {}
|
||||
virtual void serialize(Archive::text_iarchive & ar, const unsigned int version) {}
|
||||
virtual void serialize(Archive::hrt_oarchive & ar, const unsigned int version) {}
|
||||
virtual void serialize(Archive::hrt_iarchive & ar, const unsigned int version) {}
|
||||
virtual void serialize(Archive::log_archive & ar, const unsigned int version) {}
|
||||
virtual void serialize(Archive::xml_oarchive &ar,
|
||||
const unsigned int version) {}
|
||||
virtual void serialize(Archive::xml_iarchive &ar,
|
||||
const unsigned int version) {}
|
||||
virtual void serialize(Archive::text_oarchive &ar,
|
||||
const unsigned int version) {}
|
||||
virtual void serialize(Archive::text_iarchive &ar,
|
||||
const unsigned int version) {}
|
||||
virtual void serialize(Archive::hrt_oarchive &ar,
|
||||
const unsigned int version) {}
|
||||
virtual void serialize(Archive::hrt_iarchive &ar,
|
||||
const unsigned int version) {}
|
||||
virtual void serialize(Archive::log_archive &ar, const unsigned int version) {
|
||||
}
|
||||
|
||||
template <class ArchiveT>
|
||||
void save_override(ArchiveT &ar, const unsigned int version) {}
|
||||
@@ -137,9 +146,8 @@ public:
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// SIGNALS //
|
||||
|
||||
signals:
|
||||
signals:
|
||||
virtual void Updated();
|
||||
virtual void PropertyUpdated();
|
||||
|
||||
// Qt4 style connector //
|
||||
static bool connect(const Object *ob1, const char *signal_name,
|
||||
@@ -160,14 +168,14 @@ public:
|
||||
connect(typename FunctionPointer<Func1>::Object *sender, Func1 sigf,
|
||||
typename FunctionPointer<Func2>::Object *receiver, Func2 slof) {
|
||||
SignalBase *sigb = sender->findOrAddSignal(sigf);
|
||||
return ConnectSignal<typename FunctionPointer<Func1>::SignalSignature>(sigb, slof,
|
||||
receiver);
|
||||
return ConnectSignal<typename FunctionPointer<Func1>::SignalSignature>(
|
||||
sigb, slof, receiver);
|
||||
}
|
||||
|
||||
// Lambda/Function object connector //
|
||||
template <typename Func1, typename SlotT>
|
||||
static Connection connect(typename FunctionPointer<Func1>::Object *sender,
|
||||
Func1 sigf, SlotT slof) {
|
||||
Func1 sigf, SlotT slof) {
|
||||
SignalBase *sigb = sender->findOrAddSignal(sigf);
|
||||
typedef typename FunctionPointer<Func1>::SignalSignature SigSignature;
|
||||
typedef typename Signal<SigSignature>::type SigT;
|
||||
@@ -183,9 +191,10 @@ public:
|
||||
}
|
||||
|
||||
template <typename FuncT>
|
||||
static inline Connection connect(SignalBase *sigb, FuncT slof, Object *receiver) {
|
||||
return ConnectSignal<typename FunctionPointer<FuncT>::SignalSignature>(sigb, slof,
|
||||
receiver);
|
||||
static inline Connection connect(SignalBase *sigb, FuncT slof,
|
||||
Object *receiver) {
|
||||
return ConnectSignal<typename FunctionPointer<FuncT>::SignalSignature>(
|
||||
sigb, slof, receiver);
|
||||
}
|
||||
|
||||
template <typename FuncT>
|
||||
|
||||
Reference in New Issue
Block a user