#include #include #include #include #include "Controller.hpp" namespace Hardware { Controller::Controller(const score::DocumentContext& doc) : bugui::controller{[&doc, this] (bugui::commands com, bool shift) { switch (com) { case bugui::Play: if (shift) doc.app.actions.action().action()->trigger(); else doc.app.actions.action().action()->trigger(); break; case bugui::Stop: if (shift) doc.app.actions.action().action()->trigger(); else doc.app.actions.action().action()->trigger(); break; case bugui::Up: if (shift) { v_zoom += .2; update(); } else { v_ofset += .02; update(); } break; case bugui::Down: if (shift) { if (v_zoom > .2) { v_zoom -= .2; update(); } } else { v_ofset -= .02; update(); } break; case bugui::Left: if (shift) { if (h_zoom > .02) { h_zoom -= .02; update(); } } else { if (h_ofset > 0) { h_ofset -= .02; update(); } } break; case bugui::Right: if (shift) { h_zoom += .02; update(); } else { h_ofset += .02; update(); } break; default: break; } // qDebug() << "v_ofset: " << v_ofset; // qDebug() << "v_zoom: " << v_zoom; // qDebug() << "h_ofset: " << h_ofset; // qDebug() << "h_zoom: " << h_ofset; } } {} 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); connect(scenar, &Scenario::ProcessModel::intervalMoved, [this] { update(); }); } void Controller::on_interval_changed(const Scenario::IntervalModel&) { update(); } void Controller::paint(bugui::painter& painter) { 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 def = c.duration.defaultDuration().sec() * h_zoom; auto st = (c.date().sec() * h_zoom) - h_ofset; auto y = (c.heightPercentage() * v_zoom) + v_ofset; painter.draw_line({st, y}, {st + def, y}); } } } #include W_OBJECT_IMPL(Hardware::Controller)