Пример #1
0
        private void SetMessage(ChatMessage msg)
        {
            m_user = msg.User;

            m_ban = new TimeOutIcon(GetImage(s_ban), GetImage(s_check));
            m_ban.BaselineAlignment = BaselineAlignment.Center;
            m_ban.Clicked += m_ban_Clicked;
            m_ban.Restore += Unban;

            m_eight = new TimeOutIcon(GetImage(s_eight), GetImage(s_check));
            m_eight.BaselineAlignment = BaselineAlignment.Center;
            m_eight.Clicked += m_eight_Clicked;
            m_eight.Restore += Unban;

            m_timeout = new TimeOutIcon(GetImage(s_timeout), GetImage(s_check));
            m_timeout.Clicked += m_timeout_Clicked;
            m_timeout.BaselineAlignment = BaselineAlignment.Center;
            m_timeout.Restore += Unban;

            if (Controller.ShowTimestamps)
                Inlines.Add(new Run(DateTime.Now.ToString("hh:mm ")) { Foreground = (SolidColorBrush)(new BrushConverter().ConvertFrom("#707070")), BaselineAlignment = BaselineAlignment.Center });

            if (Controller.ShowIcons && Controller.CurrentUser.IsModerator)
            {
                Inlines.Add(m_ban);
                Inlines.Add(m_eight);
                Inlines.Add(m_timeout);
            }

            if (m_user.IsModerator)
            {
                m_mod = new InlineUIContainer(GetImage(s_mod));
                m_mod.BaselineAlignment = BaselineAlignment.Center;
                Inlines.Add(m_mod);
            }

            var user = msg.User;
            if (user.IsSubscriber)
            {
                var sub = new InlineUIContainer(GetImage(s_sub));
                sub.BaselineAlignment = BaselineAlignment.Center;
                Inlines.Add(sub);
            }

            Brush userColor = Brushes.Black;
            if (user.Color != null)
            {
                try
                {
                    userColor = (SolidColorBrush)(new BrushConverter().ConvertFrom(msg.User.Color));
                }
                catch (NotSupportedException)
                {
                }
            }

            m_name = new Run(user.Name) { FontWeight = FontWeights.Bold, Foreground = userColor, BaselineAlignment = BaselineAlignment.Center };
            Inlines.Add(m_name);

            if (msg.Type != ItemType.Action)
                Inlines.Add(new Run(": ") { BaselineAlignment = BaselineAlignment.Center });

            BuildText(msg);
        }
Пример #2
0
        private void BuildText(ChatMessage msg)
        {
            var text = msg.Message;
            var weight = (msg.Type == ItemType.Question) ? FontWeights.Bold : FontWeights.Normal;

            var set = TwitchHttp.Instance.ImageSet;
            if (set == null)
            {
                var run = new Run(text) { FontWeight = weight, BaselineAlignment = BaselineAlignment.Center };
                m_messages.Add(run);
                Inlines.Add(run);
                return;
            }

            int curr = 0;
            var emoticons = from item in set.Find(text, m_user.IconSet)
                            orderby item.Item2, item.Item3 descending, item.Item1.Default
                            select item;

            foreach (var item in emoticons)
            {
                var emote = item.Item1;
                var start = item.Item2;
                var len = item.Item3;

                if (start < curr)
                    continue;

                Image img = GetImage(emote);
                if (img != null)
                {
                    if (curr < start)
                    {
                        var run = new Run(text.Slice(curr, start)) { FontWeight = weight, BaselineAlignment = BaselineAlignment.Center };
                        m_messages.Add(run);
                        Inlines.Add(run);
                    }

                    InlineUIContainer cont = new InlineUIContainer(img);
                    cont.BaselineAlignment = BaselineAlignment.Center;
                    Inlines.Add(cont);
                }
                else
                {
                    var run = new Run(text.Slice(curr, start + len)) { FontWeight = weight, BaselineAlignment = BaselineAlignment.Center };
                    m_messages.Add(run);
                    Inlines.Add(run);
                }

                curr = start + len;
            }

            if (curr < text.Length)
            {
                var run = new Run(text.Substring(curr)) { FontWeight = weight, BaselineAlignment = BaselineAlignment.Center };
                m_messages.Add(run);
                Inlines.Add(run);
            }
        }
Пример #3
0
        private void BuildText(ChatMessage msg)
        {
            var text = msg.Message;
            var weight = (msg.Type == ItemType.Question) ? FontWeights.Bold : FontWeights.Normal;
            var color = (msg.Type == ItemType.Question) ? Brushes.Red : Brushes.Black;

            var items = from item in FindItems(msg)
                        orderby item.Offset, item.Length descending, item.Sort
                        select item;

            int curr = 0;
            foreach (var item in items)
            {
                var start = item.Offset;
                var len = item.Length;

                if (start < curr)
                    continue;

                var emote = item.Emoticon;
                Image img = GetImage(emote);
                if (img != null)
                {
                    if (curr < start)
                    {
                        var run = new Run(text.Slice(curr, start)) { Foreground = color, FontWeight = weight, BaselineAlignment = BaselineAlignment.Center };
                        m_messages.Add(run);
                        Inlines.Add(run);
                    }

                    InlineUIContainer cont = new InlineUIContainer(img);
                    cont.ToolTip = emote.Regex;
                    cont.BaselineAlignment = BaselineAlignment.Center;
                    Inlines.Add(cont);
                }
                else if (item.Url != null)
                {
                    var tmp = text.Slice(curr, start);
                    if (curr < start)
                    {
                        var run2 = new Run(text.Slice(curr, start)) { Foreground = color, FontWeight = weight, BaselineAlignment = BaselineAlignment.Center };
                        m_messages.Add(run2);
                        Inlines.Add(run2);
                    }

                    var url = text.Slice(start, start + len);
                    var run = new Run(url) { Foreground = Brushes.Blue, TextDecorations = System.Windows.TextDecorations.Underline, FontWeight = weight, BaselineAlignment = BaselineAlignment.Center };
                    run.MouseEnter += (s, o) => { System.Windows.Input.Mouse.OverrideCursor = System.Windows.Input.Cursors.Hand; };
                    run.MouseLeave += (s, o) => { System.Windows.Input.Mouse.OverrideCursor = System.Windows.Input.Cursors.Arrow; };
                    run.MouseRightButtonDown += RightClickLink;
                    run.MouseLeftButtonDown += LeftClickLink;
                    m_messages.Add(run);
                    Inlines.Add(run);
                }
                else
                {
                    var run = new Run(text.Slice(curr, start + len)) { Foreground = color, FontWeight = weight, BaselineAlignment = BaselineAlignment.Center };
                    m_messages.Add(run);
                    Inlines.Add(run);
                }

                curr = start + len;
            }

            if (curr < text.Length)
            {
                var run = new Run(text.Substring(curr)) { Foreground = color, FontWeight = weight, BaselineAlignment = BaselineAlignment.Center };
                m_messages.Add(run);
                Inlines.Add(run);
            }
        }
Пример #4
0
        IEnumerable<FindResult> FindItems(ChatMessage msg)
        {
            var text = msg.Message;
            var set = MainWindow.Emoticons;

            if (set != null)
                foreach (var emote in set.Find(text, m_user.ImageSet))
                    yield return new FindResult(emote);

            var urls = from Match match in s_url.Matches(text)
                       let groups = match.Groups
                       where s_urlExtensions.Contains(groups[groups.Count - 2].Value)
                       select new FindResult(match);

            foreach (var url in urls)
                yield return url;
        }
Пример #5
0
        private void BuildText(ChatMessage msg)
        {
            var text   = msg.Message;
            var weight = (msg.Type == ItemType.Question) ? FontWeights.Bold : FontWeights.Normal;
            var color  = (msg.Type == ItemType.Question) ? Brushes.Red : Brushes.Black;

            var items = from item in FindItems(msg)
                        orderby item.Offset, item.Length descending, item.Sort
            select item;

            int curr = 0;

            foreach (var item in items)
            {
                var start = item.Offset;
                var len   = item.Length;

                if (start < curr)
                {
                    continue;
                }

                var   emote = item.Emoticon;
                Image img   = GetImage(emote);
                if (img != null)
                {
                    if (curr < start)
                    {
                        var run = new Run(text.Slice(curr, start))
                        {
                            Foreground = color, FontWeight = weight, BaselineAlignment = BaselineAlignment.Center
                        };
                        m_messages.Add(run);
                        Inlines.Add(run);
                    }

                    InlineUIContainer cont = new InlineUIContainer(img);
                    cont.ToolTip           = emote.Regex;
                    cont.BaselineAlignment = BaselineAlignment.Center;
                    Inlines.Add(cont);
                }
                else if (item.Url != null)
                {
                    var tmp = text.Slice(curr, start);
                    if (curr < start)
                    {
                        var run2 = new Run(text.Slice(curr, start))
                        {
                            Foreground = color, FontWeight = weight, BaselineAlignment = BaselineAlignment.Center
                        };
                        m_messages.Add(run2);
                        Inlines.Add(run2);
                    }

                    var url = text.Slice(start, start + len);
                    var run = new Run(url)
                    {
                        Foreground = Brushes.Blue, TextDecorations = System.Windows.TextDecorations.Underline, FontWeight = weight, BaselineAlignment = BaselineAlignment.Center
                    };
                    run.MouseEnter           += (s, o) => { System.Windows.Input.Mouse.OverrideCursor = System.Windows.Input.Cursors.Hand; };
                    run.MouseLeave           += (s, o) => { System.Windows.Input.Mouse.OverrideCursor = System.Windows.Input.Cursors.Arrow; };
                    run.MouseRightButtonDown += RightClickLink;
                    run.MouseLeftButtonDown  += LeftClickLink;
                    m_messages.Add(run);
                    Inlines.Add(run);
                }
                else
                {
                    var run = new Run(text.Slice(curr, start + len))
                    {
                        Foreground = color, FontWeight = weight, BaselineAlignment = BaselineAlignment.Center
                    };
                    m_messages.Add(run);
                    Inlines.Add(run);
                }

                curr = start + len;
            }

            if (curr < text.Length)
            {
                var run = new Run(text.Substring(curr))
                {
                    Foreground = color, FontWeight = weight, BaselineAlignment = BaselineAlignment.Center
                };
                m_messages.Add(run);
                Inlines.Add(run);
            }
        }
Пример #6
0
        private void SetMessage(ChatMessage msg)
        {
            m_user = msg.User;

            m_ban = new TimeOutIcon(GetImage(s_ban), GetImage(s_check));
            m_ban.BaselineAlignment = BaselineAlignment.Center;
            m_ban.Clicked          += m_ban_Clicked;
            m_ban.Restore          += Unban;

            m_eight = new TimeOutIcon(GetImage(s_eight), GetImage(s_check));
            m_eight.BaselineAlignment = BaselineAlignment.Center;
            m_eight.Clicked          += m_eight_Clicked;
            m_eight.Restore          += Unban;

            m_timeout                   = new TimeOutIcon(GetImage(s_timeout), GetImage(s_check));
            m_timeout.Clicked          += m_timeout_Clicked;
            m_timeout.BaselineAlignment = BaselineAlignment.Center;
            m_timeout.Restore          += Unban;

            if (Controller.ShowTimestamps)
            {
                Inlines.Add(new Run(DateTime.Now.ToString("hh:mm "))
                {
                    Foreground = (SolidColorBrush)(new BrushConverter().ConvertFrom("#707070")), BaselineAlignment = BaselineAlignment.Center
                });
            }

            if (Controller.ShowIcons && Controller.CurrentUser.IsModerator)
            {
                Inlines.Add(m_ban);
                Inlines.Add(m_eight);
                Inlines.Add(m_timeout);
            }

            if (m_user.IsModerator)
            {
                m_mod = new InlineUIContainer(GetImage(s_mod));
                m_mod.BaselineAlignment = BaselineAlignment.Center;
                Inlines.Add(m_mod);
            }

            var user = msg.User;

            if (user.IsSubscriber)
            {
                var sub = new InlineUIContainer(GetImage(s_sub));
                sub.BaselineAlignment = BaselineAlignment.Center;
                Inlines.Add(sub);
            }

            Brush userColor = Brushes.Black;

            if (user.Color != null)
            {
                try
                {
                    userColor = (SolidColorBrush)(new BrushConverter().ConvertFrom(msg.User.Color));
                }
                catch (NotSupportedException)
                {
                }
            }

            m_name = new Run(user.Name)
            {
                FontWeight = FontWeights.Bold, Foreground = userColor, BaselineAlignment = BaselineAlignment.Center
            };
            Inlines.Add(m_name);

            if (msg.Type != ItemType.Action)
            {
                Inlines.Add(new Run(": ")
                {
                    BaselineAlignment = BaselineAlignment.Center
                });
            }

            BuildText(msg);
        }