File indexing completed on 2024-05-05 17:42:43

0001 /*
0002     SPDX-FileCopyrightText: 2009 Andrey Batyiev <batyiev@gmail.com>
0003     SPDX-FileCopyrightText: 2015 Jan Grulich <jgrulich@redhat.com>
0004 
0005     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0006 */
0007 
0008 #include "listvalidator.h"
0009 
0010 #include <QStringList>
0011 
0012 ListValidator::ListValidator(QObject *parent)
0013     : QValidator(parent)
0014 {
0015 }
0016 
0017 ListValidator::~ListValidator() = default;
0018 
0019 QValidator::State ListValidator::validate(QString &text, int &pos) const
0020 {
0021     Q_ASSERT(inner);
0022     Q_UNUSED(pos);
0023 
0024     QStringList strings = text.split(QLatin1Char(','));
0025     int unusedPos;
0026     QValidator::State state = Acceptable;
0027     for (QStringList::iterator i = strings.begin(); i != strings.end(); ++i) {
0028         QString string = i->trimmed();
0029         const int position = i->indexOf(string);
0030         const int size = string.size();
0031         const QValidator::State current = inner->validate(string, unusedPos);
0032         i->replace(position, size, string);
0033         if (current == Invalid) {
0034             state = Invalid;
0035             break;
0036         }
0037         if (current == Intermediate) {
0038             if (state == Intermediate) {
0039                 state = Invalid;
0040                 break;
0041             }
0042             state = Intermediate;
0043         }
0044     }
0045     text = strings.join(QLatin1Char(','));
0046     return state;
0047 }
0048 
0049 void ListValidator::setInnerValidator(QValidator *validator)
0050 {
0051     inner = validator;
0052 }