164 struct : halp::spinbox_i32<
"Log", halp::range{1, max_log, 1}>
252 boost::container::devector<ossia::value> values;
266 static constexpr int flash_step_ms = 50;
267 QElapsedTimer m_flash;
270 int logging() const noexcept
272 return std::clamp(ossia::convert<int>(log_inlet->value()), 1, max_log);
275 Format format() const noexcept
278 ?
static_cast<Format
>(ossia::convert<int>(format_inlet->value()))
285 const auto mode = format();
286 for(
const auto& line : this->values)
291 printHexValue(m_buf, line);
300 m_buf.push_back(
'\n');
302 txt_cache = QString::fromUtf8(m_buf.data(), m_buf.size());
308 QGraphicsItem* parent)
309 :
Process::EffectLayerView{parent}
311 setAcceptedMouseButtons(Qt::NoButton);
316 if(process.inlets().size() > 2)
317 format_inlet = qobject_cast<Process::ControlInlet*>(process.inlets()[2]);
319 m_flashTimer.setInterval(flash_step_ms);
320 connect(&m_flashTimer, &QTimer::timeout,
this, [
this] {
321 if(!m_flash.isValid() || m_flash.elapsed() >
flash_ms)
328 out, &Process::ControlOutlet::valueChanged,
this,
329 [
this](
const ossia::value& v) { on_values(v); });
332 log_inlet, &Process::ControlInlet::valueChanged,
this,
333 [
this](
const ossia::value& v) {
334 while(std::ssize(values) > logging())
341 format_inlet, &Process::ControlInlet::valueChanged,
this,
342 [
this](
const ossia::value&) { rebuildText(); });
345 void on_values(
const ossia::value& v)
347 auto* list = v.target<std::vector<ossia::value>>();
348 if(!list || list->size() < 2)
351 const int base = ossia::convert<int>((*list)[0]);
352 const int n = std::ssize(*list) - 1;
355 if(base + n < m_next_seq)
361 for(
int i = 0; i < n; i++)
363 const int seq = base + i;
366 values.push_front((*list)[i + 1]);
367 m_next_seq = seq + 1;
370 while(std::ssize(values) > logging())
376 m_flashTimer.start();
381 QRectF
flashRect() const noexcept {
return {boundingRect().right() - 8., 2., 6., 6.}; }
386 if(!m_flash.isValid())
388 const auto t = m_flash.elapsed();
399 void paint_impl(QPainter* p)
const override
401 const auto& skin = score::Skin::instance();
402 if(
const double level =
flashLevel(); level > 0.)
404 QColor c = skin.Base4.main.brush.color();
406 p->setRenderHint(QPainter::Antialiasing,
true);
407 p->setPen(Qt::NoPen);
410 p->setRenderHint(QPainter::Antialiasing,
false);
413 if(txt_cache.isEmpty())
416 p->setFont(skin.MonoFontSmall);
417 p->setRenderHint(QPainter::Antialiasing,
true);
418 p->setPen(skin.Light.main.pen1_solid_flat_miter);
420 p->drawText(boundingRect().adjusted(12, 0, -10, 0), txt_cache);
421 p->setRenderHint(QPainter::Antialiasing,
false);