Skip to content

Commit 15ac9bf

Browse files
committed
MempoolTxTableModel::sort:initial impl
1 parent 5b8a86d commit 15ac9bf

File tree

3 files changed

+49
-2
lines changed

3 files changed

+49
-2
lines changed

src/qt/mempooldetail.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,8 @@ void MempoolDetail::setPlatformStyle(const PlatformStyle* platform_style)
101101
m_tx_table->setSelectionMode(QAbstractItemView::SingleSelection);
102102
m_tx_table->setAlternatingRowColors(true);
103103
m_tx_table->setStyleSheet("QTableView { background-color: transparent; border: 1px solid gray; border-radius: 5px; }");
104-
m_tx_table->setSortingEnabled(false); // Sorting not implemented for this model yet
104+
m_tx_table->setSortingEnabled(true);
105+
m_tx_table->sortByColumn(m_tx_table_model->m_sort_column, m_tx_table_model->m_sort_order);
105106
m_tx_table->verticalHeader()->setVisible(false);
106107
m_tx_table->horizontalHeader()->setStretchLastSection(true);
107108

src/qt/mempooltxtables.cpp

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
MempoolTxTableModel::MempoolTxTableModel(QObject* parent)
1414
: QAbstractTableModel(parent)
1515
{
16+
m_sort_column = TxID;
1617
}
1718

1819
MempoolTxTableModel::~MempoolTxTableModel() = default;
@@ -116,6 +117,45 @@ QModelIndex MempoolTxTableModel::index(int row, int column, const QModelIndex& p
116117
return QModelIndex();
117118
}
118119

120+
void MempoolTxTableModel::sort(int column, Qt::SortOrder order)
121+
{
122+
m_sort_column = column;
123+
m_sort_order = order;
124+
beginResetModel();
125+
std::sort(m_tx_data.begin(), m_tx_data.end(),
126+
[&](const interfaces::WalletTx& a, const interfaces::WalletTx& b) {
127+
if (order == Qt::AscendingOrder) {
128+
switch (static_cast<ColumnIndex>(column)) {
129+
case TxID:
130+
return a.tx->GetHash().ToString() < b.tx->GetHash().ToString();
131+
case Amount:
132+
return (a.credit - a.debit) < (b.credit - b.debit);
133+
case Fee:
134+
return (a.debit - a.credit - a.change) < (b.debit - b.credit - b.change);
135+
case Status:
136+
return false; // Status is not meaningfully sortable, maintain current order
137+
default:
138+
return false;
139+
}
140+
} else { // DescendingOrder
141+
switch (static_cast<ColumnIndex>(column)) {
142+
case TxID:
143+
return a.tx->GetHash().ToString() > b.tx->GetHash().ToString();
144+
case Amount:
145+
return (a.credit - a.debit) > (b.credit - b.debit);
146+
case Fee:
147+
return (a.debit - a.credit - a.change) > (b.debit - b.credit - b.change);
148+
case Status:
149+
return false; // Status is not meaningfully sortable, maintain current order
150+
default:
151+
return false;
152+
}
153+
}
154+
return false; // Should not be reached
155+
});
156+
endResetModel();
157+
}
158+
119159
void MempoolTxTableModel::updateModel(const std::set<interfaces::WalletTx>& wallet_transactions, bool has_active_wallet)
120160
{
121161
beginResetModel();
@@ -134,5 +174,8 @@ void MempoolTxTableModel::updateModel(const std::set<interfaces::WalletTx>& wall
134174
// We'll rely on that for now, or add a similar check here if needed.
135175
m_tx_data.append(wtx);
136176
}
177+
if (m_sort_column != -1) {
178+
sort(m_sort_column, m_sort_order);
179+
}
137180
endResetModel();
138181
}

src/qt/mempooltxtables.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,16 @@ class MempoolTxTableModel : public QAbstractTableModel
4141
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
4242
QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const override;
4343
Qt::ItemFlags flags(const QModelIndex &index) const override;
44+
void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
4445
/*@}*/
4546

4647
public Q_SLOTS:
4748
void updateModel(const std::set<interfaces::WalletTx>& wallet_transactions, bool has_active_wallet);
4849

49-
private:
50+
public:
5051
QList<interfaces::WalletTx> m_tx_data;
52+
int m_sort_column = -1;
53+
Qt::SortOrder m_sort_order = Qt::AscendingOrder;
5154
const QStringList columns{
5255
/*: Title of Mempool Tx Table column which contains the transaction ID. */
5356
tr("TXID"),

0 commit comments

Comments
 (0)