git / moonbite-core / src/qt/qvalidatedlineedit.cpp · raw
// Copyright (c) 2011-2018 The Bitcoin Core developers// Distributed under the MIT software license, see the accompanying// file COPYING or http://www.opensource.org/licenses/mit-license.php.#include <qt/qvalidatedlineedit.h>#include <qt/bitcoinaddressvalidator.h>#include <qt/guiconstants.h>QValidatedLineEdit::QValidatedLineEdit(QWidget *parent) : QLineEdit(parent), valid(true), validating(true), checkValidator(nullptr){ connect(this, &QValidatedLineEdit::textChanged, this, &QValidatedLineEdit::markValid);}void QValidatedLineEdit::setValid(bool _valid){ if(_valid == this->valid) { return; } if(_valid) { setStyleSheet(""); } else { setStyleSheet(STYLE_INVALID); } this->valid = _valid;}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);}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 (!validating) return; 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); Q_EMIT validationDidChange(this);}void QValidatedLineEdit::setCheckValidator(const QValidator *v){ checkValidator = v;}bool QValidatedLineEdit::isValid(){ // use checkValidator in case the QValidatedLineEdit is disabled if (checkValidator) { QString address = text(); int pos = 0; if (checkValidator->validate(address, pos) == QValidator::Acceptable) return true; } return valid;}void QValidatedLineEdit::setValidating(bool validating){ this->validating = validating; if (!validating) { setValid(true); } else { checkValidity(); }}