diff options
Diffstat (limited to 'src/qt/qvalidatedlineedit.cpp')
-rw-r--r-- | src/qt/qvalidatedlineedit.cpp | 60 |
1 files changed, 59 insertions, 1 deletions
diff --git a/src/qt/qvalidatedlineedit.cpp b/src/qt/qvalidatedlineedit.cpp index 1e7596c9c1..c2567835c9 100644 --- a/src/qt/qvalidatedlineedit.cpp +++ b/src/qt/qvalidatedlineedit.cpp @@ -4,10 +4,13 @@ #include "qvalidatedlineedit.h" +#include "bitcoinaddressvalidator.h" #include "guiconstants.h" QValidatedLineEdit::QValidatedLineEdit(QWidget *parent) : - QLineEdit(parent), valid(true) + QLineEdit(parent), + valid(true), + checkValidator(0) { connect(this, SIGNAL(textChanged(QString)), this, SLOT(markValid())); } @@ -34,11 +37,20 @@ void QValidatedLineEdit::focusInEvent(QFocusEvent *evt) { // Clear invalid flag on focus setValid(true); + QLineEdit::focusInEvent(evt); } +void QValidatedLineEdit::focusOutEvent(QFocusEvent *evt) +{ + checkValidity(); + + QLineEdit::focusOutEvent(evt); +} + void QValidatedLineEdit::markValid() { + // As long as a user is typing ensure we display state as valid setValid(true); } @@ -47,3 +59,49 @@ void QValidatedLineEdit::clear() setValid(true); QLineEdit::clear(); } + +void QValidatedLineEdit::setEnabled(bool enabled) +{ + if (!enabled) + { + // A disabled QValidatedLineEdit should be marked valid + setValid(true); + } + else + { + // Recheck validity when QValidatedLineEdit gets enabled + checkValidity(); + } + + QLineEdit::setEnabled(enabled); +} + +void QValidatedLineEdit::checkValidity() +{ + if (text().isEmpty()) + { + setValid(true); + } + else if (hasAcceptableInput()) + { + setValid(true); + + // Check contents on focus out + if (checkValidator) + { + QString address = text(); + int pos = 0; + if (checkValidator->validate(address, pos) == QValidator::Acceptable) + setValid(true); + else + setValid(false); + } + } + else + setValid(false); +} + +void QValidatedLineEdit::setCheckValidator(const QValidator *v) +{ + checkValidator = v; +} |