66
77#include < key_io.h>
88
9+ #include < vector>
10+
911/* Base58 characters are:
1012 "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
1113
@@ -20,10 +22,8 @@ BitcoinAddressEntryValidator::BitcoinAddressEntryValidator(QObject *parent) :
2022{
2123}
2224
23- QValidator::State BitcoinAddressEntryValidator::validate (QString &input, int &pos ) const
25+ QValidator::State BitcoinAddressEntryValidator::validate (QString &input, std::vector< int >&error_locations ) const
2426{
25- Q_UNUSED (pos);
26-
2727 // Empty address is "intermediate" input
2828 if (input.isEmpty ())
2929 return QValidator::Intermediate;
@@ -73,23 +73,33 @@ QValidator::State BitcoinAddressEntryValidator::validate(QString &input, int &po
7373 }
7474 else
7575 {
76+ error_locations.push_back (idx);
7677 state = QValidator::Invalid;
7778 }
7879 }
7980
8081 return state;
8182}
8283
84+ QValidator::State BitcoinAddressEntryValidator::validate (QString &input, int &pos) const
85+ {
86+ std::vector<int > error_locations;
87+ const auto ret = validate (input, error_locations);
88+ if (!error_locations.empty ()) pos = error_locations.at (0 );
89+ return ret;
90+ }
91+
8392BitcoinAddressCheckValidator::BitcoinAddressCheckValidator (QObject *parent) :
84- QValidator (parent)
93+ BitcoinAddressEntryValidator (parent)
8594{
8695}
8796
88- QValidator::State BitcoinAddressCheckValidator::validate (QString &input, int &pos ) const
97+ QValidator::State BitcoinAddressCheckValidator::validate (QString &input, std::vector< int >&error_locations ) const
8998{
90- Q_UNUSED (pos);
9199 // Validate the passed Bitcoin address
92- if (IsValidDestinationString (input.toStdString ())) {
100+ std::string error_msg;
101+ CTxDestination dest = DecodeDestination (input.toStdString (), error_msg, &error_locations);
102+ if (IsValidDestination (dest)) {
93103 return QValidator::Acceptable;
94104 }
95105
0 commit comments