Skip to content

Commit 11cb36c

Browse files
committed
Fix transaction history table column size behavior
1 parent eaac942 commit 11cb36c

File tree

4 files changed

+55
-13
lines changed

4 files changed

+55
-13
lines changed

src/qt/bitcoingui.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -1420,9 +1420,12 @@ void BitcoinGUI::gotoHistoryPage()
14201420
historyAction->setChecked(true);
14211421
centralWidget->setCurrentWidget(transactionView);
14221422

1423+
transactionView->resizeTableColumns();
1424+
14231425
exportAction->setEnabled(true);
14241426
disconnect(exportAction, &QAction::triggered, nullptr, nullptr);
14251427
connect(exportAction, &QAction::triggered, transactionView, &TransactionView::exportClicked);
1428+
14261429
}
14271430

14281431
void BitcoinGUI::gotoAddressBookPage()

src/qt/transactiontablemodel.h

+2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ class TransactionTableModel : public QAbstractTableModel
2626
Amount = 4
2727
};
2828

29+
static constexpr std::initializer_list<ColumnIndex> all_ColumnIndex = {Status, Date, Type, ToAddress, Amount};
30+
2931
/** Roles to get specific information from a transaction row.
3032
These are independent of column.
3133
*/

src/qt/transactionview.cpp

+42-12
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ TransactionView::TransactionView(QWidget *parent)
3737
, transactionProxyModel(nullptr)
3838
, transactionView(nullptr)
3939
, searchWidgetIconAction(new QAction())
40+
, m_table_column_sizes({23, 120, 120, 400, 100})
41+
, m_init_column_sizes_set(false)
4042
{
4143
setContentsMargins(0, 0, 0, 0);
4244

@@ -110,7 +112,7 @@ TransactionView::TransactionView(QWidget *parent)
110112
view->horizontalHeader()->setHighlightSections(false);
111113
transactionView = view;
112114

113-
QVBoxLayout *tableViewLayout = new QVBoxLayout();
115+
QVBoxLayout* tableViewLayout = new QVBoxLayout();
114116
tableViewLayout->setContentsMargins(9, 9, 9, 9);
115117
QFrame *tableViewFrame = new QFrame(this);
116118
tableViewFrame->setObjectName("historyTableFrame");
@@ -180,17 +182,6 @@ void TransactionView::setModel(WalletModel *model)
180182
transactionView->setSortingEnabled(true);
181183
transactionView->sortByColumn(TransactionTableModel::Date, Qt::DescendingOrder);
182184
transactionView->verticalHeader()->hide();
183-
184-
transactionView->horizontalHeader()->resizeSection(
185-
TransactionTableModel::Status, 23);
186-
transactionView->horizontalHeader()->resizeSection(
187-
TransactionTableModel::Date, 120);
188-
transactionView->horizontalHeader()->resizeSection(
189-
TransactionTableModel::Type, 120);
190-
transactionView->horizontalHeader()->setSectionResizeMode(
191-
TransactionTableModel::ToAddress, QHeaderView::Stretch);
192-
transactionView->horizontalHeader()->resizeSection(
193-
TransactionTableModel::Amount, 100);
194185
}
195186

196187
if (model && model->getOptionsModel()) {
@@ -454,3 +445,42 @@ void TransactionView::updateIcons(const QString& theme)
454445
{
455446
searchWidgetIconAction->setIcon(QIcon(":/icons/" + theme + "_search"));
456447
}
448+
449+
void TransactionView::resizeTableColumns()
450+
{
451+
if (!model) return;
452+
453+
if (!m_init_column_sizes_set) {
454+
for (int i = 0; i < (int) m_table_column_sizes.size(); ++i) {
455+
transactionView->horizontalHeader()->resizeSection(i, m_table_column_sizes[i]);
456+
}
457+
458+
m_init_column_sizes_set = true;
459+
460+
return;
461+
}
462+
463+
const int width = transactionView->horizontalHeader()->width() - 5;
464+
465+
int orig_header_width = 0;
466+
467+
for (const auto& iter : TransactionTableModel::all_ColumnIndex) {
468+
orig_header_width += transactionView->horizontalHeader()->sectionSize(iter);
469+
}
470+
471+
if (!width || !orig_header_width) return;
472+
473+
for (const auto& iter : TransactionTableModel::all_ColumnIndex) {
474+
int section_size = transactionView->horizontalHeader()->sectionSize(iter);
475+
476+
transactionView->horizontalHeader()->resizeSection(
477+
iter, section_size * width / orig_header_width);
478+
}
479+
}
480+
481+
void TransactionView::resizeEvent(QResizeEvent *event)
482+
{
483+
resizeTableColumns();
484+
485+
QWidget::resizeEvent(event);
486+
}

src/qt/transactionview.h

+8-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class QModelIndex;
1414
class QMenu;
1515
class QFrame;
1616
class QDateTimeEdit;
17+
1718
QT_END_NAMESPACE
1819

1920
/** Widget showing the transaction list for a wallet, including a filter row.
@@ -39,6 +40,9 @@ class TransactionView : public QFrame
3940
Range
4041
};
4142

43+
protected:
44+
void resizeEvent(QResizeEvent *event) override;
45+
4246
private:
4347
WalletModel *model;
4448
TransactionFilterProxy *transactionProxyModel;
@@ -58,6 +62,9 @@ class TransactionView : public QFrame
5862

5963
QWidget *createDateRangeWidget();
6064

65+
std::vector<int> m_table_column_sizes;
66+
bool m_init_column_sizes_set;
67+
6168
private slots:
6269
void contextualMenu(const QPoint &);
6370
void dateRangeChanged();
@@ -79,7 +86,7 @@ public slots:
7986
void changedAmount(const QString &amount);
8087
void exportClicked();
8188
void focusTransaction(const QModelIndex&);
82-
89+
void resizeTableColumns();
8390
};
8491

8592
#endif // BITCOIN_QT_TRANSACTIONVIEW_H

0 commit comments

Comments
 (0)