Calc: configure crypto/fiat symbols

This commit is contained in:
tobtoht
2021-05-26 15:14:53 +02:00
parent 8e663d4a18
commit bf533ddfaa
10 changed files with 515 additions and 151 deletions
+102
View File
@@ -0,0 +1,102 @@
// SPDX-License-Identifier: BSD-3-Clause
// Copyright (c) 2020-2021, The Monero Project.
#include "CalcConfigDialog.h"
#include "ui_CalcConfigDialog.h"
#include "AppData.h"
#include "utils/config.h"
CalcConfigDialog::CalcConfigDialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::CalcConfigDialog)
{
ui->setupUi(this);
this->fillListWidgets();
connect(ui->btn_selectAll, &QPushButton::clicked, this, &CalcConfigDialog::selectAll);
connect(ui->btn_deselectAll, &QPushButton::clicked, this, &CalcConfigDialog::deselectAll);
connect(ui->buttonBox, &QDialogButtonBox::accepted, [this]{
config()->set(Config::fiatSymbols, this->checkedFiat());
config()->set(Config::cryptoSymbols, this->checkedCrypto());
this->accept();
});
this->adjustSize();
}
QStringList CalcConfigDialog::checkedFiat() {
return this->getChecked(ui->list_fiat);
}
QStringList CalcConfigDialog::checkedCrypto() {
return this->getChecked(ui->list_crypto);
}
void CalcConfigDialog::selectAll() {
this->setCheckState(this->getVisibleListWidget(), Qt::Checked);
}
void CalcConfigDialog::deselectAll() {
this->setCheckState(this->getVisibleListWidget(), Qt::Unchecked);
}
void CalcConfigDialog::setCheckState(QListWidget *widget, Qt::CheckState checkState) {
QListWidgetItem *item;
for (int i=0; i < widget->count(); i++) {
item = widget->item(i);
item->setCheckState(checkState);
}
}
QStringList CalcConfigDialog::getChecked(QListWidget *widget) {
QStringList checked;
QListWidgetItem *item;
for (int i=0; i < widget->count(); i++) {
item = widget->item(i);
if (item->checkState() == Qt::Checked) {
checked.append(item->text());
}
}
return checked;
}
QListWidget* CalcConfigDialog::getVisibleListWidget() {
if (ui->tabWidget->currentIndex() == 0) {
return ui->list_fiat;
} else {
return ui->list_crypto;
}
}
void CalcConfigDialog::fillListWidgets() {
QStringList cryptoCurrencies = appData()->prices.markets.keys();
QStringList fiatCurrencies = appData()->prices.rates.keys();
QStringList checkedCryptoCurrencies = config()->get(Config::cryptoSymbols).toStringList();
QStringList checkedFiatCurrencies = config()->get(Config::fiatSymbols).toStringList();
ui->list_crypto->addItems(cryptoCurrencies);
ui->list_fiat->addItems(fiatCurrencies);
auto setChecked = [](QListWidget *widget, const QStringList &checked){
QListWidgetItem *item;
for (int i=0; i < widget->count(); i++) {
item = widget->item(i);
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
if (checked.contains(item->text())) {
item->setCheckState(Qt::Checked);
} else {
item->setCheckState(Qt::Unchecked);
}
}
};
setChecked(ui->list_crypto, checkedCryptoCurrencies);
setChecked(ui->list_fiat, checkedFiatCurrencies);
}
CalcConfigDialog::~CalcConfigDialog() {
delete ui;
}