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