File indexing completed on 2024-04-28 05:08:22
0001 /*************************************************************************** 0002 Copyright (C) 2003-2021 Robby Stephenson <robby@periapsis.org> 0003 ***************************************************************************/ 0004 0005 /*************************************************************************** 0006 * * 0007 * This program is free software; you can redistribute it and/or * 0008 * modify it under the terms of the GNU General Public License as * 0009 * published by the Free Software Foundation; either version 2 of * 0010 * the License or (at your option) version 3 or any later version * 0011 * accepted by the membership of KDE e.V. (or its successor approved * 0012 * by the membership of KDE e.V.), which shall act as a proxy * 0013 * defined in Section 14 of version 3 of the license. * 0014 * * 0015 * This program is distributed in the hope that it will be useful, * 0016 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 0017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 0018 * GNU General Public License for more details. * 0019 * * 0020 * You should have received a copy of the GNU General Public License * 0021 * along with this program. If not, see <http://www.gnu.org/licenses/>. * 0022 * * 0023 ***************************************************************************/ 0024 0025 #include "fieldcompletion.h" 0026 #include "fieldformat.h" 0027 0028 #include <KCompletion/KCompletionMatches> 0029 0030 using Tellico::FieldCompletion; 0031 0032 FieldCompletion::FieldCompletion(bool multiple_) : KCompletion(), m_multiple(multiple_) { 0033 } 0034 0035 QString FieldCompletion::makeCompletion(const QString& string_) { 0036 if(completionMode() == KCompletion::CompletionNone) { 0037 m_beginText.clear(); 0038 return QString(); 0039 } 0040 0041 if(!m_multiple) { 0042 return KCompletion::makeCompletion(string_); 0043 } 0044 0045 static const QRegularExpression rx = FieldFormat::delimiterRegularExpression(); 0046 QRegularExpressionMatch match; 0047 const int index = string_.lastIndexOf(rx, -1, &match); 0048 if(index < 0) { 0049 m_beginText.clear(); 0050 return KCompletion::makeCompletion(string_); 0051 } 0052 0053 const int pos = match.capturedEnd(); 0054 m_beginText = string_.mid(0, pos); 0055 // m_beginText is added back to the string in postProcessMatch 0056 return KCompletion::makeCompletion(string_.mid(pos)); 0057 } 0058 0059 void FieldCompletion::clear() { 0060 m_beginText.clear(); 0061 KCompletion::clear(); 0062 } 0063 0064 void FieldCompletion::postProcessMatch(QString* match_) const { 0065 if(m_multiple) { 0066 match_->prepend(m_beginText); 0067 } 0068 } 0069 0070 void FieldCompletion::postProcessMatches(QStringList* matches_) const { 0071 if(m_multiple) { 0072 for(QStringList::Iterator it = matches_->begin(); it != matches_->end(); ++it) { 0073 (*it).prepend(m_beginText); 0074 } 0075 } 0076 } 0077 0078 void FieldCompletion::postProcessMatches(KCompletionMatches* matches_) const { 0079 if(m_multiple) { 0080 for(KCompletionMatches::Iterator it = matches_->begin(); it != matches_->end(); ++it) { 0081 (*it).value().prepend(m_beginText); 0082 } 0083 } 0084 }