tx->refresh();
QSet<QString> outputAddresses;
for (const auto &output : tx->transaction(0)->outputs()) {
- outputAddresses.insert(WalletManager::baseAddressFromIntegratedAddress(output->address(), constants::networkType));
+ outputAddresses.insert(WalletManager::baseAddressFromIntegratedAddress(output.address, constants::networkType));
}
QSet<QString> destAddresses;
for (const auto &addr : address) {
for (const auto &out: ci->outputs()) {
auto *item = new QTreeWidgetItem(ui->treeOutputs);
- item->setText(0, out->address());
- item->setText(1, WalletManager::displayAmount(out->amount()));
+ item->setText(0, out.address);
+ item->setText(1, WalletManager::displayAmount(out.amount));
item->setFont(0, Utils::getMonospaceFont());
- auto index = m_wallet->subaddressIndex(out->address());
+ auto index = m_wallet->subaddressIndex(out.address);
QBrush brush;
if (index.isChange()) {
brush = QBrush(ColorScheme::YELLOW.asColor(true));
brush = QBrush(ColorScheme::GREEN.asColor(true));
item->setToolTip(0, "Wallet receive address");
}
- else if (out->amount() == 0) {
+ else if (out.amount == 0) {
brush = QBrush(ColorScheme::GRAY.asColor(true));
item->setToolTip(0, "Dummy output (Min. 2 outs consensus rule)");
}
bool hasIntegrated = false;
for (const auto& transfer : transfers) {
- auto address = transfer->address();
- auto amount = WalletManager::displayAmount(transfer->amount());
+ auto address = transfer.address;
+ auto amount = WalletManager::displayAmount(transfer.amount);
auto index = m_wallet->subaddressIndex(address);
- cursor.insertText(address, Utils::addressTextFormat(index, transfer->amount()));
+ cursor.insertText(address, Utils::addressTextFormat(index, transfer.amount));
cursor.insertText(QString(" %1").arg(amount), QTextCharFormat());
cursor.insertBlock();
- if (WalletManager::baseAddressFromIntegratedAddress(transfer->address(), constants::networkType) != transfer->address()) {
+ if (WalletManager::baseAddressFromIntegratedAddress(transfer.address, constants::networkType) != transfer.address) {
hasIntegrated = true;
}
}
m_direction = txInfo->direction();
for (auto const &t: txInfo->transfers()) {
- m_OutDestinations.push_back(t->address());
+ m_OutDestinations.push_back(t.address);
}
for (auto const &s: txInfo->subaddrIndex()) {
return m_inputs;
}
-QList<Transfer *> ConstructionInfo::outputs() const {
+QList<Transfer> ConstructionInfo::outputs() const {
return m_outputs;
}
for (auto const &o : pimpl->outputs())
{
- Transfer *output = new Transfer(o.amount, QString::fromStdString(o.address), this);
- m_outputs.append(output);
+ m_outputs.emplace_back(o.amount, QString::fromStdString(o.address));
}
for (uint32_t i : pimpl->subaddressIndices())
{
#include <QObject>
#include <QSet>
+#include "Transfer.h"
class Input;
-class Transfer;
namespace Monero {
class TransactionConstructionInfo;
QVector<QString> subaddresses() const;
quint64 minMixinCount() const;
QList<Input*> inputs() const;
- QList<Transfer*> outputs() const;
+ QList<Transfer> outputs() const;
private:
explicit ConstructionInfo(const Monero::TransactionConstructionInfo *pimpl, QObject *parent = nullptr);
QVector<QString> m_subaddresses;
quint64 m_minMixinCount;
mutable QList<Input*> m_inputs;
- mutable QList<Transfer*> m_outputs;
+ mutable QList<Transfer> m_outputs;
};
#endif //FEATHER_CONSTRUCTIONINFO_H
+++ /dev/null
-// SPDX-License-Identifier: BSD-3-Clause
-// SPDX-FileCopyrightText: The Monero Project
-
-#ifndef FEATHER_RINGS_H
-#define FEATHER_RINGS_H
-
-#include <QObject>
-
-class Ring : public QObject
-{
-Q_OBJECT
-
-public:
- explicit Ring(QString _keyImage, std::vector<uint64_t> _ringMembers, QObject *parent = nullptr): QObject(parent), m_keyImage(std::move(_keyImage)), m_ringMembers(std::move(_ringMembers)) {};
-
-private:
- friend class TransactionInfo;
- QString m_keyImage;
- std::vector<uint64_t> m_ringMembers;
-
-public:
- QString keyImage() const { return m_keyImage; }
- std::vector<uint64_t> ringMembers() const { return m_ringMembers; }
-};
-
-#endif //FEATHER_RINGS_H
#include "constants.h"
#include "WalletManager.h"
#include "Transfer.h"
-#include "Ring.h"
#include "wallet/wallet2.h"
QString description(tools::wallet2 *wallet2, const tools::wallet2::payment_details &pd)
// single output transaction might contain multiple transfers
for (auto const &d: pd.m_dests)
{
- Transfer *transfer = new Transfer(d.amount, QString::fromStdString(d.address(m_wallet2->nettype(), pd.m_payment_id, !hasFakePaymentId)), this);
- t->m_transfers.append(transfer);
+ t->m_transfers.emplace_back(
+ d.amount,
+ QString::fromStdString(d.address(m_wallet2->nettype(), pd.m_payment_id, !hasFakePaymentId)));
}
for (auto const &r: pd.m_rings)
{
- Ring *ring = new Ring(QString::fromStdString(epee::string_tools::pod_to_hex(r.first)), cryptonote::relative_output_offsets_to_absolute(r.second), this);
- t->m_rings.append(ring);
+ t->m_rings.emplace_back(
+ QString::fromStdString(epee::string_tools::pod_to_hex(r.first)),
+ cryptonote::relative_output_offsets_to_absolute(r.second));
}
m_rows.append(t);
for (auto const &d: pd.m_dests)
{
- Transfer *transfer = new Transfer(d.amount, QString::fromStdString(d.address(m_wallet2->nettype(), pd.m_payment_id, !hasFakePaymentId)), this);
- t->m_transfers.append(transfer);
+ t->m_transfers.emplace_back(
+ d.amount,
+ QString::fromStdString(d.address(m_wallet2->nettype(), pd.m_payment_id, !hasFakePaymentId)));
}
for (auto const &r: pd.m_rings)
{
- Ring *ring = new Ring(QString::fromStdString(epee::string_tools::pod_to_hex(r.first)), cryptonote::relative_output_offsets_to_absolute(r.second), this);
- t->m_rings.append(ring);
+ t->m_rings.emplace_back(
+ QString::fromStdString(epee::string_tools::pod_to_hex(r.first)),
+ cryptonote::relative_output_offsets_to_absolute(r.second));
}
m_rows.append(t);
#ifndef TRANSFER_H
#define TRANSFER_H
-#include <QObject>
-
-class Transfer : public QObject
+struct Transfer
{
- Q_OBJECT
-
-public:
- explicit Transfer(uint64_t amount, QString address, QObject *parent = nullptr)
- : QObject(parent)
- , m_amount(amount)
- , m_address(std::move(address)) {};
-
- quint64 amount() const { return m_amount; }
- QString address() const { return m_address; }
-
-private:
- friend class TransactionInfo;
- friend class ConstructionInfo;
+ QString address;
+ quint64 amount;
- quint64 m_amount;
- QString m_address;
+ explicit Transfer(uint64_t amount_, QString address_)
+ : address(std::move(address_))
+ , amount(amount_) {}
};
#endif // TRANSFER_H
#include "TransactionRow.h"
#include "WalletManager.h"
#include "Transfer.h"
-#include "Ring.h"
TransactionRow::TransactionRow(QObject *parent)
: QObject(parent)
{
QList<QString> dests;
for (auto const& t: m_transfers) {
- dests.append(t->address());
+ dests.append(t.address);
}
return dests;
}
-QList<Transfer*> TransactionRow::transfers() const {
+QList<Transfer> TransactionRow::transfers() const {
return m_transfers;
}
{
QString rings;
for (auto const& r: m_rings) {
- rings += r->keyImage() + ": \n";
- for (uint64_t m : r->ringMembers()){
+ rings += r.keyImage + ": \n";
+ for (uint64_t m : r.ringMembers){
rings += QString::number(m) + " ";
}
rings += "\n\n";
TransactionRow::~TransactionRow()
{
- qDeleteAll(m_transfers);
- qDeleteAll(m_rings);
}
#ifndef FEATHER_TRANSACTIONROW_H
#define FEATHER_TRANSACTIONROW_H
-class Transfer;
-class Ring;
-
#include <QObject>
#include <QSet>
#include <QDateTime>
+struct Ring
+{
+ QString keyImage;
+ std::vector<uint64_t> ringMembers;
+
+ explicit Ring(QString _keyImage, std::vector<uint64_t> _ringMembers)
+ : keyImage(std::move(_keyImage))
+ , ringMembers(std::move(_ringMembers)) {}
+};
+struct Transfer;
+
class TransactionRow : public QObject
{
Q_OBJECT
QString time() const;
QString paymentId() const;
QList<QString> destinations() const;
- QList<Transfer*> transfers() const;
+ QList<Transfer> transfers() const;
QString rings_formatted() const;
bool hasPaymentId() const;
private:
friend class TransactionHistory;
- QList<Transfer*> m_transfers;
- QList<Ring*> m_rings;
+ QList<Transfer> m_transfers;
+ QList<Ring> m_rings;
qint64 m_amount; // Amount that was sent (to destinations) or received, excludes tx fee
qint64 m_balanceDelta; // How much the total balance was mutated as a result of this tx (includes tx fee)
quint64 m_blockHeight;