From aa25f220537aacdf445035c603a35814679a5534 Mon Sep 17 00:00:00 2001 From: thibaudk Date: Sun, 12 Jan 2025 13:01:37 +0000 Subject: [PATCH] [QObject] potentially fixed bugui/issues/7 --- Hardware/3rdparty/bugui | 2 +- Hardware/Controller.cpp | 3 --- Hardware/Controller.hpp | 3 --- Hardware/DocumentPlugin.cpp | 4 ++-- Hardware/Widgets/ScenarioWidget.cpp | 13 +++++++++++-- Hardware/Widgets/ScenarioWidget.hpp | 6 ++++-- 6 files changed, 18 insertions(+), 13 deletions(-) diff --git a/Hardware/3rdparty/bugui b/Hardware/3rdparty/bugui index 995dc6e..9e937d4 160000 --- a/Hardware/3rdparty/bugui +++ b/Hardware/3rdparty/bugui @@ -1 +1 @@ -Subproject commit 995dc6e2b40dae91b0782dba7f9ce712fec10b53 +Subproject commit 9e937d4c88c835428ec30373f8a866854555b3ee diff --git a/Hardware/Controller.cpp b/Hardware/Controller.cpp index 054fb8f..3cb778c 100644 --- a/Hardware/Controller.cpp +++ b/Hardware/Controller.cpp @@ -118,6 +118,3 @@ void Controller::on_right(bool pressed) } } // namespace hardware - -#include -W_OBJECT_IMPL(Hardware::Controller) diff --git a/Hardware/Controller.hpp b/Hardware/Controller.hpp index 919e802..09820d2 100644 --- a/Hardware/Controller.hpp +++ b/Hardware/Controller.hpp @@ -12,10 +12,7 @@ namespace Hardware { class SCORE_ADDON_HARDWARE_EXPORT Controller final : public bugui::controller - , public QObject { - W_OBJECT(Controller) - public: explicit Controller(const score::DocumentContext& document, Scenario::IntervalModel& interval, diff --git a/Hardware/DocumentPlugin.cpp b/Hardware/DocumentPlugin.cpp index c6266e9..69a57c7 100644 --- a/Hardware/DocumentPlugin.cpp +++ b/Hardware/DocumentPlugin.cpp @@ -27,8 +27,7 @@ DocumentPlugin::DocumentPlugin(const score::DocumentContext& doc, QObject* paren , ctrlr{nullptr} { auto& set = m_context.app.settings(); - QString d = set.getDevice(); - if (d != "None") create(d); + create(set.getDevice()); con(set, &Settings::Model::DeviceChanged, @@ -47,6 +46,7 @@ void DocumentPlugin::on_documentClosing() void DocumentPlugin::create(const QString& device_name) { if (ctrlr) cleanup(); + if (device_name == "None") return; auto& doc = m_context.document.model().modelDelegate(); auto scenar = safe_cast(&doc); diff --git a/Hardware/Widgets/ScenarioWidget.cpp b/Hardware/Widgets/ScenarioWidget.cpp index 074a74b..904f20d 100644 --- a/Hardware/Widgets/ScenarioWidget.cpp +++ b/Hardware/Widgets/ScenarioWidget.cpp @@ -15,7 +15,8 @@ ScenarioWidget::ScenarioWidget(Scenario::ProcessModel* scenario, connect(model, &Scenario::ProcessModel::intervalMoved, - [this] { update(); }); + this, + &ScenarioWidget::on_interval_changed); for(Scenario::IntervalModel& i : model->intervals) add_widget(i, this); @@ -27,6 +28,14 @@ ScenarioWidget::ScenarioWidget(Scenario::ProcessModel* scenario, add_widget(t, this); } +ScenarioWidget::~ScenarioWidget() +{ + disconnect(model, + &Scenario::ProcessModel::intervalMoved, + this, + &ScenarioWidget::on_interval_changed); +} + int ScenarioWidget::x() const { return bugui::base_widget::parent->x(); @@ -67,7 +76,7 @@ void ScenarioWidget::on_interval_removed(const Scenario::IntervalModel& interval update(); } -void ScenarioWidget::on_interval_changed(const Scenario::IntervalModel&) +void ScenarioWidget::on_interval_changed(const Scenario::IntervalModel*) { update(); } diff --git a/Hardware/Widgets/ScenarioWidget.hpp b/Hardware/Widgets/ScenarioWidget.hpp index 59a670e..c0ea348 100644 --- a/Hardware/Widgets/ScenarioWidget.hpp +++ b/Hardware/Widgets/ScenarioWidget.hpp @@ -10,8 +10,8 @@ namespace Hardware { class ScenarioWidget final : public bugui::container_widget - , public QObject , public Nano::Observer + , public QObject { W_OBJECT(ScenarioWidget) @@ -19,6 +19,8 @@ public: explicit ScenarioWidget(Scenario::ProcessModel* scenario, bugui::container_widget* parent); + ~ScenarioWidget() override; + int x() const override; int y() const override; int width() const override; @@ -29,7 +31,7 @@ public: private: void on_interval_added(Scenario::IntervalModel& interval); void on_interval_removed(const Scenario::IntervalModel& interval); - void on_interval_changed(const Scenario::IntervalModel&); + void on_interval_changed(const Scenario::IntervalModel*); void on_time_sync_added(Scenario::TimeSyncModel& timeSync); void on_time_sync_removed(const Scenario::TimeSyncModel& timeSync);