Skip to content

Commit 78aeaac

Browse files
committed
GUI/OptionsDialog: Make Spam filtering tab scrollable at smaller screen sizes
1 parent 7e53e5d commit 78aeaac

File tree

2 files changed

+50
-2
lines changed

2 files changed

+50
-2
lines changed

src/qt/optionsdialog.cpp

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@
4545
#include <QLocale>
4646
#include <QMessageBox>
4747
#include <QRadioButton>
48+
#include <QScrollArea>
49+
#include <QScrollBar>
4850
#include <QSpacerItem>
4951
#include <QString>
5052
#include <QStringList>
@@ -53,6 +55,36 @@
5355
#include <QVBoxLayout>
5456
#include <QWidget>
5557

58+
ModScrollArea::ModScrollArea()
59+
{
60+
setWidgetResizable(true);
61+
setFrameShape(QFrame::NoFrame);
62+
setObjectName(QStringLiteral("scroll"));
63+
setStyleSheet("QScrollArea#scroll, QScrollArea#scroll > QWidget > QWidget { background: transparent; } QScrollArea#scroll > QWidget > QScrollBar { background: palette(base); }");
64+
}
65+
66+
ModScrollArea *ModScrollArea::fromWidget(QWidget * const parent, QWidget * const o)
67+
{
68+
auto * const scroll = new ModScrollArea;
69+
scroll->setWidget(o);
70+
return scroll;
71+
}
72+
73+
QSize ModScrollArea::minimumSizeHint() const
74+
{
75+
auto w = widget()->minimumSizeHint().width();
76+
w += verticalScrollBar()->sizeHint().width();
77+
const auto h = fontMetrics().height() * 2;
78+
return QSize(w, h);
79+
}
80+
81+
QSize ModScrollArea::sizeHint() const
82+
{
83+
QSize sz = widget()->sizeHint();
84+
sz.rwidth() += verticalScrollBar()->sizeHint().width();
85+
return sz;
86+
}
87+
5688
void OptionsDialog::FixTabOrder(QWidget * const o)
5789
{
5890
BitcoinAmountField * const af = qobject_cast<BitcoinAmountField *>(o);
@@ -290,7 +322,7 @@ OptionsDialog::OptionsDialog(QWidget* parent, bool enableWallet)
290322

291323
QWidget * const tabFilters = new QWidget();
292324
auto& groupBox_Spamfiltering = tabFilters;
293-
ui->tabWidget->insertTab(ui->tabWidget->indexOf(ui->tabWindow), tabFilters, tr("Spam &filtering"));
325+
ui->tabWidget->insertTab(ui->tabWidget->indexOf(ui->tabWindow), ModScrollArea::fromWidget(this, groupBox_Spamfiltering), tr("Spam &filtering"));
294326
QVBoxLayout * const verticalLayout_Spamfiltering = new QVBoxLayout(groupBox_Spamfiltering);
295327

296328
rejectunknownscripts = new QCheckBox(groupBox_Spamfiltering);
@@ -461,7 +493,7 @@ OptionsDialog::OptionsDialog(QWidget* parent, bool enableWallet)
461493
});
462494

463495

464-
verticalLayout_Spamfiltering->addItem(new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding));
496+
verticalLayout_Spamfiltering->addStretch(1);
465497

466498
/* Mining tab */
467499

@@ -587,6 +619,8 @@ OptionsDialog::OptionsDialog(QWidget* parent, bool enableWallet)
587619
ui->qrFont_preview->setVisible(false);
588620
#endif
589621

622+
adjustSize();
623+
590624
GUIUtil::handleCloseWindowShortcut(this);
591625
}
592626

src/qt/optionsdialog.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#define BITCOIN_QT_OPTIONSDIALOG_H
77

88
#include <QDialog>
9+
#include <QScrollArea>
910
#include <QValidator>
1011

1112
class BitcoinAmountField;
@@ -26,6 +27,19 @@ class QValueComboBox;
2627
class QWidget;
2728
QT_END_NAMESPACE
2829

30+
/** QScrollArea, but returning reasonable size hints.
31+
*/
32+
class ModScrollArea : public QScrollArea {
33+
Q_OBJECT
34+
35+
public:
36+
ModScrollArea();
37+
static ModScrollArea *fromWidget(QWidget *parent, QWidget *o);
38+
39+
QSize minimumSizeHint() const override;
40+
QSize sizeHint() const override;
41+
};
42+
2943
namespace Ui {
3044
class OptionsDialog;
3145
}

0 commit comments

Comments
 (0)