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); }
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); } }
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); } }
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; }
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); } }
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); }