score-plugin-media/Media/Step/Inspector.hpp
1 #pragma once
2 #include <Process/Inspector/ProcessInspectorWidgetDelegate.hpp>
3 #include <Process/Inspector/ProcessInspectorWidgetDelegateFactory.hpp>
4 
5 #include <Media/Step/Commands.hpp>
6 #include <Media/Step/Model.hpp>
7 
8 #include <score/command/Dispatchers/OngoingCommandDispatcher.hpp>
9 #include <score/document/DocumentContext.hpp>
10 #include <score/widgets/DoubleSlider.hpp>
11 #include <score/widgets/SignalUtils.hpp>
12 
13 #include <QFormLayout>
14 #include <QSpinBox>
15 
16 namespace Media
17 {
18 namespace Step
19 {
21 {
22 public:
23  explicit InspectorWidget(
24  const Model& obj, const score::DocumentContext& doc, QWidget* parent)
25  : InspectorWidgetDelegate_T{obj, parent}
26  , m_dispatcher{doc.dispatcher}
27  , m_count{this}
28  , m_dur{this}
29  , m_min{this}
30  , m_max{this}
31  {
32  m_min.setRange(-100000, 100000);
33  m_max.setRange(-100000, 100000);
34  m_count.setRange(1, 24);
35  m_dur.setRange(1, 1000000);
36  m_count.setValue(obj.stepCount());
37  m_dur.setValue(obj.stepDuration());
38  m_min.setValue(obj.min());
39  m_max.setValue(obj.max());
40 
41  auto lay = new QFormLayout{this};
42 
43  con(process(), &Model::stepCountChanged, this,
44  [&] { m_count.setValue(obj.stepCount()); });
45  con(process(), &Model::stepDurationChanged, this,
46  [&] { m_dur.setValue(obj.stepDuration()); });
47  con(process(), &Model::minChanged, this, [&] { m_min.setValue(obj.min()); });
48  con(process(), &Model::maxChanged, this, [&] { m_max.setValue(obj.max()); });
49 
50  con(m_count, &QSpinBox::editingFinished, this, [&]() {
51  m_dispatcher.submit<SetStepCount>(obj, m_count.value());
52  m_dispatcher.commit();
53  });
54  con(m_dur, &QSpinBox::editingFinished, this, [&]() {
55  m_dispatcher.submit<SetStepDuration>(obj, m_dur.value());
56  m_dispatcher.commit();
57  });
58  con(m_min, &QDoubleSpinBox::editingFinished, this, [&]() {
59  m_dispatcher.submit<SetMin>(obj, m_min.value());
60  m_dispatcher.commit();
61  });
62  con(m_max, &QDoubleSpinBox::editingFinished, this, [&]() {
63  m_dispatcher.submit<SetMax>(obj, m_max.value());
64  m_dispatcher.commit();
65  });
66 
67  lay->addRow(tr("Count"), &m_count);
68  lay->addRow(tr("Duration (samples)"), &m_dur);
69  lay->addRow(tr("Min"), &m_min);
70  lay->addRow(tr("Max"), &m_max);
71  }
72 
73 private:
74  OngoingCommandDispatcher& m_dispatcher;
75 
76  QSpinBox m_count;
77  QSpinBox m_dur;
78  QDoubleSpinBox m_min;
79  QDoubleSpinBox m_max;
80 };
81 class InspectorFactory final
82  : public Process::InspectorWidgetDelegateFactory_T<Model, InspectorWidget>
83 {
84  SCORE_CONCRETE("a7c0ecb5-70a1-476c-8187-075076e413d2")
85 };
86 }
87 }
Definition: plugins/score-plugin-media/Media/Step/commands.hpp:83
Definition: plugins/score-plugin-media/Media/Step/commands.hpp:73
Definition: plugins/score-plugin-media/Media/Step/commands.hpp:53
Definition: plugins/score-plugin-media/Media/Step/commands.hpp:62
Definition: score-plugin-media/Media/Step/Inspector.hpp:83
Definition: score-plugin-media/Media/Step/Inspector.hpp:21
Definition: score-plugin-media/Media/Step/Model.hpp:23
The OngoingCommandDispatcher class.
Definition: OngoingCommandDispatcher.hpp:27
void submit(Args &&... args)
Definition: OngoingCommandDispatcher.hpp:37
void commit()
Definition: OngoingCommandDispatcher.hpp:61
Definition: ProcessInspectorWidgetDelegate.hpp:13
Definition: ProcessInspectorWidgetDelegateFactory.hpp:53
Definition: DocumentContext.hpp:18