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