diff --git a/src/shared/Core/MessageBroker/Subscription.h b/src/shared/Core/MessageBroker/Subscription.h index 390b100d27c180fa75ac62bf1512b0a0c8d1e667..4015f2cccb35082bb4d13ac119de8d87fc1250e7 100644 --- a/src/shared/Core/MessageBroker/Subscription.h +++ b/src/shared/Core/MessageBroker/Subscription.h @@ -11,13 +11,15 @@ class Subscription public: void unsubscribe() { MessageBroker::getInstance().unsubscribe(this); } + bool matchesFilter(Filter filter) { return this->filter == filter; }; + ~Subscription() { unsubscribe(); } friend class MessageBroker; private: Subscription(MessageBroker::SubscriberFn callback, Filter filter) - : filter(filter), callback(std::move(callback)){}; + : filter(filter), callback(std::move(callback)) {}; Subscription() = delete; Subscription(Subscription&) = delete; diff --git a/src/shared/Modules/Graph/Graph.cpp b/src/shared/Modules/Graph/Graph.cpp index 29da0a0ec764e5d4b5e2a2213b1c8473f619b604..2a3b3873a477841474f40bdeb2702fcd28dd845f 100644 --- a/src/shared/Modules/Graph/Graph.cpp +++ b/src/shared/Modules/Graph/Graph.cpp @@ -145,9 +145,11 @@ void Graph::onFilterAdded(const Filter& filter) } plot->replot(); - subscription = MessageBroker::getInstance().subscribe( - filter, [this](const Message& message, const Filter& filter) - { onMessageReceived(message, filter); }); + subscriptions.insert( + {filter, + MessageBroker::getInstance().subscribe( + filter, [this](const Message& message, const Filter& filter) + { onMessageReceived(message, filter); })}); } void Graph::onFilterRemoved(const Filter& filter) @@ -164,7 +166,7 @@ void Graph::onFilterRemoved(const Filter& filter) lines.remove(filter); - subscription = nullptr; + subscriptions.erase(subscriptions.find(filter)); } else { diff --git a/src/shared/Modules/Graph/Graph.h b/src/shared/Modules/Graph/Graph.h index fa2da80460270aa645d75ddd702ede9be5c64034..21122ba515c85578b62cfb78f3ecb3881d88a100 100644 --- a/src/shared/Modules/Graph/Graph.h +++ b/src/shared/Modules/Graph/Graph.h @@ -28,7 +28,6 @@ #include <QTimer> #include <QWidget> - class Graph : public Module { Q_OBJECT @@ -79,6 +78,6 @@ private: int legendFontSize = 15; - std::unique_ptr<Subscription> subscription; + std::map<Filter, std::unique_ptr<Subscription>> subscriptions; std::unique_ptr<SubscriptionsPanel> subscriptionsPanel; };