|
23 | 23 |
|
24 | 24 | #include <chrono>
|
25 | 25 |
|
| 26 | +#include <QApplication> |
26 | 27 | #include <QDataWidgetMapper>
|
27 | 28 | #include <QDir>
|
| 29 | +#include <QFontDialog> |
28 | 30 | #include <QIntValidator>
|
29 | 31 | #include <QLocale>
|
30 | 32 | #include <QMessageBox>
|
31 | 33 | #include <QSystemTrayIcon>
|
32 | 34 | #include <QTimer>
|
33 | 35 |
|
| 36 | +int setFontChoice(QComboBox* cb, const OptionsModel::FontChoice& fc) |
| 37 | +{ |
| 38 | + int i; |
| 39 | + for (i = cb->count(); --i >= 0; ) { |
| 40 | + QVariant item_data = cb->itemData(i); |
| 41 | + if (!item_data.canConvert<OptionsModel::FontChoice>()) continue; |
| 42 | + if (item_data.value<OptionsModel::FontChoice>() == fc) { |
| 43 | + break; |
| 44 | + } |
| 45 | + } |
| 46 | + if (i == -1) { |
| 47 | + // New item needed |
| 48 | + QFont chosen_font = OptionsModel::getFontForChoice(fc); |
| 49 | + QSignalBlocker block_currentindexchanged_signal(cb); // avoid triggering QFontDialog |
| 50 | + cb->insertItem(0, QFontInfo(chosen_font).family(), QVariant::fromValue(fc)); |
| 51 | + i = 0; |
| 52 | + } |
| 53 | + |
| 54 | + cb->setCurrentIndex(i); |
| 55 | + return i; |
| 56 | +} |
| 57 | + |
| 58 | +void setupFontOptions(QComboBox* cb, QLabel* preview) |
| 59 | +{ |
| 60 | + QFont embedded_font{GUIUtil::fixedPitchFont(true)}; |
| 61 | + QFont system_font{GUIUtil::fixedPitchFont(false)}; |
| 62 | + cb->addItem(QObject::tr("Embedded \"%1\"").arg(QFontInfo(embedded_font).family()), QVariant::fromValue(OptionsModel::FontChoice{OptionsModel::FontChoiceAbstract::EmbeddedFont})); |
| 63 | + cb->addItem(QObject::tr("Default system font \"%1\"").arg(QFontInfo(system_font).family()), QVariant::fromValue(OptionsModel::FontChoice{OptionsModel::FontChoiceAbstract::BestSystemFont})); |
| 64 | + cb->addItem(QObject::tr("Custom…")); |
| 65 | + |
| 66 | + const auto& on_font_choice_changed = [cb, preview](int index) { |
| 67 | + static int previous_index = -1; |
| 68 | + QVariant item_data = cb->itemData(index); |
| 69 | + QFont f; |
| 70 | + if (item_data.canConvert<OptionsModel::FontChoice>()) { |
| 71 | + f = OptionsModel::getFontForChoice(item_data.value<OptionsModel::FontChoice>()); |
| 72 | + } else { |
| 73 | + bool ok; |
| 74 | + f = QFontDialog::getFont(&ok, GUIUtil::fixedPitchFont(false), cb->parentWidget()); |
| 75 | + if (!ok) { |
| 76 | + cb->setCurrentIndex(previous_index); |
| 77 | + return; |
| 78 | + } |
| 79 | + index = setFontChoice(cb, OptionsModel::FontChoice{f}); |
| 80 | + } |
| 81 | + if (preview) { |
| 82 | + preview->setFont(f); |
| 83 | + } |
| 84 | + previous_index = index; |
| 85 | + }; |
| 86 | + QObject::connect(cb, QOverload<int>::of(&QComboBox::currentIndexChanged), on_font_choice_changed); |
| 87 | + on_font_choice_changed(cb->currentIndex()); |
| 88 | +} |
| 89 | + |
34 | 90 | OptionsDialog::OptionsDialog(QWidget* parent, bool enableWallet)
|
35 | 91 | : QDialog(parent, GUIUtil::dialog_flags),
|
36 | 92 | ui(new Ui::OptionsDialog)
|
@@ -148,19 +204,7 @@ OptionsDialog::OptionsDialog(QWidget* parent, bool enableWallet)
|
148 | 204 | ui->minimizeToTray->setEnabled(false);
|
149 | 205 | }
|
150 | 206 |
|
151 |
| - QFont embedded_font{GUIUtil::fixedPitchFont(true)}; |
152 |
| - ui->embeddedFont_radioButton->setText(ui->embeddedFont_radioButton->text().arg(QFontInfo(embedded_font).family())); |
153 |
| - embedded_font.setWeight(QFont::Bold); |
154 |
| - ui->embeddedFont_label_1->setFont(embedded_font); |
155 |
| - ui->embeddedFont_label_9->setFont(embedded_font); |
156 |
| - |
157 |
| - QFont system_font{GUIUtil::fixedPitchFont(false)}; |
158 |
| - ui->systemFont_radioButton->setText(ui->systemFont_radioButton->text().arg(QFontInfo(system_font).family())); |
159 |
| - system_font.setWeight(QFont::Bold); |
160 |
| - ui->systemFont_label_1->setFont(system_font); |
161 |
| - ui->systemFont_label_9->setFont(system_font); |
162 |
| - // Checking the embeddedFont_radioButton automatically unchecks the systemFont_radioButton. |
163 |
| - ui->systemFont_radioButton->setChecked(true); |
| 207 | + setupFontOptions(ui->moneyFont, ui->moneyFont_preview); |
164 | 208 |
|
165 | 209 | GUIUtil::handleCloseWindowShortcut(this);
|
166 | 210 | }
|
@@ -199,13 +243,7 @@ void OptionsDialog::setModel(OptionsModel *_model)
|
199 | 243 | mapper->toFirst();
|
200 | 244 |
|
201 | 245 | const auto& font_for_money = _model->data(_model->index(OptionsModel::FontForMoney, 0), Qt::EditRole).value<OptionsModel::FontChoice>();
|
202 |
| - if (std::holds_alternative<OptionsModel::FontChoiceAbstract>(font_for_money)) { |
203 |
| - ui->embeddedFont_radioButton->setChecked(font_for_money != OptionsModel::UseBestSystemFont); |
204 |
| - ui->systemFont_radioButton->setChecked(font_for_money == OptionsModel::UseBestSystemFont); |
205 |
| - } else { |
206 |
| - ui->embeddedFont_radioButton->setChecked(false); |
207 |
| - ui->systemFont_radioButton->setChecked(false); |
208 |
| - } |
| 246 | + setFontChoice(ui->moneyFont, font_for_money); |
209 | 247 |
|
210 | 248 | updateDefaultProxyNets();
|
211 | 249 | }
|
@@ -345,11 +383,7 @@ void OptionsDialog::on_openBitcoinConfButton_clicked()
|
345 | 383 |
|
346 | 384 | void OptionsDialog::on_okButton_clicked()
|
347 | 385 | {
|
348 |
| - if (ui->embeddedFont_radioButton->isChecked()) { |
349 |
| - model->setData(model->index(OptionsModel::FontForMoney, 0), QVariant::fromValue(OptionsModel::FontChoice{OptionsModel::FontChoiceAbstract::EmbeddedFont})); |
350 |
| - } else if (ui->systemFont_radioButton->isChecked()) { |
351 |
| - model->setData(model->index(OptionsModel::FontForMoney, 0), QVariant::fromValue(OptionsModel::FontChoice{OptionsModel::FontChoiceAbstract::BestSystemFont})); |
352 |
| - } |
| 386 | + model->setData(model->index(OptionsModel::FontForMoney, 0), ui->moneyFont->itemData(ui->moneyFont->currentIndex())); |
353 | 387 |
|
354 | 388 | mapper->submit();
|
355 | 389 | accept();
|
|
0 commit comments