20#include <QInputDialog>
25#include "moc_qgsprocessingmatrixmodelerwidget.cpp"
29QgsProcessingMatrixModelerWidget::QgsProcessingMatrixModelerWidget( QWidget *parent )
34 mModel =
new QStandardItemModel(
this );
35 mModel->appendColumn( QList<QStandardItem *>() <<
new QStandardItem(
'0' ) );
36 mTableView->setModel( mModel );
38 connect( mButtonAddColumn, &QToolButton::clicked,
this, &QgsProcessingMatrixModelerWidget::addColumn );
39 connect( mButtonRemoveColumn, &QToolButton::clicked,
this, &QgsProcessingMatrixModelerWidget::removeColumns );
40 connect( mButtonAddRow, &QToolButton::clicked,
this, &QgsProcessingMatrixModelerWidget::addRow );
41 connect( mButtonRemoveRow, &QToolButton::clicked,
this, &QgsProcessingMatrixModelerWidget::removeRows );
42 connect( mButtonClear, &QToolButton::clicked,
this, &QgsProcessingMatrixModelerWidget::clearTable );
43 connect( mTableView->horizontalHeader(), &QHeaderView::sectionDoubleClicked,
this, &QgsProcessingMatrixModelerWidget::changeHeader );
46void QgsProcessingMatrixModelerWidget::addColumn()
48 QList<QStandardItem *> items;
49 for (
int i = 0; i < mModel->rowCount(); ++i )
50 items <<
new QStandardItem(
'0' );
52 mModel->appendColumn( items );
57void QgsProcessingMatrixModelerWidget::removeColumns()
59 QModelIndexList selected = mTableView->selectionModel()->selectedColumns();
60 std::sort( selected.begin(), selected.end(), [](
const QModelIndex &a,
const QModelIndex &b ) { return b < a; } );
62 mTableView->setUpdatesEnabled(
false );
63 for ( QModelIndex i : std::as_const( selected ) )
64 mModel->removeColumns( i.column(), 1 );
66 mTableView->setUpdatesEnabled(
true );
71void QgsProcessingMatrixModelerWidget::addRow()
73 QList<QStandardItem *> items;
74 for (
int i = 0; i < mModel->columnCount(); ++i )
75 items <<
new QStandardItem(
'0' );
77 mModel->appendRow( items );
82void QgsProcessingMatrixModelerWidget::removeRows()
84 QModelIndexList selected = mTableView->selectionModel()->selectedRows();
85 std::sort( selected.begin(), selected.end(), [](
const QModelIndex &a,
const QModelIndex &b ) { return b < a; } );
87 mTableView->setUpdatesEnabled(
false );
88 for ( QModelIndex i : std::as_const( selected ) )
89 mModel->removeRows( i.row(), 1 );
91 mTableView->setUpdatesEnabled(
true );
96void QgsProcessingMatrixModelerWidget::clearTable()
98 if ( QMessageBox::question(
nullptr, tr(
"Clear table" ), tr(
"Are you sure you want to clear table?" ), QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) == QMessageBox::Yes )
105void QgsProcessingMatrixModelerWidget::changeHeader(
int index )
108 QString text = QInputDialog::getText(
nullptr, tr(
"Enter column name" ), tr(
"Column name" ), QLineEdit::Normal, QString(), &ok );
109 if ( ok && !text.isEmpty() )
111 mModel->setHeaderData( index, Qt::Horizontal, text );
116QStringList QgsProcessingMatrixModelerWidget::headers()
const
119 for (
int i = 0; i < mModel->columnCount(); ++i )
121 headers << mModel->headerData( i, Qt::Horizontal ).toString();
126QVariant QgsProcessingMatrixModelerWidget::value()
const
128 QVariantList defaults;
129 const int cols = mModel->columnCount();
130 const int rows = mModel->rowCount();
132 for (
int row = 0; row < rows; ++row )
134 for (
int col = 0; col < cols; ++col )
136 defaults << mModel->item( row, col )->text();
140 QVariant val( defaults );
144void QgsProcessingMatrixModelerWidget::setValue(
const QStringList &headers,
const QVariant &defaultValue )
146 QVariantList contents = defaultValue.toList();
148 const int cols = headers.count();
149 const int rows = contents.count() / cols;
151 mModel->setRowCount( rows );
152 mModel->setColumnCount( cols );
153 mModel->setHorizontalHeaderLabels( headers );
155 for (
int row = 0; row < rows; ++row )
157 for (
int col = 0; col < cols; ++col )
159 QStandardItem *item =
new QStandardItem( contents.at( row * cols + col ).toString() );
160 mModel->setItem( row, col, item );
163 mTableView->setModel( mModel );
167bool QgsProcessingMatrixModelerWidget::fixedRows()
const
169 return mFixedRows->isChecked();
172void QgsProcessingMatrixModelerWidget::setFixedRows(
bool fixedRows )
174 mFixedRows->setChecked( fixedRows );