Loading...
Searching...
No Matches
LongInputControl.hpp
1#pragma once
2#include <Process/Dataflow/WidgetInlets.hpp>
3
4#include <isf.hpp>
5
6#include <algorithm>
7#include <limits>
8#include <utility>
9#include <vector>
10
11namespace Gfx
12{
24 const isf::long_input& v, const QString& name, Id<Process::Port> id,
25 QObject* parent)
26{
27 if(v.values.empty())
28 {
29 constexpr int64_t lo = std::numeric_limits<int>::lowest();
30 constexpr int64_t hi = std::numeric_limits<int>::max();
31 const int min = (int)std::clamp(v.min.value_or(lo), lo, hi);
32 const int max = (int)std::clamp(v.max.value_or(hi), (int64_t)min, hi);
33 const int def = (int)std::clamp((int64_t)v.def, (int64_t)min, (int64_t)max);
34 return new Process::IntSpinBox(min, max, def, name, id, parent);
35 }
36
37 std::vector<std::pair<QString, ossia::value>> alternatives;
38 const bool labelled = v.labels.size() == v.values.size();
39 for(std::size_t idx = 0; idx < v.values.size(); idx++)
40 {
41 const auto& val = v.values[idx];
42 int value = (int)idx;
43 QString text;
44 if(auto i = ossia::get_if<int64_t>(&val))
45 {
46 value = int(*i);
47 text = QString::number(*i);
48 }
49 else if(auto d = ossia::get_if<double>(&val))
50 {
51 value = int(*d);
52 text = QString::number(*d);
53 }
54 else if(auto s = ossia::get_if<std::string>(&val))
55 {
56 text = QString::fromStdString(*s);
57 }
58 if(labelled)
59 text = QString::fromStdString(v.labels[idx]);
60 alternatives.emplace_back(std::move(text), value);
61 }
62
63 // ComboBox takes the value initially selected; libisf's `def` is the index
64 // into VALUES.
65 const ossia::value init
66 = alternatives[std::min<std::size_t>(v.def, alternatives.size() - 1)].second;
67 return new Process::ComboBox(std::move(alternatives), init, name, id, parent);
68}
69}
Definition Port.hpp:247
The id_base_t class.
Definition Identifier.hpp:59
Binds the rendering pipeline to ossia processes.
Definition AssetTable.cpp:7
Process::ControlInlet * makeLongInputControl(const isf::long_input &v, const QString &name, Id< Process::Port > id, QObject *parent)
The control of an ISF / CSF / geometry-filter long input.
Definition LongInputControl.hpp:23