- QString tabAbbrev = lineEdit->text().left(lineEdit->cursorPosition()).section(' ',-1,-1);
- completionList.clear();
- foreach(QString nick, nickList) {
- if(nick.toLower().startsWith(tabAbbrev.toLower())) {
- completionList << nick;
+ QModelIndex currentIndex = Client::bufferModel()->currentIndex();
+ if(!currentIndex.data(NetworkModel::BufferIdRole).isValid()) {
+ nextCompletion = completionMap.begin();
+ return;
+ }
+
+ NetworkId networkId = currentIndex.data(NetworkModel::NetworkIdRole).value<NetworkId>();
+ QString channelName = currentIndex.sibling(currentIndex.row(), 0).data().toString();
+
+ const Network *network = Client::network(networkId);
+ if(!network)
+ return;
+
+ IrcChannel *channel = network->ircChannel(channelName);
+ if(!channel)
+ return;
+
+ // FIXME commented for debugging
+ /*
+ disconnect(this, SLOT(ircUserJoinedOrParted(IrcUser *)));
+ connect(channel, SIGNAL(ircUserJoined(IrcUser *)),
+ this, SLOT(ircUserJoinedOrParted(IrcUser *)));
+ connect(channel, SIGNAL(ircUserParted(IrcUser *)),
+ this, SLOT(ircUserJoinedOrParted(IrcUser *)));
+ */
+
+ QString tabAbbrev = inputLine->text().left(inputLine->cursorPosition()).section(' ',-1,-1);
+ QRegExp regex(QString("^[^a-zA-Z]*").append(QRegExp::escape(tabAbbrev)), Qt::CaseInsensitive);
+
+ foreach(IrcUser *ircUser, channel->ircUsers()) {
+ if(regex.indexIn(ircUser->nick()) > -1) {
+ completionMap[ircUser->nick().toLower()] = ircUser->nick();