diff options
Diffstat (limited to 'src/fieldcompletion.cpp')
-rw-r--r-- | src/fieldcompletion.cpp | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/fieldcompletion.cpp b/src/fieldcompletion.cpp new file mode 100644 index 0000000..cfaf894 --- /dev/null +++ b/src/fieldcompletion.cpp @@ -0,0 +1,73 @@ +/*************************************************************************** + copyright : (C) 2003-2006 by Robby Stephenson + email : [email protected] + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of version 2 of the GNU General Public License as * + * published by the Free Software Foundation; * + * * + ***************************************************************************/ + +#include "fieldcompletion.h" +#include "field.h" + +using Tellico::FieldCompletion; + +FieldCompletion::FieldCompletion(bool multiple_) : KCompletion(), m_multiple(multiple_) { +} + +QString FieldCompletion::makeCompletion(const QString& string_) { + if(completionMode() == KGlobalSettings::CompletionNone) { + m_beginText.truncate(0); + return QString::null; + } + + if(!m_multiple) { + return KCompletion::makeCompletion(string_); + } + + static QRegExp rx = Data::Field::delimiter(); + int pos = rx.searchRev(string_); + if(pos == -1) { + m_beginText.truncate(0); + return KCompletion::makeCompletion(string_); + } + + pos += rx.matchedLength(); + QString final = string_.mid(pos); + m_beginText = string_.mid(0, pos); + return m_beginText + KCompletion::makeCompletion(final); +} + +void FieldCompletion::clear() { + m_beginText.truncate(0); + KCompletion::clear(); +} + +void FieldCompletion::postProcessMatch(QString* match_) const { + if(m_multiple) { + match_->prepend(m_beginText); + } +} + +void FieldCompletion::postProcessMatches(QStringList* matches_) const { + if(m_multiple) { + for(QStringList::Iterator it = matches_->begin(); it != matches_->end(); ++it) { + (*it).prepend(m_beginText); + } + } +} + +void FieldCompletion::postProcessMatches(KCompletionMatches* matches_) const { + if(m_multiple) { + for(KCompletionMatches::Iterator it = matches_->begin(); it != matches_->end(); ++it) { + (*it).value().prepend(m_beginText); + } + } +} + + +#include "fieldcompletion.moc" |