From f0f58b914738b049c0a4f412e2d0da013f634cc3 Mon Sep 17 00:00:00 2001 From: Alessandro Rezzi Date: Sun, 7 May 2023 20:12:45 +0200 Subject: [PATCH] Fix toggle lock button --- src/qt/coincontroldialog.cpp | 75 +++++++++++++++++++++--------------- src/qt/coincontroldialog.h | 2 + 2 files changed, 46 insertions(+), 31 deletions(-) diff --git a/src/qt/coincontroldialog.cpp b/src/qt/coincontroldialog.cpp index fde1ec293c06c..9b723ac70b4f5 100644 --- a/src/qt/coincontroldialog.cpp +++ b/src/qt/coincontroldialog.cpp @@ -228,44 +228,57 @@ void CoinControlDialog::buttonSelectAllClicked() updateLabels(); } -// Toggle lock state -void CoinControlDialog::buttonToggleLockClicked() +void CoinControlDialog::toggleItemLock(QTreeWidgetItem* item) +{ + COutPoint outpt(uint256S(item->text(COLUMN_TXHASH).toStdString()), item->text(COLUMN_VOUT_INDEX).toUInt()); + if (model->isLockedCoin(uint256S(item->text(COLUMN_TXHASH).toStdString()), item->text(COLUMN_VOUT_INDEX).toUInt())) { + model->unlockCoin(outpt); + item->setDisabled(false); + // restore cold-stake snowflake icon for P2CS which were previously locked + if (item->data(COLUMN_CHECKBOX, Qt::UserRole) == QString("Delegated")) + item->setIcon(COLUMN_CHECKBOX, QIcon("://ic-check-cold-staking-off")); + else + item->setIcon(COLUMN_CHECKBOX, QIcon()); + } else { + model->lockCoin(outpt); + item->setDisabled(true); + item->setIcon(COLUMN_CHECKBOX, QIcon(":/icons/lock_closed")); + } + updateLabelLocked(); +} + +void CoinControlDialog::toggleCoinLock() { - if (!fSelectTransparent) return; // todo: implement locked notes QTreeWidgetItem* item; - // Works in list-mode only - if (ui->radioListMode->isChecked()) { - ui->treeWidget->setEnabled(false); - for (int i = 0; i < ui->treeWidget->topLevelItemCount(); i++) { - item = ui->treeWidget->topLevelItem(i); - - COutPoint outpt(uint256S(item->text(COLUMN_TXHASH).toStdString()), item->text(COLUMN_VOUT_INDEX).toUInt()); - if (model->isLockedCoin(uint256S(item->text(COLUMN_TXHASH).toStdString()), item->text(COLUMN_VOUT_INDEX).toUInt())) { - model->unlockCoin(outpt); - item->setDisabled(false); - // restore cold-stake snowflake icon for P2CS which were previously locked - if (item->data(COLUMN_CHECKBOX, Qt::UserRole) == QString("Delegated")) - item->setIcon(COLUMN_CHECKBOX, QIcon("://ic-check-cold-staking-off")); - else - item->setIcon(COLUMN_CHECKBOX, QIcon()); - } else { - model->lockCoin(outpt); - item->setDisabled(true); - item->setIcon(COLUMN_CHECKBOX, QIcon(":/icons/lock_closed")); + bool treemode = ui->treeWidget->rootIsDecorated(); + for (int i = 0; i < ui->treeWidget->topLevelItemCount(); i++) { + item = ui->treeWidget->topLevelItem(i); + if (treemode) { + auto subItems = item->takeChildren(); + for (auto j : subItems) { + toggleItemLock(j); } - updateLabelLocked(); + } else { + toggleItemLock(item); } - ui->treeWidget->setEnabled(true); - updateLabels(); - } else { - QMessageBox msgBox; - msgBox.setObjectName("lockMessageBox"); - msgBox.setStyleSheet(GUIUtil::loadStyleSheet()); - msgBox.setText(tr("Please switch to \"List mode\" to use this function.")); - msgBox.exec(); } } +// Toggle lock state +void CoinControlDialog::buttonToggleLockClicked() +{ + if (!fSelectTransparent) { // todo: implement locked notes + ui->pushButtonToggleLock->setChecked(false); + return; + } + + // Works in list-mode only + ui->treeWidget->setEnabled(false); + toggleCoinLock(); + ui->treeWidget->setEnabled(true); + updateView(); +} + // context menu void CoinControlDialog::showMenu(const QPoint& point) { diff --git a/src/qt/coincontroldialog.h b/src/qt/coincontroldialog.h index 2d5a61c40b2a1..fabf55858cb32 100644 --- a/src/qt/coincontroldialog.h +++ b/src/qt/coincontroldialog.h @@ -93,6 +93,8 @@ class CoinControlDialog : public QDialog void updatePushButtonSelectAll(bool checked); void sortView(int, Qt::SortOrder); void inform(const QString& text); + void toggleItemLock(QTreeWidgetItem* item); + void toggleCoinLock(); // Load a row with coin's data void loadAvailableCoin(bool treeMode,