71 using score::QGraphicsSlider::QGraphicsSlider;
73 double getMin()
const noexcept {
return this->min; }
74 double getMax()
const noexcept {
return this->max; }
75 double unmap(
double v)
const noexcept
79 double map(
double v)
const noexcept
85 void paint(QPainter* painter,
const QStyleOptionGraphicsItem* option, QWidget* widget)
88 score::DefaultGraphicsSliderImpl::paint(
89 *
this, score::Skin::instance(), QString::number(map(m_value),
'f', 3), painter,
93 void mousePressEvent(QGraphicsSceneMouseEvent* event)
override
95 score::DefaultGraphicsSliderImpl::mousePressEvent(*
this, event);
98 void mouseMoveEvent(QGraphicsSceneMouseEvent* event)
override
100 score::DefaultGraphicsSliderImpl::mouseMoveEvent(*
this, event);
103 void mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
override
105 score::DefaultGraphicsSliderImpl::mouseReleaseEvent(*
this, event);
108 void contextMenuEvent(QGraphicsSceneContextMenuEvent* event)
override
118 using score::QGraphicsKnob::QGraphicsKnob;
120 double getMin()
const noexcept {
return this->min; }
121 double getMax()
const noexcept {
return this->max; }
122 double unmap(
double v)
const noexcept
126 double map(
double v)
const noexcept
132 void paint(QPainter* painter,
const QStyleOptionGraphicsItem* option, QWidget* widget)
135 const double val = map(m_value);
136 const double abs = std::abs(val);
137 int pres = abs < 10. ? 3 : abs < 100. ? 2 : abs < 1000. ? 1 : 0;
138 score::DefaultGraphicsKnobImpl::paint(
139 *
this, score::Skin::instance(), QString::number(val,
'f', pres), painter,
143 void mousePressEvent(QGraphicsSceneMouseEvent* event)
override
145 score::DefaultGraphicsKnobImpl::mousePressEvent(*
this, event);
148 void mouseMoveEvent(QGraphicsSceneMouseEvent* event)
override
150 score::DefaultGraphicsKnobImpl::mouseMoveEvent(*
this, event);
153 void mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
override
155 score::DefaultGraphicsKnobImpl::mouseReleaseEvent(*
this, event);
158 void contextMenuEvent(QGraphicsSceneContextMenuEvent* event)
override
238 return Process::DefaultControlLayouts::spinbox();
241 template <
typename T>
242 static auto make_widget(
245 auto sl =
new QSpinBox{parent};
246 WidgetFactory::bindIntDomain(inlet, inlet, *sl);
247 sl->setValue(ossia::convert<int>(inlet.value()));
248 sl->setContentsMargins(0, 0, 0, 0);
250 sl->setKeyboardTracking(
false);
253 sl, SignalUtils::QSpinBox_valueChanged_int(), context,
254 [&inlet, &ctx](
int val) { submitControllerValue(inlet, val, ctx); });
256 QObject::connect(&inlet, &T::valueChanged, sl, [sl](
const ossia::value& val) {
257 const int v = ossia::convert<int>(val);
260 QSignalBlocker b{sl};
268 template <
typename T,
typename Control_T>
269 static QGraphicsItem* make_item(
271 QGraphicsItem* parent, QObject* context)
274 WidgetFactory::initWidgetProperties(inlet, *sl);
275 WidgetFactory::bindIntDomain(slider, inlet, *sl);
276 sl->setValue(ossia::convert<int>(inlet.value()));
278 if(inlet.noValueChangeOnMove)
283 sl, &score::QGraphicsIntSpinbox::sliderMoved, context,
284 [sl, &inlet, &ctx] { submitControllerValue(inlet, sl->value(), ctx); });
289 sl, &score::QGraphicsIntSpinbox::sliderMoved, context, [=, &inlet, &ctx] {
292 inlet, sl->value(), ctx);
295 sl, &score::QGraphicsIntSpinbox::sliderReleased, context, [&ctx, sl]() {
296 ctx.dispatcher.commit();
301 QObject::connect(&inlet, &Control_T::valueChanged, sl, [=](
const ossia::value& val) {
303 sl->setValue(ossia::convert<int>(val));
307 &inlet, &Control_T::executionValueChanged, sl, [=](
const ossia::value& val) {
309 sl->setExecutionValue(ossia::convert<int>(val));
312 &inlet, &Control_T::executionReset, sl,
313 &score::QGraphicsIntSpinbox::resetExecution);
323 return Process::DefaultControlLayouts::lineedit();
326 template <
typename T>
327 static auto make_widget(
330 auto sl =
new QLineEdit{parent};
331 sl->setText(QString::fromStdString(ossia::convert<std::string>(inlet.value())));
332 sl->setContentsMargins(0, 0, 0, 0);
333 sl->setMaximumWidth(70);
334 QObject::connect(sl, &QLineEdit::editingFinished, context, [sl, &inlet, &ctx]() {
335 submitControllerValue(inlet, sl->text().toStdString(), ctx);
338 QObject::connect(&inlet, &T::valueChanged, sl, [sl](
const ossia::value& val) {
339 const auto str = QString::fromStdString(ossia::convert<std::string>(val));
340 if(sl->text() != str)
347 template <
typename T,
typename Control_T>
350 QGraphicsItem* parent, QObject* context)
353 WidgetFactory::initWidgetProperties(inlet, *sl);
354 sl->setTextWidth(180.);
355 sl->setDefaultTextColor(QColor{
"#E0B01E"});
356 sl->setCursor(Qt::IBeamCursor);
358 sl->setPlainText(QString::fromStdString(ossia::convert<std::string>(inlet.value())));
360 auto doc = sl->document();
361 auto on_edit = [doc, &inlet, &ctx] {
362 submitControllerValue(inlet, doc->toPlainText().toStdString(), ctx);
365 if(!inlet.noValueChangeOnMove)
367 QObject::connect(doc, &QTextDocument::contentsChanged, context, on_edit);
371 QObject::connect(sl, &score::QGraphicsLineEdit::editingFinished, context, on_edit);
377 sl, &score::QGraphicsLineEdit::sizeChanged, obj,
378 &score::ResizeableItem::childrenSizeChanged);
381 QObject::connect(&inlet, &Control_T::valueChanged, sl, [=](
const ossia::value& val) {
382 auto str = QString::fromStdString(ossia::convert<std::string>(val));
383 if(str != doc->toPlainText())
384 doc->setPlainText(str);
395 return Process::DefaultControlLayouts::lineedit();
398 template <
typename T>
399 static auto make_widget(
403 editor->setValue(inlet.value());
404 editor->on_edited = [&inlet, &ctx](ossia::value value) {
407 submitControllerValue(inlet, std::move(value), ctx);
410 &inlet, &T::valueChanged, editor,
411 [editor](
const ossia::value& value) { editor->setValue(value); });
415 template <
typename T,
typename Control_T>
416 static auto make_item(
418 QGraphicsItem* parent, QObject* context)
420 auto proxy =
new QGraphicsProxyWidget{parent};
421 proxy->setWidget(make_widget(inlet, ctx,
nullptr, context));
430 CustomGenericControl<Process::MultiSlider, Node, Field, avnd::field_index<N>>,
439 CustomGenericControl<Process::IntSpinBox, Node, Field, avnd::field_index<N>>,
448 CustomGenericControl<Process::LineEdit, Node, Field, avnd::field_index<N>>,