qvalidatedlineedit.cpp
1 // Copyright (c) 2011-present The Bitcoin Core developers 2 // Distributed under the MIT software license, see the accompanying 3 // file COPYING or http://www.opensource.org/licenses/mit-license.php. 4 5 #include <qt/qvalidatedlineedit.h> 6 7 #include <qt/bitcoinaddressvalidator.h> 8 #include <qt/guiconstants.h> 9 10 QValidatedLineEdit::QValidatedLineEdit(QWidget* parent) 11 : QLineEdit(parent) 12 { 13 connect(this, &QValidatedLineEdit::textChanged, this, &QValidatedLineEdit::markValid); 14 } 15 16 void QValidatedLineEdit::setText(const QString& text) 17 { 18 QLineEdit::setText(text); 19 checkValidity(); 20 } 21 22 void QValidatedLineEdit::setValid(bool _valid) 23 { 24 if(_valid == this->valid) 25 { 26 return; 27 } 28 29 if(_valid) 30 { 31 setStyleSheet(""); 32 } 33 else 34 { 35 setStyleSheet("QValidatedLineEdit { " STYLE_INVALID "}"); 36 } 37 this->valid = _valid; 38 } 39 40 void QValidatedLineEdit::focusInEvent(QFocusEvent *evt) 41 { 42 // Clear invalid flag on focus 43 setValid(true); 44 45 QLineEdit::focusInEvent(evt); 46 } 47 48 void QValidatedLineEdit::focusOutEvent(QFocusEvent *evt) 49 { 50 checkValidity(); 51 52 QLineEdit::focusOutEvent(evt); 53 } 54 55 void QValidatedLineEdit::markValid() 56 { 57 // As long as a user is typing ensure we display state as valid 58 setValid(true); 59 } 60 61 void QValidatedLineEdit::clear() 62 { 63 setValid(true); 64 QLineEdit::clear(); 65 } 66 67 void QValidatedLineEdit::setEnabled(bool enabled) 68 { 69 if (!enabled) 70 { 71 // A disabled QValidatedLineEdit should be marked valid 72 setValid(true); 73 } 74 else 75 { 76 // Recheck validity when QValidatedLineEdit gets enabled 77 checkValidity(); 78 } 79 80 QLineEdit::setEnabled(enabled); 81 } 82 83 void QValidatedLineEdit::checkValidity() 84 { 85 if (text().isEmpty()) 86 { 87 setValid(true); 88 } 89 else if (hasAcceptableInput()) 90 { 91 setValid(true); 92 93 // Check contents on focus out 94 if (checkValidator) 95 { 96 QString address = text(); 97 int pos = 0; 98 if (checkValidator->validate(address, pos) == QValidator::Acceptable) 99 setValid(true); 100 else 101 setValid(false); 102 } 103 } 104 else 105 setValid(false); 106 107 Q_EMIT validationDidChange(this); 108 } 109 110 void QValidatedLineEdit::setCheckValidator(const QValidator *v) 111 { 112 checkValidator = v; 113 checkValidity(); 114 } 115 116 bool QValidatedLineEdit::isValid() 117 { 118 // use checkValidator in case the QValidatedLineEdit is disabled 119 if (checkValidator) 120 { 121 QString address = text(); 122 int pos = 0; 123 if (checkValidator->validate(address, pos) == QValidator::Acceptable) 124 return true; 125 } 126 127 return valid; 128 }