Merge #9185: [Qt] fix coincontrol sort issue
4231032
[Qt] Clean up and fix coincontrol tree widget handling (Wladimir J. van der Laan)76af4eb
[Qt] fix coincontrol sort issue (Jonas Schnelli)
This commit is contained in:
commit
e4dbeb9499
2 changed files with 32 additions and 49 deletions
|
@ -35,6 +35,13 @@ QList<CAmount> CoinControlDialog::payAmounts;
|
|||
CCoinControl* CoinControlDialog::coinControl = new CCoinControl();
|
||||
bool CoinControlDialog::fSubtractFeeFromAmount = false;
|
||||
|
||||
bool CCoinControlWidgetItem::operator<(const QTreeWidgetItem &other) const {
|
||||
int column = treeWidget()->sortColumn();
|
||||
if (column == CoinControlDialog::COLUMN_AMOUNT || column == CoinControlDialog::COLUMN_DATE || column == CoinControlDialog::COLUMN_CONFIRMATIONS)
|
||||
return data(column, Qt::UserRole).toLongLong() < other.data(column, Qt::UserRole).toLongLong();
|
||||
return QTreeWidgetItem::operator<(other);
|
||||
}
|
||||
|
||||
CoinControlDialog::CoinControlDialog(const PlatformStyle *_platformStyle, QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::CoinControlDialog),
|
||||
|
@ -128,11 +135,9 @@ CoinControlDialog::CoinControlDialog(const PlatformStyle *_platformStyle, QWidge
|
|||
ui->treeWidget->setColumnWidth(COLUMN_CONFIRMATIONS, 110);
|
||||
ui->treeWidget->setColumnHidden(COLUMN_TXHASH, true); // store transaction hash in this column, but don't show it
|
||||
ui->treeWidget->setColumnHidden(COLUMN_VOUT_INDEX, true); // store vout index in this column, but don't show it
|
||||
ui->treeWidget->setColumnHidden(COLUMN_AMOUNT_INT64, true); // store amount int64 in this column, but don't show it
|
||||
ui->treeWidget->setColumnHidden(COLUMN_DATE_INT64, true); // store date int64 in this column, but don't show it
|
||||
|
||||
// default view is sorted by amount desc
|
||||
sortView(COLUMN_AMOUNT_INT64, Qt::DescendingOrder);
|
||||
sortView(COLUMN_AMOUNT, Qt::DescendingOrder);
|
||||
|
||||
// restore list mode and sortorder as a convenience feature
|
||||
QSettings settings;
|
||||
|
@ -164,15 +169,6 @@ void CoinControlDialog::setModel(WalletModel *_model)
|
|||
}
|
||||
}
|
||||
|
||||
// helper function str_pad
|
||||
QString CoinControlDialog::strPad(QString s, int nPadLength, QString sPadding)
|
||||
{
|
||||
while (s.length() < nPadLength)
|
||||
s = sPadding + s;
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
// ok button
|
||||
void CoinControlDialog::buttonBoxClicked(QAbstractButton* button)
|
||||
{
|
||||
|
@ -338,7 +334,7 @@ void CoinControlDialog::sortView(int column, Qt::SortOrder order)
|
|||
sortColumn = column;
|
||||
sortOrder = order;
|
||||
ui->treeWidget->sortItems(column, order);
|
||||
ui->treeWidget->header()->setSortIndicator(getMappedColumn(sortColumn), sortOrder);
|
||||
ui->treeWidget->header()->setSortIndicator(sortColumn, sortOrder);
|
||||
}
|
||||
|
||||
// treeview: clicked on header
|
||||
|
@ -346,12 +342,10 @@ void CoinControlDialog::headerSectionClicked(int logicalIndex)
|
|||
{
|
||||
if (logicalIndex == COLUMN_CHECKBOX) // click on most left column -> do nothing
|
||||
{
|
||||
ui->treeWidget->header()->setSortIndicator(getMappedColumn(sortColumn), sortOrder);
|
||||
ui->treeWidget->header()->setSortIndicator(sortColumn, sortOrder);
|
||||
}
|
||||
else
|
||||
{
|
||||
logicalIndex = getMappedColumn(logicalIndex, false);
|
||||
|
||||
if (sortColumn == logicalIndex)
|
||||
sortOrder = ((sortOrder == Qt::AscendingOrder) ? Qt::DescendingOrder : Qt::AscendingOrder);
|
||||
else
|
||||
|
@ -658,7 +652,7 @@ void CoinControlDialog::updateView()
|
|||
model->listCoins(mapCoins);
|
||||
|
||||
BOOST_FOREACH(const PAIRTYPE(QString, std::vector<COutput>)& coins, mapCoins) {
|
||||
QTreeWidgetItem *itemWalletAddress = new QTreeWidgetItem();
|
||||
CCoinControlWidgetItem *itemWalletAddress = new CCoinControlWidgetItem();
|
||||
itemWalletAddress->setCheckState(COLUMN_CHECKBOX, Qt::Unchecked);
|
||||
QString sWalletAddress = coins.first;
|
||||
QString sWalletLabel = model->getAddressTableModel()->labelForAddress(sWalletAddress);
|
||||
|
@ -686,9 +680,9 @@ void CoinControlDialog::updateView()
|
|||
nSum += out.tx->vout[out.i].nValue;
|
||||
nChildren++;
|
||||
|
||||
QTreeWidgetItem *itemOutput;
|
||||
if (treeMode) itemOutput = new QTreeWidgetItem(itemWalletAddress);
|
||||
else itemOutput = new QTreeWidgetItem(ui->treeWidget);
|
||||
CCoinControlWidgetItem *itemOutput;
|
||||
if (treeMode) itemOutput = new CCoinControlWidgetItem(itemWalletAddress);
|
||||
else itemOutput = new CCoinControlWidgetItem(ui->treeWidget);
|
||||
itemOutput->setFlags(flgCheckbox);
|
||||
itemOutput->setCheckState(COLUMN_CHECKBOX,Qt::Unchecked);
|
||||
|
||||
|
@ -721,14 +715,15 @@ void CoinControlDialog::updateView()
|
|||
|
||||
// amount
|
||||
itemOutput->setText(COLUMN_AMOUNT, BitcoinUnits::format(nDisplayUnit, out.tx->vout[out.i].nValue));
|
||||
itemOutput->setText(COLUMN_AMOUNT_INT64, strPad(QString::number(out.tx->vout[out.i].nValue), 15, " ")); // padding so that sorting works correctly
|
||||
itemOutput->setData(COLUMN_AMOUNT, Qt::UserRole, QVariant((qlonglong)out.tx->vout[out.i].nValue)); // padding so that sorting works correctly
|
||||
|
||||
// date
|
||||
itemOutput->setText(COLUMN_DATE, GUIUtil::dateTimeStr(out.tx->GetTxTime()));
|
||||
itemOutput->setText(COLUMN_DATE_INT64, strPad(QString::number(out.tx->GetTxTime()), 20, " "));
|
||||
itemOutput->setData(COLUMN_DATE, Qt::UserRole, QVariant((qlonglong)out.tx->GetTxTime()));
|
||||
|
||||
// confirmations
|
||||
itemOutput->setText(COLUMN_CONFIRMATIONS, strPad(QString::number(out.nDepth), 8, " "));
|
||||
itemOutput->setText(COLUMN_CONFIRMATIONS, QString::number(out.nDepth));
|
||||
itemOutput->setData(COLUMN_CONFIRMATIONS, Qt::UserRole, QVariant((qlonglong)out.nDepth));
|
||||
|
||||
// transaction hash
|
||||
uint256 txhash = out.tx->GetHash();
|
||||
|
@ -756,7 +751,7 @@ void CoinControlDialog::updateView()
|
|||
{
|
||||
itemWalletAddress->setText(COLUMN_CHECKBOX, "(" + QString::number(nChildren) + ")");
|
||||
itemWalletAddress->setText(COLUMN_AMOUNT, BitcoinUnits::format(nDisplayUnit, nSum));
|
||||
itemWalletAddress->setText(COLUMN_AMOUNT_INT64, strPad(QString::number(nSum), 15, " "));
|
||||
itemWalletAddress->setData(COLUMN_AMOUNT, Qt::UserRole, QVariant((qlonglong)nSum));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -28,6 +28,17 @@ namespace Ui {
|
|||
|
||||
#define ASYMP_UTF8 "\xE2\x89\x88"
|
||||
|
||||
class CCoinControlWidgetItem : public QTreeWidgetItem
|
||||
{
|
||||
public:
|
||||
CCoinControlWidgetItem(QTreeWidget *parent, int type = Type) : QTreeWidgetItem(parent, type) {}
|
||||
CCoinControlWidgetItem(int type = Type) : QTreeWidgetItem(type) {}
|
||||
CCoinControlWidgetItem(QTreeWidgetItem *parent, int type = Type) : QTreeWidgetItem(parent, type) {}
|
||||
|
||||
bool operator<(const QTreeWidgetItem &other) const;
|
||||
};
|
||||
|
||||
|
||||
class CoinControlDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
@ -59,13 +70,12 @@ private:
|
|||
|
||||
const PlatformStyle *platformStyle;
|
||||
|
||||
QString strPad(QString, int, QString);
|
||||
void sortView(int, Qt::SortOrder);
|
||||
void updateView();
|
||||
|
||||
enum
|
||||
{
|
||||
COLUMN_CHECKBOX,
|
||||
COLUMN_CHECKBOX = 0,
|
||||
COLUMN_AMOUNT,
|
||||
COLUMN_LABEL,
|
||||
COLUMN_ADDRESS,
|
||||
|
@ -73,30 +83,8 @@ private:
|
|||
COLUMN_CONFIRMATIONS,
|
||||
COLUMN_TXHASH,
|
||||
COLUMN_VOUT_INDEX,
|
||||
COLUMN_AMOUNT_INT64,
|
||||
COLUMN_DATE_INT64
|
||||
};
|
||||
|
||||
// some columns have a hidden column containing the value used for sorting
|
||||
int getMappedColumn(int column, bool fVisibleColumn = true)
|
||||
{
|
||||
if (fVisibleColumn)
|
||||
{
|
||||
if (column == COLUMN_AMOUNT_INT64)
|
||||
return COLUMN_AMOUNT;
|
||||
else if (column == COLUMN_DATE_INT64)
|
||||
return COLUMN_DATE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (column == COLUMN_AMOUNT)
|
||||
return COLUMN_AMOUNT_INT64;
|
||||
else if (column == COLUMN_DATE)
|
||||
return COLUMN_DATE_INT64;
|
||||
}
|
||||
|
||||
return column;
|
||||
}
|
||||
friend class CCoinControlWidgetItem;
|
||||
|
||||
private Q_SLOTS:
|
||||
void showMenu(const QPoint &);
|
||||
|
|
Loading…
Reference in a new issue