summaryrefslogtreecommitdiffstats
path: root/src/fieldcompletion.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/fieldcompletion.cpp')
-rw-r--r--src/fieldcompletion.cpp73
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
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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"