--- /dev/null
+/***************************************************************************
+ * Copyright (C) 2005/06 by The Quassel Team *
+ * devel@quassel-irc.org *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+#include "tabcompleter.h"
+
+TabCompleter::TabCompleter(QLineEdit *l, QObject *parent) : QObject(parent) {
+ lineEdit = l;
+ enabled = false;
+ startOfLineSuffix = QString(": "); // TODO make start of line suffix configurable
+}
+
+void TabCompleter::updateNickList(QStringList l) {
+ nickList = l;
+}
+
+void TabCompleter::updateChannelList(QStringList l) {
+ channelList = l;
+}
+
+void TabCompleter::buildCompletionList() {
+ // this is the first time tab is pressed -> build up the completion list and it's iterator
+ QString tabAbbrev = lineEdit->text().left(lineEdit->cursorPosition()).section(' ',-1,-1);
+ completionList.clear();
+ foreach(QString nick, nickList) {
+ if(nick.toLower().startsWith(tabAbbrev.toLower())) {
+ completionList << nick;
+ }
+ }
+ completionList.sort();
+ nextCompletion = completionList.begin();
+ lastCompletionLength = tabAbbrev.length();
+}
+
+void TabCompleter::complete() {
+ if (not enabled) {
+ buildCompletionList();
+ enabled = true;
+ }
+
+ if (nextCompletion != completionList.end()) {
+ // clear previous completion
+ for (int i = 0; i < lastCompletionLength; i++) {
+ lineEdit->backspace();
+ }
+
+ // insert completion
+ lineEdit->insert(*nextCompletion);
+
+ // remember charcount to delete next time and advance to next completion
+ lastCompletionLength = nextCompletion->length();
+ nextCompletion++;
+
+ // we're completing the first word of the line
+ if(lineEdit->text().length() == lastCompletionLength) {
+ lineEdit->insert(startOfLineSuffix);
+ lastCompletionLength += 2;
+ }
+
+ // we're at the end of the list -> start over again
+ } else {
+ nextCompletion = completionList.begin();
+ }
+
+}
+
+void TabCompleter::disable() {
+ enabled = false;
+}
+