68 halp::spinbox_i32<
"Log", halp::range{1, max_log, 1}> log;
132 boost::container::devector<ossia::value> values;
137 mutable QString txt_cache;
139 int logging()
const noexcept
141 return std::clamp(ossia::convert<int>(log_inlet->value()), 1, max_log);
146 QGraphicsItem* parent)
149 setAcceptedMouseButtons(Qt::NoButton);
154 auto& value_inlet = *process.inlets()[0];
155 if(
auto* fact = portFactory.
get(value_inlet.concreteKey()))
156 if(
auto* port = fact->makePortItem(value_inlet, doc,
this,
this))
163 out, &Process::ControlOutlet::valueChanged,
this,
164 [
this](
const ossia::value& v) { on_values(v); });
167 log_inlet, &Process::ControlInlet::valueChanged,
this,
168 [
this](
const ossia::value& v) {
169 while(std::ssize(values) > logging())
175 void on_values(
const ossia::value& v)
177 auto* list = v.target<std::vector<ossia::value>>();
178 if(!list || list->size() < 2)
181 const int base = ossia::convert<int>((*list)[0]);
182 const int n = std::ssize(*list) - 1;
185 if(base + n < m_next_seq)
191 for(
int i = 0; i < n; i++)
193 const int seq = base + i;
196 values.push_front((*list)[i + 1]);
197 m_next_seq = seq + 1;
200 while(std::ssize(values) > logging())
213 void paint_impl(QPainter* p)
const override
218 p->setRenderHint(QPainter::Antialiasing,
true);
219 p->setPen(score::Skin::instance().Light.main.pen1_solid_flat_miter);
223 for(
auto& line : this->values)
224 txt_cache += QString::fromStdString(fmt::format(
"{}\n", line));
225 p->drawText(boundingRect().adjusted(10, 0, 0, 0), txt_cache);
228 p->setRenderHint(QPainter::Antialiasing,
false);
234 using Process::EffectLayerPresenter::EffectLayerPresenter;
235 void fillContextMenu(
236 QMenu& menu, QPoint pos, QPointF scenepos,
239 auto cp = menu.addAction(tr(
"Copy value"));
240 connect(cp, &QAction::triggered,
this, [
this] {
241 auto& v = *
static_cast<Layer*
>(this->m_view);
242 qApp->clipboard()->setText(v.txt_cache);