diff options
author | Philip Kaufmann <phil.kaufmann@t-online.de> | 2013-11-20 15:56:51 +0100 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@gmail.com> | 2014-01-29 14:15:55 +0100 |
commit | c78bd937017212c89c1c7aab07399cec5b6b3bdd (patch) | |
tree | 92129bb63c2b9bbb724c3a2b4ad643710484e3ea /src/qt/bitcoinaddressvalidator.cpp | |
parent | aab8fc58c6e6dc6e0a104170bd2aa10dc1af5dea (diff) |
[Qt] extend validate line edit and btc address validator
- remove btc address length from address validator
- add an optional btc address check in validated line edit that defaults
to off and is used in GUIUtil::setupAddressWidget()
- an isAcceptable() check is added to validated line edit on focus out
which only kicks in, when a validator is used with that widget
- remove an isAcceptable() check from sendcoinsentry.cpp
- remove obsolete attributes from ui files, which are set by calling
GUIUtil::setupAddressWidget()
- move some more things to GUIUtil::setupAddressWidget() and remove them
from normal code e.g. placeholder text
Diffstat (limited to 'src/qt/bitcoinaddressvalidator.cpp')
-rw-r--r-- | src/qt/bitcoinaddressvalidator.cpp | 58 |
1 files changed, 37 insertions, 21 deletions
diff --git a/src/qt/bitcoinaddressvalidator.cpp b/src/qt/bitcoinaddressvalidator.cpp index 604f24192b..293cc168b9 100644 --- a/src/qt/bitcoinaddressvalidator.cpp +++ b/src/qt/bitcoinaddressvalidator.cpp @@ -1,9 +1,11 @@ -// Copyright (c) 2011-2013 The Bitcoin developers +// Copyright (c) 2011-2014 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "bitcoinaddressvalidator.h" +#include "base58.h" + /* Base58 characters are: "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" @@ -11,21 +13,23 @@ - All numbers except for '0' - All upper-case letters except for 'I' and 'O' - All lower-case letters except for 'l' - - User friendly Base58 input can map - - 'l' and 'I' to '1' - - '0' and 'O' to 'o' */ -BitcoinAddressValidator::BitcoinAddressValidator(QObject *parent) : +BitcoinAddressEntryValidator::BitcoinAddressEntryValidator(QObject *parent) : QValidator(parent) { } -QValidator::State BitcoinAddressValidator::validate(QString &input, int &pos) const +QValidator::State BitcoinAddressEntryValidator::validate(QString &input, int &pos) const { + Q_UNUSED(pos); + + // Empty address is "intermediate" input + if (input.isEmpty()) + return QValidator::Intermediate; + // Correction - for(int idx=0; idx<input.size();) + for (int idx = 0; idx < input.size();) { bool removeChar = false; QChar ch = input.at(idx); @@ -42,11 +46,13 @@ QValidator::State BitcoinAddressValidator::validate(QString &input, int &pos) co default: break; } + // Remove whitespace - if(ch.isSpace()) + if (ch.isSpace()) removeChar = true; + // To next character - if(removeChar) + if (removeChar) input.remove(idx, 1); else ++idx; @@ -54,14 +60,14 @@ QValidator::State BitcoinAddressValidator::validate(QString &input, int &pos) co // Validation QValidator::State state = QValidator::Acceptable; - for(int idx=0; idx<input.size(); ++idx) + for (int idx = 0; idx < input.size(); ++idx) { int ch = input.at(idx).unicode(); - if(((ch >= '0' && ch<='9') || - (ch >= 'a' && ch<='z') || - (ch >= 'A' && ch<='Z')) && - ch != 'l' && ch != 'I' && ch != '0' && ch != 'O') + if (((ch >= '0' && ch<='9') || + (ch >= 'a' && ch<='z') || + (ch >= 'A' && ch<='Z')) && + ch != 'l' && ch != 'I' && ch != '0' && ch != 'O') { // Alphanumeric and not a 'forbidden' character } @@ -71,11 +77,21 @@ QValidator::State BitcoinAddressValidator::validate(QString &input, int &pos) co } } - // Empty address is "intermediate" input - if(input.isEmpty()) - { - state = QValidator::Intermediate; - } - return state; } + +BitcoinAddressCheckValidator::BitcoinAddressCheckValidator(QObject *parent) : + QValidator(parent) +{ +} + +QValidator::State BitcoinAddressCheckValidator::validate(QString &input, int &pos) const +{ + Q_UNUSED(pos); + // Validate the passed Bitcoin address + CBitcoinAddress addr(input.toStdString()); + if (addr.IsValid()) + return QValidator::Acceptable; + + return QValidator::Invalid; +} |