From ebde5a1cb79f5f5bbf62d7b67a807199de47a53d Mon Sep 17 00:00:00 2001 From: tobtoht Date: Wed, 14 Oct 2020 04:21:38 +0200 Subject: [PATCH] Coins: add key image icons for view only wallets --- src/assets.qrc | 2 ++ src/assets/images/eye_blind.png | Bin 0 -> 4966 bytes src/assets/images/lock_icon.png | Bin 0 -> 1297 bytes src/coinswidget.cpp | 8 ++++++++ src/coinswidget.h | 1 + src/model/CoinsModel.cpp | 26 ++++++++++++++++++++++++++ src/model/CoinsModel.h | 6 +++++- 7 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 src/assets/images/eye_blind.png create mode 100644 src/assets/images/lock_icon.png diff --git a/src/assets.qrc b/src/assets.qrc index a99d844..57e1677 100644 --- a/src/assets.qrc +++ b/src/assets.qrc @@ -33,6 +33,7 @@ assets/images/expired.png assets/images/expired_icon.png assets/images/eye1.png + assets/images/eye_blind.png assets/images/feather.png assets/images/file.png assets/images/ghost.png @@ -44,6 +45,7 @@ assets/images/ledger_unpaired.png assets/images/lightning.png assets/images/lock.png + assets/images/lock_icon.png assets/images/lock.svg assets/images/microphone.png assets/images/network.png diff --git a/src/assets/images/eye_blind.png b/src/assets/images/eye_blind.png new file mode 100644 index 0000000000000000000000000000000000000000..612e83813234fad0ac4711d1f5aa9c04f927bea1 GIT binary patch literal 4966 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/lock_icon.png b/src/assets/images/lock_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1116e4884c824f5472ab169289e001ad1ff04ce2 GIT binary patch literal 1297 zcmV+s1@8KZP)^*Ajr|0&lBVVR<7*8&!jo}{n4kUrY7G7`tDhQk3QbLbY1tl zv7VksytcMBqB!Qn@gMnp=r_VJ99Pv5V+@|_bu_oM6xOcorn7S;s>;yN?;JaJtPFJY z?btbSPYPI@Y|ZCey?j28sxmlulEG6a%Sn>FoC_Kcy!y)P3UKD^898+L>*r4YG4#2g zPG<|n0xLQ?5D{Nhdx6jH2|$p|EiEm$u1l#@;?$`@;yC%FZ^t|P7q9DD-KDDf#r^~P zx+W$jK3Lke6hH0bx-MZDZoU4~Ah#SP4M{ z;~0Qt_Y;K8A_55Iay6q`qciz|{@%^C_;COWSVXK${F2qiZmeqc0M%#n9Rm#XZ}mW4 z0yY6_Chh#js~cIhpy1lehwICwTs(K2#z(sseNsF-|JXo(?^nQi;3t8-FYY=R-b4Y} z3vA0ZwIZoBbFm9bHP@}8C|x~U@KUCpyAUxG3WxsO#o_{psFNEL=uIy>=e+Llp~a{c((^g8B4~@ z5=S%G*u&yt)gcK(Dy7R*=BBC4&k$DT2+Jj+uuPmp#BoeidnQSYpKTy$Y+jg+`2t4b zyQ_r%#&`f=Zq|k#xZwW`pbui;KLVgE^z`dJ^3S>_Rj;9dAdU-(0kx=t+PFIP4gf?D zr`pzy<6<25`u~Qy0Ai*=D}RoiO)qIL;JQA7AQnWcK#rHiRlvC5xQOvEZW$+zaFPTk ziHVaKo5ZC3EN(i$aeYk6BdS!mczz6E9%H8K-i!wNdtU?g07gW}HMisW0bV*o+7A{~ zFanCj#vw@@k|Z%v91%w$iA}K9UK7+R<unZ-t=lV(BIn$JOeBNRsjL9 z2JnCeU #include @@ -21,6 +22,7 @@ CoinsWidget::CoinsWidget(QWidget *parent) , m_copyMenu(new QMenu("Copy",this)) { ui->setupUi(this); + m_ctx = MainWindow::getContext(); // header context menu ui->coins->header()->setContextMenuPolicy(Qt::CustomContextMenu); @@ -70,6 +72,12 @@ void CoinsWidget::setModel(CoinsModel * model, Coins * coins) { ui->coins->setColumnHidden(CoinsModel::SpentHeight, true); ui->coins->setColumnHidden(CoinsModel::Frozen, true); + if (!m_ctx->currentWallet->viewOnly()) { + ui->coins->setColumnHidden(CoinsModel::KeyImageKnown, true); + } else { + ui->coins->setColumnHidden(CoinsModel::KeyImageKnown, false); + } + ui->coins->header()->setSectionResizeMode(QHeaderView::ResizeToContents); ui->coins->header()->setSectionResizeMode(CoinsModel::AddressLabel, QHeaderView::Stretch); ui->coins->header()->setSortIndicator(CoinsModel::BlockHeight, Qt::DescendingOrder); diff --git a/src/coinswidget.h b/src/coinswidget.h index 0ff1d8e..ba158eb 100644 --- a/src/coinswidget.h +++ b/src/coinswidget.h @@ -67,6 +67,7 @@ private: Coins *m_coins; CoinsModel * m_model; CoinsProxyModel * m_proxyModel; + AppContext *m_ctx; void showContextMenu(const QPoint & point); void copy(copyField field); diff --git a/src/model/CoinsModel.cpp b/src/model/CoinsModel.cpp index ca788fc..f81cf52 100644 --- a/src/model/CoinsModel.cpp +++ b/src/model/CoinsModel.cpp @@ -19,6 +19,9 @@ CoinsModel::CoinsModel(QObject *parent, Coins *coins) { connect(m_coins, &Coins::refreshStarted, this, &CoinsModel::startReset); connect(m_coins, &Coins::refreshFinished, this, &CoinsModel::endReset); + + m_eye = QIcon(":/assets/images/eye1.png"); + m_eyeBlind = QIcon(":/assets/images/eye_blind.png"); } void CoinsModel::startReset(){ @@ -82,6 +85,19 @@ QVariant CoinsModel::data(const QModelIndex &index, int role) const result = Qt::AlignRight; } } + else if (role == Qt::DecorationRole) { + switch (index.column()) { + case KeyImageKnown: + { + if (cInfo.keyImageKnown()) { + result = QVariant(m_eye); + } + else { + result = QVariant(m_eyeBlind); + } + } + } + } else if (role == Qt::FontRole) { switch(index.column()) { case PubKey: @@ -91,6 +107,16 @@ QVariant CoinsModel::data(const QModelIndex &index, int role) const } } else if (role == Qt::ToolTipRole) { + switch(index.column()) { + case KeyImageKnown: + { + if (cInfo.keyImageKnown()) { + result = "Key image known"; + } else { + result = "Key image unknown. Outgoing transactions that include this output will not be detected."; + } + } + } if (cInfo.frozen()) { result = "Output is frozen."; } diff --git a/src/model/CoinsModel.h b/src/model/CoinsModel.h index db4cb3d..8914ba4 100644 --- a/src/model/CoinsModel.h +++ b/src/model/CoinsModel.h @@ -9,6 +9,7 @@ #include #include #include +#include class Coins; class CoinsInfo; @@ -20,7 +21,8 @@ Q_OBJECT public: enum ModelColumn { - PubKey = 0, + KeyImageKnown = 0, + PubKey, OutputPoint, Address, AddressLabel, @@ -49,6 +51,8 @@ private: QVariant parseTransactionInfo(const CoinsInfo &cInfo, int column, int role) const; Coins *m_coins; + QIcon m_eye; + QIcon m_eyeBlind; }; #endif //FEATHER_COINSMODEL_H