Loading [MathJax]/extensions/TeX/AMSmath.js
Radium Engine  1.6.3
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
MatrixEditor.cpp
1#include <Gui/Widgets/MatrixEditor.hpp>
2
3#include <QDoubleSpinBox>
4#include <QGridLayout>
5#include <QLabel>
6#include <QValidator>
7#include <QWidget>
8
9#include <memory>
10
11namespace Ra::Gui::Widgets {
12
13MatrixEditor::MatrixEditor( const Ra::Core::MatrixN& matrix, int dec, QWidget* parent ) :
14 QWidget( parent ), m_matrix( matrix ) {
15
16 QGridLayout* layout = new QGridLayout;
17 layout->setContentsMargins( {} ); // margins are set to 0, see Qt documentation
18 layout->setSpacing( 0 );
19 for ( long i = 0; i < m_matrix.rows(); ++i ) {
20 for ( int j = 0; j < m_matrix.cols(); ++j ) {
21 auto& elem = m_matrix( i, j );
23 auto spinbox = new QDoubleSpinBox();
24 spinbox->setDecimals( dec );
25 spinbox->setMinimum( std::numeric_limits<Scalar>::lowest() );
26 spinbox->setMaximum( std::numeric_limits<Scalar>::max() );
27 spinbox->setValue( elem );
28 layout->addWidget( spinbox, i, j );
29 auto updateMatrixOnChange = [this, &elem]( double value ) {
30 elem = value;
31 emit valueChanged( m_matrix );
32 };
33 connect( spinbox,
34 QOverload<double>::of( &QDoubleSpinBox::valueChanged ),
35 updateMatrixOnChange );
36 }
37 }
38
39 setLayout( layout );
40}
41
42const Ra::Core::MatrixN& MatrixEditor::matrix() const {
43 return m_matrix;
44}
45
46} // namespace Ra::Gui::Widgets
const Ra::Core::MatrixN & matrix() const
Get the edited matrix.
MatrixEditor(const Ra::Core::MatrixN &matrix, int dec, QWidget *parent=nullptr)