23 #include "ircnicknamecompleter.h" 25 #include "gui/irc/ircuserlistmodel.h" 30 class IRCNicknameCompleterState
36 IRCNicknameCompleterState()
41 QString extractNicknamePrefix()
const 43 const QString NICKNAME_MATCH = R
"(\[\]\{\}\-\^\`\|\\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)
123 if (d->completer.currentRow() + 1 >= d->completer.completionCount())
124 d->completer.setCurrentRow(0);
126 d->completer.setCurrentRow(d->completer.currentRow() + 1);
127 return d->complete();
130 bool IRCNicknameCompleter::isReset()
const 132 return !d->state.isValid();
135 void IRCNicknameCompleter::reset()
137 d->state = IRCNicknameCompleterState();
140 void IRCNicknameCompleter::setModel(QAbstractItemModel *model)
142 d->completer.setModel(model);
IRCCompletionResult complete(const QString &textLine, int cursorPosition)
Parses current command line and returns a modified one.