Skip to content

Commit bc6a92b

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

File tree

4 files changed

+56
-13
lines changed

4 files changed

+56
-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

+43-12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "transactionview.h"
22

3+
#include "logging.h"
34
#include "transactionfilterproxy.h"
45
#include "transactionrecord.h"
56
#include "walletmodel.h"
@@ -37,6 +38,8 @@ TransactionView::TransactionView(QWidget *parent)
3738
, transactionProxyModel(nullptr)
3839
, transactionView(nullptr)
3940
, searchWidgetIconAction(new QAction())
41+
, m_table_column_sizes({23, 120, 120, 400, 100})
42+
, m_init_column_sizes_set(false)
4043
{
4144
setContentsMargins(0, 0, 0, 0);
4245

@@ -110,7 +113,7 @@ TransactionView::TransactionView(QWidget *parent)
110113
view->horizontalHeader()->setHighlightSections(false);
111114
transactionView = view;
112115

113-
QVBoxLayout *tableViewLayout = new QVBoxLayout();
116+
QVBoxLayout* tableViewLayout = new QVBoxLayout();
114117
tableViewLayout->setContentsMargins(9, 9, 9, 9);
115118
QFrame *tableViewFrame = new QFrame(this);
116119
tableViewFrame->setObjectName("historyTableFrame");
@@ -180,17 +183,6 @@ void TransactionView::setModel(WalletModel *model)
180183
transactionView->setSortingEnabled(true);
181184
transactionView->sortByColumn(TransactionTableModel::Date, Qt::DescendingOrder);
182185
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);
194186
}
195187

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

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)