[Controller] pass interval from documentPlugin without storing it
This commit is contained in:
parent
0ed36bfade
commit
b4a498aa20
5 changed files with 29 additions and 36 deletions
2
Hardware/3rdparty/bugui
vendored
2
Hardware/3rdparty/bugui
vendored
|
@ -1 +1 @@
|
|||
Subproject commit 34ec6482874d49de63a353160d78af786a7258e6
|
||||
Subproject commit b4287d3aa4052cd165c4c783cb433cfffb381689
|
|
@ -7,28 +7,29 @@
|
|||
|
||||
namespace Hardware
|
||||
{
|
||||
Controller::Controller(const score::DocumentContext& document)
|
||||
Controller::Controller(const score::DocumentContext& document,
|
||||
Scenario::IntervalModel& i)
|
||||
: bugui::controller<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<Scenario::ProcessModel*>(&*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<Scenario::ProcessModel*>(&*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;
|
||||
|
|
|
@ -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};
|
||||
|
|
|
@ -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<Settings::Model>();
|
||||
if(set.getEnabled())
|
||||
|
@ -32,8 +32,9 @@ DocumentPlugin::DocumentPlugin(const score::DocumentContext& doc, QObject* paren
|
|||
create();
|
||||
}
|
||||
|
||||
con(
|
||||
set, &Settings::Model::EnabledChanged, this,
|
||||
con(set,
|
||||
&Settings::Model::EnabledChanged,
|
||||
this,
|
||||
[this] (bool b)
|
||||
{
|
||||
if (b)
|
||||
|
@ -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<Scenario::ScenarioDocumentModel*>(&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<Scenario::ProcessModel*>(
|
||||
&*cstr->processes.begin())
|
||||
);
|
||||
ctrlr = new Controller{m_context, *cstr};
|
||||
}
|
||||
|
||||
void DocumentPlugin::cleanup()
|
||||
{
|
||||
if (!cstr) return;
|
||||
if (!ctrlr) return;
|
||||
|
||||
cstr = nullptr;
|
||||
delete ctrlr;
|
||||
ctrlr = nullptr;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,12 +21,10 @@ public:
|
|||
|
||||
void on_documentClosing() override;
|
||||
|
||||
Controller ctrlr;
|
||||
Controller* ctrlr;
|
||||
|
||||
private:
|
||||
void create();
|
||||
void cleanup();
|
||||
|
||||
Scenario::IntervalModel* cstr{nullptr};
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue