You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
2.5 KiB
123 lines
2.5 KiB
// Copyright (c) 2011-2017 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), |
|
checkValidator(0) |
|
{ |
|
connect(this, SIGNAL(textChanged(QString)), this, SLOT(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 (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; |
|
}
|
|
|