[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
|
namespace Hardware
|
||||||
{
|
{
|
||||||
Controller::Controller(const score::DocumentContext& document)
|
Controller::Controller(const score::DocumentContext& document,
|
||||||
|
Scenario::IntervalModel& i)
|
||||||
: bugui::controller<Controller>{}
|
: bugui::controller<Controller>{}
|
||||||
, doc{document}
|
, doc{document}
|
||||||
|
, interval{&i}
|
||||||
, h_ofset{0.} // initial horizontal ofset
|
, h_ofset{0.} // initial horizontal ofset
|
||||||
, v_ofset{0.} // initial verticalal ofset
|
, v_ofset{0.} // initial verticalal ofset
|
||||||
, h_zoom{.125} // initial horizontal zoom
|
, h_zoom{.125} // initial horizontal zoom
|
||||||
, v_zoom{1.1} // initial verticalal zoom
|
, v_zoom{1.1} // initial verticalal zoom
|
||||||
{}
|
|
||||||
|
|
||||||
void Controller::setup_scenario(Scenario::ProcessModel* s)
|
|
||||||
{
|
{
|
||||||
scenar = s;
|
|
||||||
|
|
||||||
// Connet interval signals
|
// Connet interval signals
|
||||||
// adapted from
|
// adapted from
|
||||||
// src/plugins/score-plugin-scenario/Scenario/Process/MiniScenarioView.cpp#18
|
// src/plugins/score-plugin-scenario/Scenario/Process/MiniScenarioView.cpp#18
|
||||||
scenar->intervals.added.connect<&Controller::on_interval_changed>(this);
|
auto scnr = qobject_cast<Scenario::ProcessModel*>(&*i.processes.begin());
|
||||||
scenar->intervals.removed.connect<&Controller::on_interval_changed>(this);
|
|
||||||
|
|
||||||
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,
|
&Scenario::ProcessModel::intervalMoved,
|
||||||
[this] { update(); });
|
[this] { update(); });
|
||||||
|
|
||||||
|
setup();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Controller::on_interval_changed(const Scenario::IntervalModel&)
|
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
|
void Controller::paint(bugui::painter& painter) const
|
||||||
{
|
{
|
||||||
if (!scenar) return;
|
|
||||||
|
|
||||||
// Copied from MiniscenarioView
|
// Copied from MiniscenarioView
|
||||||
auto& skin = Process::Style::instance();
|
auto& skin = Process::Style::instance();
|
||||||
const auto col = skin.IntervalBase().color();
|
const auto col = skin.IntervalBase().color();
|
||||||
painter.set_color(col.red(), col.green(), col.blue(), col.alpha());
|
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 def = c.duration.defaultDuration().sec() * h_zoom;
|
||||||
auto st = (c.date().sec() * h_zoom) - h_ofset;
|
auto st = (c.date().sec() * h_zoom) - h_ofset;
|
||||||
|
|
|
@ -17,9 +17,9 @@ class SCORE_ADDON_HARDWARE_EXPORT Controller
|
||||||
W_OBJECT(Controller)
|
W_OBJECT(Controller)
|
||||||
|
|
||||||
public:
|
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 paint(bugui::painter& painter) const override;
|
||||||
|
|
||||||
void play(bool pressed);
|
void play(bool pressed);
|
||||||
|
@ -33,7 +33,7 @@ public:
|
||||||
private:
|
private:
|
||||||
void on_interval_changed(const Scenario::IntervalModel&);
|
void on_interval_changed(const Scenario::IntervalModel&);
|
||||||
|
|
||||||
Scenario::ProcessModel* scenar;
|
Scenario::IntervalModel* interval;
|
||||||
const score::DocumentContext& doc;
|
const score::DocumentContext& doc;
|
||||||
|
|
||||||
bool m_shift{false};
|
bool m_shift{false};
|
||||||
|
|
|
@ -24,7 +24,7 @@ namespace Hardware
|
||||||
using namespace std::literals;
|
using namespace std::literals;
|
||||||
DocumentPlugin::DocumentPlugin(const score::DocumentContext& doc, QObject* parent)
|
DocumentPlugin::DocumentPlugin(const score::DocumentContext& doc, QObject* parent)
|
||||||
: score::DocumentPlugin{doc, "Hardware::DocumentPlugin", parent}
|
: score::DocumentPlugin{doc, "Hardware::DocumentPlugin", parent}
|
||||||
, ctrlr{doc}
|
, ctrlr{nullptr}
|
||||||
{
|
{
|
||||||
auto& set = m_context.app.settings<Settings::Model>();
|
auto& set = m_context.app.settings<Settings::Model>();
|
||||||
if(set.getEnabled())
|
if(set.getEnabled())
|
||||||
|
@ -32,8 +32,9 @@ DocumentPlugin::DocumentPlugin(const score::DocumentContext& doc, QObject* paren
|
||||||
create();
|
create();
|
||||||
}
|
}
|
||||||
|
|
||||||
con(
|
con(set,
|
||||||
set, &Settings::Model::EnabledChanged, this,
|
&Settings::Model::EnabledChanged,
|
||||||
|
this,
|
||||||
[this] (bool b)
|
[this] (bool b)
|
||||||
{
|
{
|
||||||
if (b)
|
if (b)
|
||||||
|
@ -53,27 +54,20 @@ void DocumentPlugin::on_documentClosing()
|
||||||
|
|
||||||
void DocumentPlugin::create()
|
void DocumentPlugin::create()
|
||||||
{
|
{
|
||||||
if (cstr) cleanup();
|
if (ctrlr) cleanup();
|
||||||
|
|
||||||
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);
|
||||||
cstr = &scenar->baseScenario().interval();
|
auto cstr = &scenar->baseScenario().interval();
|
||||||
|
|
||||||
ctrlr.setup();
|
ctrlr = new Controller{m_context, *cstr};
|
||||||
|
|
||||||
// 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())
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DocumentPlugin::cleanup()
|
void DocumentPlugin::cleanup()
|
||||||
{
|
{
|
||||||
if (!cstr) return;
|
if (!ctrlr) return;
|
||||||
|
|
||||||
cstr = nullptr;
|
delete ctrlr;
|
||||||
|
ctrlr = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,12 +21,10 @@ public:
|
||||||
|
|
||||||
void on_documentClosing() override;
|
void on_documentClosing() override;
|
||||||
|
|
||||||
Controller ctrlr;
|
Controller* ctrlr;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void create();
|
void create();
|
||||||
void cleanup();
|
void cleanup();
|
||||||
|
|
||||||
Scenario::IntervalModel* cstr{nullptr};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue