26 : InspectorWidgetDelegate_T{obj, parent}
27 , m_dispatcher{doc.dispatcher}
33 m_duration.setRange(4, 32);
34 m_rate.setRange(1, 64);
35 m_channel.setRange(1, 16);
36 m_lanes.setRange(1, 127);
38 m_channel.setValue(obj.channel());
40 if(!ossia::valid_index(obj.currentPattern(), obj.patterns()))
42 const Pattern& pat = obj.patterns()[obj.currentPattern()];
43 m_lanes.setValue(pat.lanes.size());
44 m_duration.setValue(pat.length);
45 m_rate.setValue(pat.division);
47 auto lay =
new QFormLayout{
this};
49 con(process(), &ProcessModel::channelChanged,
this, [&](
int c) {
50 if(c != m_channel.value())
51 m_channel.setValue(c);
53 con(process(), &ProcessModel::currentPatternChanged,
this, [&](
int c) {
54 const Pattern& pat = obj.patterns()[c];
55 m_lanes.blockSignals(
true);
56 m_duration.blockSignals(
true);
57 m_rate.blockSignals(
true);
59 m_lanes.setValue(pat.lanes.size());
60 m_duration.setValue(pat.length);
61 m_rate.setValue(pat.division);
63 m_lanes.blockSignals(
false);
64 m_duration.blockSignals(
false);
65 m_rate.blockSignals(
false);
67 con(process(), &ProcessModel::patternsChanged,
this, [&] {
68 if(!ossia::valid_index(obj.currentPattern(), obj.patterns()))
71 const Pattern& pat = obj.patterns()[obj.currentPattern()];
72 m_lanes.blockSignals(
true);
73 m_duration.blockSignals(
true);
74 m_rate.blockSignals(
true);
76 m_lanes.setValue(pat.lanes.size());
77 m_duration.setValue(pat.length);
78 m_rate.setValue(pat.division);
80 m_lanes.blockSignals(
false);
81 m_duration.blockSignals(
false);
82 m_rate.blockSignals(
false);
85 con(m_channel, qOverload<int>(&QSpinBox::valueChanged),
this, [&](
int v) {
86 if(v != obj.channel())
87 m_dispatcher.
submit<SetPatternChannel>(obj, v);
89 con(m_channel, &QSpinBox::editingFinished,
this, [&] { m_dispatcher.
commit(); });
91 con(m_lanes, qOverload<int>(&QSpinBox::valueChanged),
this, [&](
int nn) {
95 if(!ossia::valid_index(obj.currentPattern(), obj.patterns()))
98 const std::size_t n = nn;
100 auto p = obj.patterns()[obj.currentPattern()];
101 if(n == p.lanes.size())
105 else if(n < p.lanes.size())
111 auto last_lane = p.lanes.back();
112 while(p.lanes.size() < n)
113 p.lanes.push_back(last_lane);
119 con(m_lanes, &QSpinBox::editingFinished,
this, [&]() { m_dispatcher.
commit(); });
121 con(m_duration, qOverload<int>(&QSpinBox::valueChanged),
this, [&]() {
122 int n = m_duration.value();
126 auto p = obj.patterns()[obj.currentPattern()];
131 if(p.length > int64_t(p.lanes[0].pattern.size()))
133 for(
auto& lane : p.lanes)
135 lane.pattern.resize(n);
141 con(m_duration, &QSpinBox::editingFinished,
this, [&]() { m_dispatcher.
commit(); });
143 con(m_rate, &QDoubleSpinBox::editingFinished,
this, [&] {
144 auto p = obj.patterns()[obj.currentPattern()];
145 if(p.division != m_rate.value())
146 p.division = m_rate.value();
151 lay->addRow(tr(
"Channel"), &m_channel);
152 lay->addRow(tr(
"Lanes"), &m_lanes);
153 lay->addRow(tr(
"Steps"), &m_duration);
154 lay->addRow(tr(
"Rate"), &m_rate);
163 QDoubleSpinBox m_rate;
Definition DocumentContext.hpp:18