Exemplo n.º 1
0
        private void DoNickCompletion()
        {
            int start = 0, end = 0;

            if (txtInput.Text.Length > 0)
            {
                start = Math.Max(0, txtInput.CaretIndex - 1);
                end   = start < txtInput.Text.Length ? start + 1 : start;

                while (start >= 0 && NicknameItem.IsNickChar(txtInput.Text[start]))
                {
                    start--;
                }
                start++;

                while (end < txtInput.Text.Length && NicknameItem.IsNickChar(txtInput.Text[end]))
                {
                    end++;
                }
            }
            else
            {
                start = end = 0;
            }

            if (end - start > 0)
            {
                string nickPart = txtInput.Text.Substring(start, end - start);
                string nextNick = null;
                if (_nickCandidates == null)
                {
                    _nickCandidates = (from n in this.Nicknames
                                       where n.Nickname.StartsWith(nickPart, StringComparison.InvariantCultureIgnoreCase)
                                       orderby n.Nickname.ToLowerInvariant()
                                       select n.Nickname).ToArray();
                    if (_nickCandidates.Length > 0)
                    {
                        nextNick = _nickCandidates[0];
                    }
                }

                for (int i = 0; i < _nickCandidates.Length; i++)
                {
                    if (string.Compare(_nickCandidates[i], nickPart, StringComparison.InvariantCulture) == 0)
                    {
                        nextNick = i < _nickCandidates.Length - 1 ? _nickCandidates[i + 1] : _nickCandidates[0];
                        break;
                    }
                }

                var keepNickCandidates = _nickCandidates;
                if (nextNick != null)
                {
                    txtInput.Text       = txtInput.Text.Substring(0, start) + nextNick + txtInput.Text.Substring(end);
                    txtInput.CaretIndex = start + nextNick.Length;
                }
                _nickCandidates = keepNickCandidates;
            }
        }
Exemplo n.º 2
0
        private void AddNick(ChannelLevel level, string nick)
        {
            this.RemoveNick(nick);
            var cn    = new NicknameItem(level, nick);
            int count = this.Nicknames.Count;

            if (count == 0 || cn.CompareTo(this.Nicknames[count - 1]) >= 0)
            {
                this.Nicknames.Add(cn);
            }
            else
            {
                int i;
                for (i = 0; i < this.Nicknames.Count; i++)
                {
                    if (cn.CompareTo(this.Nicknames[i]) < 0)
                    {
                        break;
                    }
                }
                this.Nicknames.Insert(i, cn);
            }
        }