23 #include "ircnicknamecompleter.h" 25 #include "gui/irc/ircuserlistmodel.h" 30 class IRCNicknameCompleterState
36 IRCNicknameCompleterState()
41 QString extractNicknamePrefix()
const 43 const QString NICKNAME_MATCH =
"\\[\\]\\{\\}\\-\\^\\`\\|\\\\A-Za-z0-9_";
44 QRegExp regex(QString(
"(?:.*)[^%1]?([%1]*)").arg(NICKNAME_MATCH));
45 regex.setCaseSensitivity(Qt::CaseInsensitive);
46 regex.setMinimal(
false);
47 regex.indexIn(leftText());
53 return cursorPos >= 0;
56 QString leftText()
const 58 return textLine.left(cursorPos);
61 QString leftTextMinusNicknamePrefix()
const 63 return textLine.left(cursorPos - extractNicknamePrefix().length());
66 QString rightText()
const 68 return textLine.mid(cursorPos);
72 DClass<IRCNicknameCompleter>
76 IRCNicknameCompleterState state;
81 if (!completer.currentCompletion().isEmpty())
83 result.textLine = leftTextWithCompletedNickname() + state.rightText();
84 result.cursorPos = leftTextWithCompletedNickname().length();
89 QString leftTextWithCompletedNickname()
const 91 return state.leftTextMinusNicknamePrefix() + completer.currentCompletion();
99 d->completer.setCaseSensitivity(Qt::CaseInsensitive);
100 d->completer.setCompletionRole(IRCUserListModel::RoleCleanNickname);
103 IRCNicknameCompleter::~IRCNicknameCompleter()
110 d->state = IRCNicknameCompleterState();
111 d->state.cursorPos = cursorPosition;
112 d->state.textLine = textLine;
114 QString nickPrefix = d->state.extractNicknamePrefix();
115 d->completer.setCompletionPrefix(nickPrefix);
116 return d->complete();
121 if (d->completer.completionCount() == 0)
125 if (d->completer.currentRow() + 1 >= d->completer.completionCount())
127 d->completer.setCurrentRow(0);
131 d->completer.setCurrentRow(d->completer.currentRow() + 1);
133 return d->complete();
136 bool IRCNicknameCompleter::isReset()
const 138 return !d->state.isValid();
141 void IRCNicknameCompleter::reset()
143 d->state = IRCNicknameCompleterState();
146 void IRCNicknameCompleter::setModel(QAbstractItemModel *model)
148 d->completer.setModel(model);
IRCCompletionResult complete(const QString &textLine, int cursorPosition)
Parses current command line and returns a modified one.