aboutsummaryrefslogtreecommitdiff
path: root/src/qt/qvalidatedlineedit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qt/qvalidatedlineedit.cpp')
-rw-r--r--src/qt/qvalidatedlineedit.cpp123
1 files changed, 123 insertions, 0 deletions
diff --git a/src/qt/qvalidatedlineedit.cpp b/src/qt/qvalidatedlineedit.cpp
new file mode 100644
index 000000000..492b96ff0
--- /dev/null
+++ b/src/qt/qvalidatedlineedit.cpp
@@ -0,0 +1,123 @@
+// Copyright (c) 2011-2015 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 "qvalidatedlineedit.h"
+
+#include "bitcoinaddressvalidator.h"
+#include "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;
+}