diff --git a/src/dialog/AccountSwitcherDialog.cpp b/src/dialog/AccountSwitcherDialog.cpp index 33f1ae44..50416572 100644 --- a/src/dialog/AccountSwitcherDialog.cpp +++ b/src/dialog/AccountSwitcherDialog.cpp @@ -6,6 +6,7 @@ #include "libwalletqt/SubaddressAccount.h" #include "utils/Icons.h" +#include "model/ModelUtils.h" #include AccountSwitcherDialog::AccountSwitcherDialog(QSharedPointer ctx, QWidget *parent) @@ -13,15 +14,22 @@ AccountSwitcherDialog::AccountSwitcherDialog(QSharedPointer ctx, QWi , ui(new Ui::AccountSwitcherDialog) , m_ctx(std::move(ctx)) , m_model(m_ctx->wallet->subaddressAccountModel()) + , m_proxyModel(new SubaddressAccountProxyModel(this)) { ui->setupUi(this); - ui->accounts->setContextMenuPolicy(Qt::CustomContextMenu); - m_ctx->wallet->subaddressAccount()->refresh(); - ui->accounts->setModel(m_ctx->wallet->subaddressAccountModel()); + m_proxyModel->setSourceModel(m_model); + + ui->label_totalBalance->setFont(ModelUtils::getMonospaceFont()); + ui->label_totalBalance->setText(WalletManager::displayAmount(m_ctx->wallet->balanceAll())); + + ui->accounts->setModel(m_proxyModel); + ui->accounts->setContextMenuPolicy(Qt::CustomContextMenu); ui->accounts->setSelectionMode(QAbstractItemView::SingleSelection); ui->accounts->setSelectionBehavior(QAbstractItemView::SelectRows); + ui->accounts->setSortingEnabled(true); + ui->accounts->sortByColumn(SubaddressAccountModel::Column::Number, Qt::AscendingOrder); ui->accounts->hideColumn(SubaddressAccountModel::Column::Address); ui->accounts->hideColumn(SubaddressAccountModel::Column::UnlockedBalance); ui->accounts->setColumnWidth(SubaddressAccountModel::Column::Label, 200); diff --git a/src/dialog/AccountSwitcherDialog.h b/src/dialog/AccountSwitcherDialog.h index 59cc79bb..077b3c1f 100644 --- a/src/dialog/AccountSwitcherDialog.h +++ b/src/dialog/AccountSwitcherDialog.h @@ -36,6 +36,7 @@ private: Ui::AccountSwitcherDialog *ui; QSharedPointer m_ctx; SubaddressAccountModel *m_model; + SubaddressAccountProxyModel *m_proxyModel; }; #endif //FEATHER_ACCOUNTSWITCHERDIALOG_H diff --git a/src/dialog/AccountSwitcherDialog.ui b/src/dialog/AccountSwitcherDialog.ui index d332d8e1..1b203cfd 100644 --- a/src/dialog/AccountSwitcherDialog.ui +++ b/src/dialog/AccountSwitcherDialog.ui @@ -7,7 +7,7 @@ 0 0 521 - 275 + 347 @@ -27,6 +27,33 @@ + + + + + + Total balance: + + + + + + + + 0 + 0 + + + + TextLabel + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + + diff --git a/src/model/SubaddressAccountModel.cpp b/src/model/SubaddressAccountModel.cpp index 53e91094..a15ba838 100644 --- a/src/model/SubaddressAccountModel.cpp +++ b/src/model/SubaddressAccountModel.cpp @@ -5,6 +5,8 @@ #include "SubaddressAccount.h" #include +#include +#include "ModelUtils.h" SubaddressAccountModel::SubaddressAccountModel(QObject *parent, SubaddressAccount *subaddressAccount) : QAbstractTableModel(parent) @@ -50,6 +52,11 @@ QVariant SubaddressAccountModel::data(const QModelIndex &index, int role) const if (role == Qt::DisplayRole || role == Qt::EditRole || role == Qt::UserRole) { result = parseSubaddressAccountRow(row, index, role); } + else if (role == Qt::FontRole) { + if (index.column() == Column::Balance || index.column() == Column::UnlockedBalance) { + result = ModelUtils::getMonospaceFont(); + } + } }); if (!found) { @@ -135,4 +142,9 @@ Qt::ItemFlags SubaddressAccountModel::flags(const QModelIndex &index) const Monero::SubaddressAccountRow* SubaddressAccountModel::entryFromIndex(const QModelIndex &index) const { Q_ASSERT(index.isValid() && index.row() < m_subaddressAccount->count()); return m_subaddressAccount->row(index.row()); +} + +SubaddressAccountProxyModel::SubaddressAccountProxyModel(QObject *parent) + : QSortFilterProxyModel(parent) +{ } \ No newline at end of file diff --git a/src/model/SubaddressAccountModel.h b/src/model/SubaddressAccountModel.h index b49f5bab..1c145580 100644 --- a/src/model/SubaddressAccountModel.h +++ b/src/model/SubaddressAccountModel.h @@ -6,6 +6,7 @@ #include "Subaddress.h" #include +#include class SubaddressAccount; @@ -45,4 +46,12 @@ private: SubaddressAccount *m_subaddressAccount; }; +class SubaddressAccountProxyModel : public QSortFilterProxyModel +{ + Q_OBJECT + +public: + explicit SubaddressAccountProxyModel(QObject *parent = nullptr); +}; + #endif // SUBADDRESSACCOUNTMODEL_H