Loading...
Searching...
No Matches
plugins/score-plugin-media/Media/Step/Presenter.hpp
1#pragma once
2#include <Process/Focus/FocusDispatcher.hpp>
3#include <Process/LayerPresenter.hpp>
4
5#include <Audio/Settings/Model.hpp>
6#include <Media/Step/Commands.hpp>
7#include <Media/Step/View.hpp>
8
9#include <score/application/GUIApplicationContext.hpp>
10#include <score/command/Dispatchers/SingleOngoingCommandDispatcher.hpp>
11#include <score/tools/Bind.hpp>
12
13#include <ossia/detail/math.hpp>
14namespace Media
15{
16namespace Step
17{
18class Model;
20{
21public:
22 explicit Presenter(
23 const Process::ProcessModel& model, View* view, const Process::Context& ctx,
24 QObject* parent)
25 : LayerPresenter{model, view, ctx, parent}
26 , m_view{view}
27 , m_disp{m_context.context.commandStack}
28 {
29 putToFront();
30 auto& m = static_cast<const Step::Model&>(model);
31
32 connect(view, &View::change, this, [&](std::size_t num, float v) {
33 updateSteps(m, m_disp, num, v);
34 });
35
36 connect(view, &View::released, this, [&] { m_disp.commit(); });
37
38 con(m, &Step::Model::stepsChanged, this, [&] { m_view->update(); });
39 con(m, &Step::Model::stepCountChanged, this, [&] { m_view->update(); });
40 con(m, &Step::Model::stepDurationChanged, this,
41 [&] { on_zoomRatioChanged(m_ratio); });
42
43 auto& audio_settings = context().context.app.settings<Audio::Settings::Model>();
44 con(audio_settings, &Audio::Settings::Model::RateChanged, this,
45 [&] { on_zoomRatioChanged(m_ratio); });
46 }
47
48 void setWidth(qreal width, qreal defaultWidth) override { m_view->setWidth(width); }
49 void setHeight(qreal val) override { m_view->setHeight(val); }
50
51 void putToFront() override { m_view->setVisible(true); }
52
53 void putBehind() override { m_view->setVisible(false); }
54
55 void on_zoomRatioChanged(ZoomRatio r) override
56 {
57 auto samplerate
58 = 0.001 * context().context.app.settings<Audio::Settings::Model>().getRate();
59 m_ratio = r;
60 auto& m = static_cast<const Step::Model&>(m_process);
61 auto v = TimeVal::fromMsecs(m.stepDuration() / samplerate).toPixels(r);
62 m_view->setBarWidth(v);
63 }
64
65 void parentGeometryChanged() override { }
66
67private:
68 View* m_view{};
70 ZoomRatio m_ratio{};
71};
72}
73}
Definition score-plugin-audio/Audio/Settings/Model.hpp:22
Definition score-plugin-media/Media/Step/Model.hpp:23
Definition plugins/score-plugin-media/Media/Step/Presenter.hpp:20
Definition score-plugin-media/Media/Step/View.hpp:23
Definition LayerPresenter.hpp:34
The Process class.
Definition score-lib-process/Process/Process.hpp:61
The SingleOngoingCommandDispatcher class.
Definition SingleOngoingCommandDispatcher.hpp:17
Definition ProcessContext.hpp:12
T & settings() const
Access a specific Settings model instance.
Definition ApplicationContext.hpp:40