-void TabCompleter::buildCompletionList() {
- // ensure a safe state in case we return early.
- completionMap.clear();
- nextCompletion = completionMap.begin();
-
- // this is the first time tab is pressed -> build up the completion list and it's iterator
- QModelIndex currentIndex = Client::bufferModel()->currentIndex();
- if(!currentIndex.data(NetworkModel::BufferIdRole).isValid())
- return;
-
- NetworkId networkId = currentIndex.data(NetworkModel::NetworkIdRole).value<NetworkId>();
- QString bufferName = currentIndex.sibling(currentIndex.row(), 0).data().toString();
-
- const Network *network = Client::network(networkId);
- if(!network)
- return;
-
-
- QString tabAbbrev = inputLine->text().left(inputLine->cursorPosition()).section(' ',-1,-1);
- QRegExp regex(QString("^[^a-zA-Z]*").append(QRegExp::escape(tabAbbrev)), Qt::CaseInsensitive);
-
- switch(static_cast<BufferInfo::Type>(currentIndex.data(NetworkModel::BufferTypeRole).toInt())) {
- case BufferInfo::ChannelBuffer:
- IrcChannel *channel = network->ircChannel(bufferName);
- if(!channel)
- return;
- foreach(IrcUser *ircUser, channel->ircUsers()) {
- if(regex.indexIn(ircUser->nick()) > -1)
- completionMap[ircUser->nick().toLower()] = ircUser->nick();
- }
- break;
- case BufferInfo::QueryBuffer:
- if(regex.indexIn(bufferName) > -1)
- completionMap[bufferName.toLower()] = bufferName;
- case BufferInfo::StatusBuffer:
- if(!network->myNick().isEmpty() && regex.indexIn(network->myNick()) > -1)
- completionMap[network->myNick().toLower()] = network->myNick();
- break;
- default:
- return;
- }
-
- nextCompletion = completionMap.begin();
- lastCompletionLength = tabAbbrev.length();
-}