From 6bd3a50ed8d494647c1862b1dc49f4f056597458 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Thu, 20 Dec 2018 04:03:15 +0100 Subject: [PATCH] Ref T265, Ref T430, Ref T473 improved validator for parts --- src/blackgui/uppercasevalidator.cpp | 17 +++++++++++++---- src/blackgui/uppercasevalidator.h | 4 ++++ src/blackmisc/stringutils.h | 12 ++++++++++++ 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/blackgui/uppercasevalidator.cpp b/src/blackgui/uppercasevalidator.cpp index 9f98eb2cc..7ceb8130c 100644 --- a/src/blackgui/uppercasevalidator.cpp +++ b/src/blackgui/uppercasevalidator.cpp @@ -7,11 +7,13 @@ * contained in the LICENSE file. */ +#include "blackmisc/stringutils.h" #include "blackgui/uppercasevalidator.h" - #include #include +using namespace BlackMisc; + namespace BlackGui { CUpperCaseValidator::CUpperCaseValidator(QObject *parent) : QValidator(parent) @@ -19,11 +21,15 @@ namespace BlackGui CUpperCaseValidator::CUpperCaseValidator(int minLength, int maxLength, QObject *parent) : QValidator(parent), m_minLength(minLength), m_maxLength(maxLength) - { } + { + if (minLength < 1) { m_optionalValue = true; }; + } CUpperCaseValidator::CUpperCaseValidator(bool optionalValue, int minLength, int maxLength, QObject *parent) : QValidator(parent), m_optionalValue(optionalValue), m_minLength(minLength), m_maxLength(maxLength) - { } + { + if (minLength < 1) { m_optionalValue = true; }; + } QValidator::State CUpperCaseValidator::validate(QString &input, int &pos) const { @@ -54,6 +60,9 @@ namespace BlackGui { if (input.isEmpty()) { return; } input = input.toUpper(); + if (!m_allowedCharacters.isEmpty()) + { + input = removeIfNotInString(input, m_allowedCharacters); + } } - } // namespace diff --git a/src/blackgui/uppercasevalidator.h b/src/blackgui/uppercasevalidator.h index c9d0e4e97..6e641a566 100644 --- a/src/blackgui/uppercasevalidator.h +++ b/src/blackgui/uppercasevalidator.h @@ -36,6 +36,9 @@ namespace BlackGui //! Set restrictions void setRestrictions(const QStringList &restrictions) { m_restrictions = restrictions; } + //! Allowed characters + void setAllowedCharacters(const QString &chars) { m_allowedCharacters = chars.toUpper(); } + //! \copydoc QValidator::validate virtual State validate(QString &input, int &pos) const override; @@ -46,6 +49,7 @@ namespace BlackGui bool m_optionalValue = false; //!< allow empty int m_minLength = 0; int m_maxLength = 32678; //!< standard length + QString m_allowedCharacters; //!< allowedCharacters QStringList m_restrictions; //!< list of allowed strings }; } diff --git a/src/blackmisc/stringutils.h b/src/blackmisc/stringutils.h index 50bb45527..685b75304 100644 --- a/src/blackmisc/stringutils.h +++ b/src/blackmisc/stringutils.h @@ -44,6 +44,18 @@ namespace BlackMisc return result; } + //! Remove if in string + inline QString removeIfInString(const QString &string, const QString &inString) + { + return removeChars(string.simplified(), [&](QChar c) { return inString.contains(c); }); + } + + //! Remove if NOT in string + inline QString removeIfNotInString(const QString &string, const QString &inString) + { + return removeChars(string.simplified(), [&](QChar c) { return !inString.contains(c); }); + } + //! Remove line breaks and tabs inline QString removeLineBreakAndTab(const QString &s) {