Skip to content

Commit 6d70a73

Browse files
jonasschnelliluke-jr
authored andcommitted
[Qt] fix coincontrol sort issue
Github-Pull: #9185 Rebased-From: 76af4eb
1 parent 3fffbf7 commit 6d70a73

File tree

2 files changed

+27
-6
lines changed

2 files changed

+27
-6
lines changed

src/qt/coincontroldialog.cpp

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,15 @@ QList<CAmount> CoinControlDialog::payAmounts;
3535
CCoinControl* CoinControlDialog::coinControl = new CCoinControl();
3636
bool CoinControlDialog::fSubtractFeeFromAmount = false;
3737

38+
bool CCoinControlWidgetItem::operator<(const QTreeWidgetItem &other) const {
39+
int column = treeWidget()->sortColumn();
40+
if (column == CoinControlDialog::COLUMN_AMOUNT_INT64 || column == CoinControlDialog::COLUMN_AMOUNT_INT64)
41+
return data(CoinControlDialog::COLUMN_AMOUNT_INT64, Qt::DisplayRole).toULongLong() < other.data(CoinControlDialog::COLUMN_AMOUNT_INT64, Qt::DisplayRole).toULongLong();
42+
if (column == CoinControlDialog::COLUMN_DATE || column == CoinControlDialog::COLUMN_DATE_INT64)
43+
return data(CoinControlDialog::COLUMN_DATE_INT64, Qt::DisplayRole).toULongLong() < other.data(CoinControlDialog::COLUMN_DATE_INT64, Qt::DisplayRole).toULongLong();
44+
return QTreeWidgetItem::operator<(other);
45+
}
46+
3847
CoinControlDialog::CoinControlDialog(const PlatformStyle *platformStyle, QWidget *parent) :
3948
QDialog(parent),
4049
ui(new Ui::CoinControlDialog),
@@ -708,7 +717,7 @@ void CoinControlDialog::updateView()
708717
model->listCoins(mapCoins);
709718

710719
BOOST_FOREACH(const PAIRTYPE(QString, std::vector<COutput>)& coins, mapCoins) {
711-
QTreeWidgetItem *itemWalletAddress = new QTreeWidgetItem();
720+
CCoinControlWidgetItem *itemWalletAddress = new CCoinControlWidgetItem();
712721
itemWalletAddress->setCheckState(COLUMN_CHECKBOX, Qt::Unchecked);
713722
QString sWalletAddress = coins.first;
714723
QString sWalletLabel = model->getAddressTableModel()->labelForAddress(sWalletAddress);
@@ -739,9 +748,9 @@ void CoinControlDialog::updateView()
739748
nSum += out.tx->vout[out.i].nValue;
740749
nChildren++;
741750

742-
QTreeWidgetItem *itemOutput;
743-
if (treeMode) itemOutput = new QTreeWidgetItem(itemWalletAddress);
744-
else itemOutput = new QTreeWidgetItem(ui->treeWidget);
751+
CCoinControlWidgetItem *itemOutput;
752+
if (treeMode) itemOutput = new CCoinControlWidgetItem(itemWalletAddress);
753+
else itemOutput = new CCoinControlWidgetItem(ui->treeWidget);
745754
itemOutput->setFlags(flgCheckbox);
746755
itemOutput->setCheckState(COLUMN_CHECKBOX,Qt::Unchecked);
747756

@@ -779,11 +788,11 @@ void CoinControlDialog::updateView()
779788

780789
// amount
781790
itemOutput->setText(COLUMN_AMOUNT, BitcoinUnits::format(nDisplayUnit, out.tx->vout[out.i].nValue));
782-
itemOutput->setText(COLUMN_AMOUNT_INT64, strPad(QString::number(out.tx->vout[out.i].nValue), 15, " ")); // padding so that sorting works correctly
791+
itemOutput->setData(COLUMN_AMOUNT_INT64, Qt::DisplayRole, QVariant((qlonglong)out.tx->vout[out.i].nValue)); // padding so that sorting works correctly
783792

784793
// date
785794
itemOutput->setText(COLUMN_DATE, GUIUtil::dateTimeStr(out.tx->GetTxTime()));
786-
itemOutput->setText(COLUMN_DATE_INT64, strPad(QString::number(out.tx->GetTxTime()), 20, " "));
795+
itemOutput->setData(COLUMN_DATE_INT64, Qt::DisplayRole, QVariant((qlonglong)out.tx->GetTxTime()));
787796

788797
// confirmations
789798
itemOutput->setText(COLUMN_CONFIRMATIONS, strPad(QString::number(out.nDepth), 8, " "));

src/qt/coincontroldialog.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,17 @@ namespace Ui {
2828

2929
#define ASYMP_UTF8 "\xE2\x89\x88"
3030

31+
class CCoinControlWidgetItem : public QTreeWidgetItem
32+
{
33+
public:
34+
CCoinControlWidgetItem(QTreeWidget *parent, int type = Type) : QTreeWidgetItem(parent, type) {}
35+
CCoinControlWidgetItem(int type = Type) : QTreeWidgetItem(type) {}
36+
CCoinControlWidgetItem(QTreeWidgetItem *parent, int type = Type) : QTreeWidgetItem(parent, type) {}
37+
38+
bool operator<(const QTreeWidgetItem &other) const;
39+
};
40+
41+
3142
class CoinControlDialog : public QDialog
3243
{
3344
Q_OBJECT
@@ -79,6 +90,7 @@ class CoinControlDialog : public QDialog
7990
COLUMN_PRIORITY_INT64,
8091
COLUMN_DATE_INT64
8192
};
93+
friend class CCoinControlWidgetItem;
8294

8395
// some columns have a hidden column containing the value used for sorting
8496
int getMappedColumn(int column, bool fVisibleColumn = true)

0 commit comments

Comments
 (0)