Mercurial > hg > bitcoin
changeset 1269:fc98f15bed54 draft
Wallet encryption part 1: show wallet encryption status
author | Wladimir J. van der Laan <laanwj@gmail.com> |
---|---|
date | Tue, 23 Aug 2011 20:08:42 +0200 (2011-08-23) |
parents | 0d42e6d7078c |
children | 5785ebf92396 |
files | doc/assets-attribution.txt src/qt/bitcoin.qrc src/qt/bitcoingui.cpp src/qt/bitcoingui.h src/qt/guiconstants.h src/qt/res/icons/lock_closed.png src/qt/res/icons/lock_open.png src/qt/walletmodel.cpp src/qt/walletmodel.h |
diffstat | 9 files changed, 71 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/doc/assets-attribution.txt +++ b/doc/assets-attribution.txt @@ -15,7 +15,7 @@ License: Creative Commons Attribution (by) Site: http://findicons.com/icon/163938/book_open -Icon: src/qt/res/icons/connect*.png, src/qt/res/icons/synced.png +Icon: src/qt/res/icons/connect*.png, src/qt/res/icons/synced.png, src/qt/res/icons/lock_*.png Icon Pack: Human-O2 Designer: schollidesign License: GNU/GPL
--- a/src/qt/bitcoin.qrc +++ b/src/qt/bitcoin.qrc @@ -34,6 +34,8 @@ <file alias="tx_input">res/icons/tx_input.png</file> <file alias="tx_output">res/icons/tx_output.png</file> <file alias="tx_inout">res/icons/tx_inout.png</file> + <file alias="lock_closed">res/icons/lock_closed.png</file> + <file alias="lock_open">res/icons/lock_open.png</file> </qresource> <qresource prefix="/images"> <file alias="about">res/images/about.png</file>
--- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -18,6 +18,7 @@ #include "transactionview.h" #include "overviewpage.h" #include "bitcoinunits.h" +#include "guiconstants.h" #include <QApplication> #include <QMainWindow> @@ -118,9 +119,12 @@ QHBoxLayout *frameBlocksLayout = new QHBoxLayout(frameBlocks); frameBlocksLayout->setContentsMargins(3,0,3,0); frameBlocksLayout->setSpacing(3); + labelEncryptionIcon = new QLabel(); labelConnectionsIcon = new QLabel(); labelBlocksIcon = new QLabel(); frameBlocksLayout->addStretch(); + frameBlocksLayout->addWidget(labelEncryptionIcon); + frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelConnectionsIcon); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelBlocksIcon); @@ -244,6 +248,9 @@ receiveCoinsPage->setModel(walletModel->getAddressTableModel()); sendCoinsPage->setModel(walletModel); + setEncryptionStatus(walletModel->getEncryptionStatus()); + connect(walletModel, SIGNAL(encryptionStatusChanged(int)), this, SLOT(setEncryptionStatus(int))); + // Balloon popup for new transaction connect(walletModel->getTransactionTableModel(), SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(incomingTransaction(QModelIndex,int,int))); @@ -300,7 +307,7 @@ case 7: case 8: case 9: icon = ":/icons/connect_3"; break; default: icon = ":/icons/connect_4"; break; } - labelConnectionsIcon->setPixmap(QIcon(icon).pixmap(16,16)); + labelConnectionsIcon->setPixmap(QIcon(icon).pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE)); labelConnectionsIcon->setToolTip(tr("%n active connection(s) to Bitcoin network", "", count)); } @@ -351,7 +358,7 @@ if(secs < 30*60) { tooltip = tr("Up to date") + QString("\n") + tooltip; - labelBlocksIcon->setPixmap(QIcon(":/icons/synced").pixmap(16,16)); + labelBlocksIcon->setPixmap(QIcon(":/icons/synced").pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE)); } else { @@ -531,3 +538,22 @@ event->acceptProposedAction(); } +void BitcoinGUI::setEncryptionStatus(int status) +{ + switch(status) + { + case WalletModel::Unencrypted: + labelEncryptionIcon->hide(); + break; + case WalletModel::Unlocked: + labelEncryptionIcon->show(); + labelEncryptionIcon->setPixmap(QIcon(":/icons/lock_open").pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE)); + labelEncryptionIcon->setToolTip(tr("Wallet is <b>encrypted</b> and currently <b>unlocked</b>")); + break; + case WalletModel::Locked: + labelEncryptionIcon->show(); + labelEncryptionIcon->setPixmap(QIcon(":/icons/lock_closed").pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE)); + labelEncryptionIcon->setToolTip(tr("Wallet is <b>encrypted</b> and currently <b>locked</b>")); + break; + } +}
--- a/src/qt/bitcoingui.h +++ b/src/qt/bitcoingui.h @@ -57,6 +57,7 @@ AddressBookPage *receiveCoinsPage; SendCoinsDialog *sendCoinsPage; + QLabel *labelEncryptionIcon; QLabel *labelConnectionsIcon; QLabel *labelBlocksIcon; QLabel *progressBarLabel; @@ -85,6 +86,8 @@ public slots: void setNumConnections(int count); void setNumBlocks(int count); + void setEncryptionStatus(int status); + void error(const QString &title, const QString &message); /* It is currently not possible to pass a return value to another thread through BlockingQueuedConnection, so use an indirected pointer.
--- a/src/qt/guiconstants.h +++ b/src/qt/guiconstants.h @@ -1,9 +1,12 @@ #ifndef GUICONSTANTS_H #define GUICONSTANTS_H -/* milliseconds between model updates */ +/* Milliseconds between model updates */ static const int MODEL_UPDATE_DELAY = 500; +/* Size of icons in status bar */ +static const int STATUSBAR_ICONSIZE = 16; + /* Invalid field background style */ #define STYLE_INVALID "background:#FF8080"
new file mode 100644 index 0000000000000000000000000000000000000000..ce8da0bec7df7b25f2eded2ff7e5be5995c55f7b GIT binary patch literal 1237 zc$@*%1S<Q9P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800004b3#c}2nYxW zd<bNS000DxNkl<ZScS!x&x;gC6vscWe)Rm%9XEzZA|4D;Nbn#bkVA5Ek3kR*5<zpw zC4`_S&+%aX0AYm?@Q{B%$srKMA31mmo;)R&g+v%)+;ujy)4R^j^mM%(s(W_W?EF|Y zq?tEe)Ajn*=e_z?6(j8Ox_9s1!EU#Ev0kr#k|fDt5uw-X{n2bTf3ntIJAeNCpSy`C zyK%mA=g#NOxoee5WzWjW3f*p(5CYX|m7_<G((Cm$n$70L)2B~=|H=XG-o5*!bMD)A zyDe#&QmfTMp69>kd5(y@-EOx{p64tqEa>v`@>eHLocL~*xMmioTeof<6OqMMt0kM8 zo78Hx>mh_gXV0EJa_-!@Bde>cheYIhqtW2@?b~wTz=6d_j~*SHCAOQzDTHu2%QD~T zbeNl)`{vA<GnYsEFI>3r1o&ccaq+Kewfc3l+4S@C^Ou27r^TLHfg3k&)PPfIngT4< zYPBole6uXOVvJc@T3VuBub;Yq|9<VI0Xm(|aqoR4O;hqbzj^ZH$-y|^OP4MUvMjrq zrYWjg5s~As0-)i&r{C`*B9Eu}tLkG_rQ7WyB8`^@5D_mTBuRqzer)#Tl_bf)TFYQC z0PxfNXA&Vmy<VTmuK=Aj?Ct=Hto|Q>N~MCx^nL3;1yI%L0iDCSnZxe975}*S*?aGQ z)c?7gKCM4|u$rVDZxJJ?=0Fe;N;AeF0@gab_xL0cpCm4+cx}9v<cB|ax8GWBJ%8}S zFAEp1KK$)pz+=EX@aExnEC=_ku-^Kcm1ha<HSaby60*#a2ZM;g7{S><;)TR3bB&C~ z{yuNKwa%VHAN#!VVYRig+F;Cz7+Wh<$a5hZSgeD6^P7n6QLhNyE(A4LBRC7zLE^wU zrLtG4)fJUMKeLdBiBmTgKm@E&yvq?gAh$VHE2snYkmq0ooE5B5oB=0-qiEZJvw>h_ zqIf4(Kvf7q2x<r@IYJ&F0J#DJK?MO+01ILiBOpl30$_r6C(2cUpj$8+6jac>Bosgq zG^#nomsCN^#uS2y03vajm^e->rD(Bsq!=s?p9e6eWKc8|Xj4}1<O*mUNKu4<5y6-U zq@sucBZ?8h8O2IGT#SGWPnpRC<3&gj+=Mt-NfbXt;mhzkd`UzRDRdx;F(X>o;TnG$ zj_4;YqwSgKa2FePm%>$HYl?PwbtZr!)2MM7w#sbE!A0Vimb4Iss-s>nC_)Mml|l;& z8X`<k0o9^^Yf1z~B<cp4;p`aK5lbI4G$x906ikTa6C?^xwfGGpq1X#1PXA<pQiNp| zB3p{L61M;;#5o+OcwVj?VB1ve0-%f>gKJ>`T8L7H*+#f%R?4aYqQ&0v0u>kqkrA^d z23OU%ClprpkFd}5w`)g$r>*s0*HR7!?aBJnfo!x@);dUg4YRQh-AyFRVsh3-t9Uf= zuxBqiw;!E<9c?`C2DiVhYinJ7^6dGuG5HNad|}D9`}Vdg%oYa4`2-9K%eGm6<lY~7 zJ{T@%qNvNDZj9LxD@6~*xwQ>s6llBUg|Get^IH6RWVu+U00000NkvXXu0mjfxUEVa
new file mode 100644 index 0000000000000000000000000000000000000000..6a3a8edb2377721e37e0a0b6d9d52b4ee7b97b6e GIT binary patch literal 1442 zc$@*E1zq}yP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800004b3#c}2nYxW zd<bNS000G9Nkl<ZScR=sL5m#M5&o*`b#G74TFR~^SvZPyNqh?g1UX0tL5!m4BIAWz z0*moAS6y^51afc)2!n0>4}1uYl0!hqVpq8&rwzJ<U?O9KuoNuqO1qk!-8bF+s>+A% z8Luqu?5?7M=DpWbUGJ-}zN#S{z;52WiMp=QG!4fXix^|kG!0aB#LT0jC~R?Y@gN~V z2XS6rUY5G9&$#=q^F04~Q546C2vt>mv$3(UvcA6l>D=7hKNl7j(hCQ$yu5rQrS$uv zC>8<qhr=OajBt09Wr<_Qjv>$Utvh$_e3E6^yB988c<@31+_-TAA~I)YpM((3udc3A zRaIbSxI0u801#uO(P)ITXV2Q^=H^le;WwvGpMJPkeBR5!%raGd55TYP-MdGsTIYHG z7iRvYyT4pj)%@1h);S{jbbfw*bp85uo|&0BCnA5ib?a9Ce=%_N>Q#uy>3+Ze*~Z4k z?DqC{>i7GXnfb$og@t;j@0BZ8@({vrd%fNtQ%c#HGiSC_O6O0VI`xm|W?+4N9jdzM z?z4lz0L=X7JkQ_%{^bC0>C&Y-#`r<gG=GXQVlWt#s`~b{_<I7V>l)1bMqSs4G1kod z(Z!1wZ8!hRmoJ-{eJmoQwY4>*l+G<JElp)PO#4w);qE6>N>J5DM09(4KET@A+JCF6 z`Xa`7d^j8ybzL(6eJ%i<F#u#)R)r9D4K%ium6i1v;~UJ(y<QK~F5fQzhzQEEgoy0v zd+pja2e7)IxWGQz@Sp$=YWrd!gn+Uv;qEUSz%v#4w+|Ni^`GidZeEkmhd;a1pPdbE zdbj%KU+3ffe{aM%!YFP}Msc3!D2f6_uZLb)qF40LEBom8OY{%-vC-Vu&sT1*z4N=j zKc$D=7&yvee|`Dr-B*A7^#h3m!Enour{Ul;B2^*-;2`qJN@QR%2sg+wLRr>0bObnb z;s_ppiTeQF0`R|m0&oHR)!9Q2PyXnY|DYK>L@X_A7II>^C5VyGG!A!%Fpy=0JOlEK z&_AS@omadx&&Xf-1)Ba(KwnV+@Js<s)qpv{T>v=136O*!ge(9|1R_EvKnOq<fGjvd z1_&EK8654W)1<QtfL0nr4&el2MIb{)K*K-~0y{tiWCDl~L>$aOAb{B+tYC5w0ifLx z?AeCyEf|NlnK%G<7<{~id$*^yEKg^>`!wE71CzxZFk`qg+yOPf3@~luDg$r=n?sGE z4yZX)8Da$M038rOhnw13w^TZa0p{=Cw<{prt<;J#up@LOVQ&2n2%!DKoLU9|_)Z$B zLr3l2(e1r0lYu7XfqPf1=VHLS-Zl_yeBT5Ljm0{S&j2yT*LRuI#P3<QiwOP6#djQt zIw3ykN-Y(wD6vDh(=x<f{{;jPjd>>cq$E7S(5jy%7m+&{<0?(B{}cdS2IC8j;9!_{ zZP^Li96MSOEy!_ug2r@US{qE)KsV<_6v7H2OdcP10041<beRj<_e|RAbPoomYJj?G z5-?7&75n$NqHf~R6AGoSL#Eq4G~he-n1J|B+1}N<ea|$W72YK<orb3XFf%=R9HAzw zYM4n1Bm=3nQ&1hG4roWYb(4>+ZNa4Qq(D-D)Lqq}>JJ_dYlsM`>NAIQVCJkSij0Wz zqjUY@&GSDzarg&KG1`2X)uT~X*U0LcLz5(^QZN^3@d8XRCRJunA=8x4SeogfnR)3% zBjw5F!QDrr>r1!qt*yssW_49njhQt7(xhU{Od`S}5=4ZVIRKFEEX*tbgqekixO+Nz wxVyW#yP25*P%}%~TH0|oRZXgDX669=Tb!)P&su^EGXMYp07*qoM6N<$f>7J9+5i9m
--- a/src/qt/walletmodel.cpp +++ b/src/qt/walletmodel.cpp @@ -12,7 +12,8 @@ WalletModel::WalletModel(CWallet *wallet, OptionsModel *optionsModel, QObject *parent) : QObject(parent), wallet(wallet), optionsModel(optionsModel), addressTableModel(0), transactionTableModel(0), - cachedBalance(0), cachedUnconfirmedBalance(0), cachedNumTransactions(0) + cachedBalance(0), cachedUnconfirmedBalance(0), cachedNumTransactions(0), + cachedEncryptionStatus(Unencrypted) { // Until signal notifications is built into the bitcoin core, // simply update everything after polling using a timer. @@ -49,6 +50,7 @@ qint64 newBalance = getBalance(); qint64 newUnconfirmedBalance = getUnconfirmedBalance(); int newNumTransactions = getNumTransactions(); + EncryptionStatus newEncryptionStatus = getEncryptionStatus(); if(cachedBalance != newBalance || cachedUnconfirmedBalance != newUnconfirmedBalance) emit balanceChanged(newBalance, newUnconfirmedBalance); @@ -56,6 +58,9 @@ if(cachedNumTransactions != newNumTransactions) emit numTransactionsChanged(newNumTransactions); + if(cachedEncryptionStatus != newEncryptionStatus) + emit encryptionStatusChanged(newEncryptionStatus); + cachedBalance = newBalance; cachedUnconfirmedBalance = newUnconfirmedBalance; cachedNumTransactions = newNumTransactions; @@ -179,4 +184,18 @@ return transactionTableModel; } - +WalletModel::EncryptionStatus WalletModel::getEncryptionStatus() const +{ + if(!wallet->IsCrypted()) + { + return Unencrypted; + } + else if(wallet->IsLocked()) + { + return Locked; + } + else + { + return Unlocked; + } +}
--- a/src/qt/walletmodel.h +++ b/src/qt/walletmodel.h @@ -36,6 +36,13 @@ MiscError }; + enum EncryptionStatus + { + Unencrypted, // !wallet->IsCrypted() + Locked, // wallet->IsCrypted() && wallet->IsLocked() + Unlocked // wallet->IsCrypted() && !wallet->IsLocked() + }; + OptionsModel *getOptionsModel(); AddressTableModel *getAddressTableModel(); TransactionTableModel *getTransactionTableModel(); @@ -43,6 +50,9 @@ qint64 getBalance() const; qint64 getUnconfirmedBalance() const; int getNumTransactions() const; + EncryptionStatus getEncryptionStatus() const; + + bool isEncrypted() const; // Check address for validity bool validateAddress(const QString &address); @@ -74,10 +84,12 @@ qint64 cachedBalance; qint64 cachedUnconfirmedBalance; qint64 cachedNumTransactions; + EncryptionStatus cachedEncryptionStatus; signals: void balanceChanged(qint64 balance, qint64 unconfirmedBalance); void numTransactionsChanged(int count); + void encryptionStatusChanged(int status); // Asynchronous error notification void error(const QString &title, const QString &message);