2 #include <Gui/RaGui.hpp>
3 #include <Gui/Widgets/QtTypeWrapper.hpp>
18 class RA_GUI_API VectorEditorSignals :
public QWidget
22 explicit VectorEditorSignals( QWidget* parent =
nullptr ) : QWidget( parent ) {}
24 void valueChanged(
const std::vector<int>& );
25 void valueChanged(
const std::vector<unsigned int>& );
26 void valueChanged(
const std::vector<float>& );
27 void valueChanged(
const std::vector<double>& );
32 template <
typename T = Scalar>
36 using WidgetType =
typename QtSpinBox::getType<T>::Type;
37 using SignalType =
typename QtSpinBox::getType<T>::SignalType;
51 const std::vector<T>&
vector()
const;
54 std::vector<T> m_vector;
59 VectorEditorSignals( parent ), m_vector( vector ) {
61 QVBoxLayout* layout =
new QVBoxLayout;
63 layout->setContentsMargins( 0, 0, 0, 0 );
64 layout->setSpacing( 0 );
65 for (
auto& elem : m_vector ) {
66 auto spinbox =
new WidgetType(
this );
67 spinbox->setMinimum( std::numeric_limits<T>::lowest() );
68 spinbox->setMaximum( std::numeric_limits<T>::max() );
69 spinbox->setValue( elem );
70 if constexpr ( std::is_floating_point_v<T> ) { spinbox->setDecimals( 3 ); }
71 layout->addWidget( spinbox );
72 auto updateVectorOnChange = [
this, &elem]( SignalType value ) {
74 emit valueChanged( m_vector );
77 spinbox, QOverload<SignalType>::of( &WidgetType::valueChanged ), updateVectorOnChange );