1313MempoolTxTableModel::MempoolTxTableModel (QObject* parent)
1414 : QAbstractTableModel(parent)
1515{
16+ m_sort_column = TxID;
1617}
1718
1819MempoolTxTableModel::~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+
119159void 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}
0 commit comments