1 /***************************************************************************
2 * Copyright (C) 2005/06 by The Quassel Team *
3 * devel@quassel-irc.org *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
21 #include "tabcompleter.h"
23 TabCompleter::TabCompleter(QLineEdit *l, QObject *parent) : QObject(parent) {
26 startOfLineSuffix = QString(": "); // TODO make start of line suffix configurable
29 void TabCompleter::updateNickList(QStringList l) {
33 void TabCompleter::updateChannelList(QStringList l) {
37 void TabCompleter::buildCompletionList() {
38 // this is the first time tab is pressed -> build up the completion list and it's iterator
39 QString tabAbbrev = lineEdit->text().left(lineEdit->cursorPosition()).section(' ',-1,-1);
40 completionList.clear();
41 foreach(QString nick, nickList) {
42 if(nick.toLower().startsWith(tabAbbrev.toLower())) {
43 completionList << nick;
46 completionList.sort();
47 nextCompletion = completionList.begin();
48 lastCompletionLength = tabAbbrev.length();
51 void TabCompleter::complete() {
53 buildCompletionList();
57 if (nextCompletion != completionList.end()) {
58 // clear previous completion
59 for (int i = 0; i < lastCompletionLength; i++) {
60 lineEdit->backspace();
64 lineEdit->insert(*nextCompletion);
66 // remember charcount to delete next time and advance to next completion
67 lastCompletionLength = nextCompletion->length();
70 // we're completing the first word of the line
71 if(lineEdit->text().length() == lastCompletionLength) {
72 lineEdit->insert(startOfLineSuffix);
73 lastCompletionLength += 2;
76 // we're at the end of the list -> start over again
78 nextCompletion = completionList.begin();
83 void TabCompleter::disable() {