23#include "moc_qgsprocessingenummodelerwidget.cpp"
27QgsProcessingEnumModelerWidget::QgsProcessingEnumModelerWidget( QWidget *parent )
32 mModel =
new QStandardItemModel(
this );
33 mItemList->setModel( mModel );
34 connect( mModel, &QStandardItemModel::itemChanged,
this, &QgsProcessingEnumModelerWidget::onItemChanged );
36 connect( mButtonAdd, &QToolButton::clicked,
this, &QgsProcessingEnumModelerWidget::addItem );
37 connect( mButtonRemove, &QToolButton::clicked,
this, [
this] { removeItems(
false ); } );
38 connect( mButtonClear, &QToolButton::clicked,
this, [
this] { removeItems(
true ); } );
41void QgsProcessingEnumModelerWidget::addItem()
43 QStandardItem *item =
new QStandardItem( tr(
"new item" ) );
44 item->setCheckable(
true );
45 item->setDropEnabled(
false );
46 item->setData( Qt::Unchecked );
47 mModel->appendRow( item );
50void QgsProcessingEnumModelerWidget::removeItems(
const bool removeAll )
54 if ( QMessageBox::question(
nullptr, tr(
"Delete items" ), tr(
"Are you sure you want to delete all items" ), QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) == QMessageBox::Yes )
59 QModelIndexList selected = mItemList->selectionModel()->selectedIndexes();
61 rows.reserve( selected.count() );
62 for (
const QModelIndex &i : selected )
65 QList<int> rowsToDelete = qgis::setToList( rows );
66 std::sort( rowsToDelete.begin(), rowsToDelete.end(), std::greater<int>() );
68 mItemList->setUpdatesEnabled(
false );
69 for (
int i : std::as_const( rowsToDelete ) )
70 mModel->removeRows( i, 1 );
71 mItemList->setUpdatesEnabled(
true );
75void QgsProcessingEnumModelerWidget::onItemChanged( QStandardItem *item )
77 int checkedItemIndex = -1;
78 for (
int i = 0; i < mModel->rowCount(); i++ )
80 QStandardItem *itm = mModel->item( i );
81 if ( itm->checkState() == Qt::Checked && itm->data() == Qt::Checked )
88 mModel->blockSignals(
true );
89 if ( checkedItemIndex < 0 )
91 item->setData( item->checkState() );
95 if ( mAllowMultiple->isChecked() )
97 item->setData( item->checkState() );
101 mModel->item( checkedItemIndex )->setCheckState( Qt::Unchecked );
102 mModel->item( checkedItemIndex )->setData( Qt::Unchecked );
103 item->setData( item->checkState() );
106 mModel->blockSignals(
false );
109QStringList QgsProcessingEnumModelerWidget::options()
const
112 options.reserve( mModel->rowCount() );
113 for (
int i = 0; i < mModel->rowCount(); ++i )
115 options << mModel->item( i )->text();
120void QgsProcessingEnumModelerWidget::setOptions(
const QStringList &options )
122 for (
const QString &option : options )
124 QStandardItem *item =
new QStandardItem( option );
125 item->setCheckable(
true );
126 item->setDropEnabled(
false );
127 item->setData( Qt::Unchecked );
128 mModel->appendRow( item );
132QVariant QgsProcessingEnumModelerWidget::defaultOptions()
const
134 QVariantList defaults;
135 for (
int i = 0; i < mModel->rowCount(); ++i )
137 if ( mModel->item( i )->checkState() == Qt::Checked )
140 QVariant val( defaults );
144void QgsProcessingEnumModelerWidget::setDefaultOptions(
const QVariant &defaultValue )
146 if ( !defaultValue.isValid() )
149 QVariant val = defaultValue;
151 if ( val.userType() == QMetaType::Type::QVariantList || val.userType() == QMetaType::Type::QStringList )
153 for (
const QVariant &var : val.toList() )
154 values << var.toInt();
156 else if ( val.userType() == QMetaType::Type::QString )
158 QStringList split = val.toString().split(
',' );
159 for (
const QString &var : split )
160 values << var.toInt();
162 else if ( val.userType() == QMetaType::Type::Int )
164 values << val.toInt();
168 for (
const int &i : values )
170 item = mModel->item( i );
173 item->setCheckState( Qt::Checked );
174 item->setData( Qt::Checked );
179bool QgsProcessingEnumModelerWidget::allowMultiple()
const
181 return mAllowMultiple->isChecked();
184void QgsProcessingEnumModelerWidget::setAllowMultiple(
bool allowMultiple )
186 mAllowMultiple->setChecked( allowMultiple );