From b4a498aa20ddf7bfed78b3d43914916aa699e4b0 Mon Sep 17 00:00:00 2001 From: thibaudk Date: Mon, 9 Dec 2024 13:33:58 +0000 Subject: [PATCH] [Controller] pass interval from documentPlugin without storing it --- Hardware/3rdparty/bugui | 2 +- Hardware/Controller.cpp | 25 +++++++++++++------------ Hardware/Controller.hpp | 6 +++--- Hardware/DocumentPlugin.cpp | 28 +++++++++++----------------- Hardware/DocumentPlugin.hpp | 4 +--- 5 files changed, 29 insertions(+), 36 deletions(-) diff --git a/Hardware/3rdparty/bugui b/Hardware/3rdparty/bugui index 34ec648..b4287d3 160000 --- a/Hardware/3rdparty/bugui +++ b/Hardware/3rdparty/bugui @@ -1 +1 @@ -Subproject commit 34ec6482874d49de63a353160d78af786a7258e6 +Subproject commit b4287d3aa4052cd165c4c783cb433cfffb381689 diff --git a/Hardware/Controller.cpp b/Hardware/Controller.cpp index 2b62b15..484dbd5 100644 --- a/Hardware/Controller.cpp +++ b/Hardware/Controller.cpp @@ -7,28 +7,29 @@ namespace Hardware { -Controller::Controller(const score::DocumentContext& document) +Controller::Controller(const score::DocumentContext& document, + Scenario::IntervalModel& i) : bugui::controller{} , doc{document} + , interval{&i} , h_ofset{0.} // initial horizontal ofset , v_ofset{0.} // initial verticalal ofset , h_zoom{.125} // initial horizontal zoom , v_zoom{1.1} // initial verticalal zoom -{} - -void Controller::setup_scenario(Scenario::ProcessModel* s) { - scenar = s; - // Connet interval signals // adapted from // src/plugins/score-plugin-scenario/Scenario/Process/MiniScenarioView.cpp#18 - scenar->intervals.added.connect<&Controller::on_interval_changed>(this); - scenar->intervals.removed.connect<&Controller::on_interval_changed>(this); + auto scnr = qobject_cast(&*i.processes.begin()); - connect(scenar, + scnr->intervals.added.connect<&Controller::on_interval_changed>(this); + scnr->intervals.removed.connect<&Controller::on_interval_changed>(this); + + connect(scnr, &Scenario::ProcessModel::intervalMoved, [this] { update(); }); + + setup(); } void Controller::on_interval_changed(const Scenario::IntervalModel&) @@ -38,14 +39,14 @@ void Controller::on_interval_changed(const Scenario::IntervalModel&) void Controller::paint(bugui::painter& painter) const { - if (!scenar) return; - // Copied from MiniscenarioView auto& skin = Process::Style::instance(); const auto col = skin.IntervalBase().color(); painter.set_color(col.red(), col.green(), col.blue(), col.alpha()); - for(const Scenario::IntervalModel& c : scenar->intervals) + auto scnr = qobject_cast(&*interval->processes.begin()); + + for(const Scenario::IntervalModel& c : scnr->intervals) { auto def = c.duration.defaultDuration().sec() * h_zoom; auto st = (c.date().sec() * h_zoom) - h_ofset; diff --git a/Hardware/Controller.hpp b/Hardware/Controller.hpp index 1f7b3fe..bb9900a 100644 --- a/Hardware/Controller.hpp +++ b/Hardware/Controller.hpp @@ -17,9 +17,9 @@ class SCORE_ADDON_HARDWARE_EXPORT Controller W_OBJECT(Controller) public: - explicit Controller(const score::DocumentContext& document); + explicit Controller(const score::DocumentContext& document, + Scenario::IntervalModel& s); - void setup_scenario(Scenario::ProcessModel* s); void paint(bugui::painter& painter) const override; void play(bool pressed); @@ -33,7 +33,7 @@ public: private: void on_interval_changed(const Scenario::IntervalModel&); - Scenario::ProcessModel* scenar; + Scenario::IntervalModel* interval; const score::DocumentContext& doc; bool m_shift{false}; diff --git a/Hardware/DocumentPlugin.cpp b/Hardware/DocumentPlugin.cpp index 52809f8..a9242b2 100644 --- a/Hardware/DocumentPlugin.cpp +++ b/Hardware/DocumentPlugin.cpp @@ -24,7 +24,7 @@ namespace Hardware using namespace std::literals; DocumentPlugin::DocumentPlugin(const score::DocumentContext& doc, QObject* parent) : score::DocumentPlugin{doc, "Hardware::DocumentPlugin", parent} - , ctrlr{doc} + , ctrlr{nullptr} { auto& set = m_context.app.settings(); if(set.getEnabled()) @@ -32,9 +32,10 @@ DocumentPlugin::DocumentPlugin(const score::DocumentContext& doc, QObject* paren create(); } - con( - set, &Settings::Model::EnabledChanged, this, - [this](bool b) + con(set, + &Settings::Model::EnabledChanged, + this, + [this] (bool b) { if (b) create(); @@ -53,27 +54,20 @@ void DocumentPlugin::on_documentClosing() void DocumentPlugin::create() { - if (cstr) cleanup(); + if (ctrlr) cleanup(); auto& doc = m_context.document.model().modelDelegate(); auto scenar = safe_cast(&doc); - cstr = &scenar->baseScenario().interval(); + auto cstr = &scenar->baseScenario().interval(); - ctrlr.setup(); - - // Get Scenario::processModel - // adapted from - // src/plugins/score-plugin-scenario/Scenario/Document/ScenarioDocument/ScenarioDocumentModel.cpp#67 - ctrlr.setup_scenario( - qobject_cast( - &*cstr->processes.begin()) - ); + ctrlr = new Controller{m_context, *cstr}; } void DocumentPlugin::cleanup() { - if (!cstr) return; + if (!ctrlr) return; - cstr = nullptr; + delete ctrlr; + ctrlr = nullptr; } } diff --git a/Hardware/DocumentPlugin.hpp b/Hardware/DocumentPlugin.hpp index e7c011b..0610a61 100644 --- a/Hardware/DocumentPlugin.hpp +++ b/Hardware/DocumentPlugin.hpp @@ -21,12 +21,10 @@ public: void on_documentClosing() override; - Controller ctrlr; + Controller* ctrlr; private: void create(); void cleanup(); - - Scenario::IntervalModel* cstr{nullptr}; }; }