[QObject] potentially fixed bugui/issues/7

This commit is contained in:
thibaud keller 2025-01-12 13:01:37 +00:00
parent ab1d9f0594
commit aa25f22053
6 changed files with 18 additions and 13 deletions

@ -1 +1 @@
Subproject commit 995dc6e2b40dae91b0782dba7f9ce712fec10b53 Subproject commit 9e937d4c88c835428ec30373f8a866854555b3ee

View file

@ -118,6 +118,3 @@ void Controller::on_right(bool pressed)
} }
} // namespace hardware } // namespace hardware
#include <wobjectimpl.h>
W_OBJECT_IMPL(Hardware::Controller)

View file

@ -12,10 +12,7 @@ namespace Hardware
{ {
class SCORE_ADDON_HARDWARE_EXPORT Controller final class SCORE_ADDON_HARDWARE_EXPORT Controller final
: public bugui::controller<Controller> : public bugui::controller<Controller>
, public QObject
{ {
W_OBJECT(Controller)
public: public:
explicit Controller(const score::DocumentContext& document, explicit Controller(const score::DocumentContext& document,
Scenario::IntervalModel& interval, Scenario::IntervalModel& interval,

View file

@ -27,8 +27,7 @@ DocumentPlugin::DocumentPlugin(const score::DocumentContext& doc, QObject* paren
, ctrlr{nullptr} , ctrlr{nullptr}
{ {
auto& set = m_context.app.settings<Settings::Model>(); auto& set = m_context.app.settings<Settings::Model>();
QString d = set.getDevice(); create(set.getDevice());
if (d != "None") create(d);
con(set, con(set,
&Settings::Model::DeviceChanged, &Settings::Model::DeviceChanged,
@ -47,6 +46,7 @@ void DocumentPlugin::on_documentClosing()
void DocumentPlugin::create(const QString& device_name) void DocumentPlugin::create(const QString& device_name)
{ {
if (ctrlr) cleanup(); if (ctrlr) cleanup();
if (device_name == "None") return;
auto& doc = m_context.document.model().modelDelegate(); auto& doc = m_context.document.model().modelDelegate();
auto scenar = safe_cast<Scenario::ScenarioDocumentModel*>(&doc); auto scenar = safe_cast<Scenario::ScenarioDocumentModel*>(&doc);

View file

@ -15,7 +15,8 @@ ScenarioWidget::ScenarioWidget(Scenario::ProcessModel* scenario,
connect(model, connect(model,
&Scenario::ProcessModel::intervalMoved, &Scenario::ProcessModel::intervalMoved,
[this] { update(); }); this,
&ScenarioWidget::on_interval_changed);
for(Scenario::IntervalModel& i : model->intervals) for(Scenario::IntervalModel& i : model->intervals)
add_widget<IntervalWidget>(i, this); add_widget<IntervalWidget>(i, this);
@ -27,6 +28,14 @@ ScenarioWidget::ScenarioWidget(Scenario::ProcessModel* scenario,
add_widget<TimeSyncWidget>(t, this); add_widget<TimeSyncWidget>(t, this);
} }
ScenarioWidget::~ScenarioWidget()
{
disconnect(model,
&Scenario::ProcessModel::intervalMoved,
this,
&ScenarioWidget::on_interval_changed);
}
int ScenarioWidget::x() const int ScenarioWidget::x() const
{ {
return bugui::base_widget::parent->x(); return bugui::base_widget::parent->x();
@ -67,7 +76,7 @@ void ScenarioWidget::on_interval_removed(const Scenario::IntervalModel& interval
update(); update();
} }
void ScenarioWidget::on_interval_changed(const Scenario::IntervalModel&) void ScenarioWidget::on_interval_changed(const Scenario::IntervalModel*)
{ {
update(); update();
} }

View file

@ -10,8 +10,8 @@ namespace Hardware
{ {
class ScenarioWidget final class ScenarioWidget final
: public bugui::container_widget : public bugui::container_widget
, public QObject
, public Nano::Observer , public Nano::Observer
, public QObject
{ {
W_OBJECT(ScenarioWidget) W_OBJECT(ScenarioWidget)
@ -19,6 +19,8 @@ public:
explicit ScenarioWidget(Scenario::ProcessModel* scenario, explicit ScenarioWidget(Scenario::ProcessModel* scenario,
bugui::container_widget* parent); bugui::container_widget* parent);
~ScenarioWidget() override;
int x() const override; int x() const override;
int y() const override; int y() const override;
int width() const override; int width() const override;
@ -29,7 +31,7 @@ public:
private: private:
void on_interval_added(Scenario::IntervalModel& interval); void on_interval_added(Scenario::IntervalModel& interval);
void on_interval_removed(const 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_added(Scenario::TimeSyncModel& timeSync);
void on_time_sync_removed(const Scenario::TimeSyncModel& timeSync); void on_time_sync_removed(const Scenario::TimeSyncModel& timeSync);