From d49e2cc84b1bd2f1207121e48df671fecf71cbf2 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Tue, 3 Nov 2015 15:49:13 +0000 Subject: [PATCH 1/2] Add Tick method to ChromeLogic. --- OpenRA.Game/Widgets/Widget.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/OpenRA.Game/Widgets/Widget.cs b/OpenRA.Game/Widgets/Widget.cs index 4a4c6d6786..c2e178a939 100644 --- a/OpenRA.Game/Widgets/Widget.cs +++ b/OpenRA.Game/Widgets/Widget.cs @@ -143,6 +143,7 @@ namespace OpenRA.Widgets public class ChromeLogic : IDisposable { public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } + public virtual void Tick() { } protected virtual void Dispose(bool disposing) { } } @@ -436,6 +437,10 @@ namespace OpenRA.Widgets Tick(); foreach (var child in Children) child.TickOuter(); + + if (LogicObjects != null) + foreach (var l in LogicObjects) + l.Tick(); } } From 797f8009664fe00445e6c2cd0458368248428e35 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Tue, 3 Nov 2015 16:03:07 +0000 Subject: [PATCH 2/2] Add unread message count to lobby chat tabs. --- .../Widgets/Logic/Lobby/LobbyLogic.cs | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs index 96c6ccca72..9a172d34a4 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs @@ -62,6 +62,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic readonly LabelWidget chatLabel; bool teamChat; + int lobbyChatUnreadMessages; + int globalChatLastReadMessages; + int globalChatUnreadMessages; + // Listen for connection failures void ConnectionStateChanged(OrderManager om) { @@ -583,6 +587,17 @@ namespace OpenRA.Mods.Common.Widgets.Logic globalChatInput.TakeKeyboardFocus(); }; + var globalChatLabel = globalChatTab.Text; + globalChatTab.GetText = () => + { + if (globalChatUnreadMessages == 0) + return globalChatLabel; + + return globalChatLabel + " ({0})".F(globalChatUnreadMessages); + }; + + globalChatLastReadMessages = Game.GlobalChat.History.Count; + var lobbyChat = lobby.Get("LOBBYCHAT"); lobbyChat.IsVisible = () => chatPanel == ChatPanelType.Lobby; @@ -624,6 +639,15 @@ namespace OpenRA.Mods.Common.Widgets.Logic chatTextField.TakeKeyboardFocus(); }; + var lobbyChatLabel = lobbyChatTab.Text; + lobbyChatTab.GetText = () => + { + if (lobbyChatUnreadMessages == 0) + return lobbyChatLabel; + + return lobbyChatLabel + " ({0})".F(lobbyChatUnreadMessages); + }; + lobbyChatPanel = lobby.Get("CHAT_DISPLAY"); chatTemplate = lobbyChatPanel.Get("CHAT_TEMPLATE"); lobbyChatPanel.RemoveChildren(); @@ -652,8 +676,23 @@ namespace OpenRA.Mods.Common.Widgets.Logic } } + public override void Tick() + { + var newMessages = Game.GlobalChat.History.Count; + globalChatUnreadMessages += newMessages - globalChatLastReadMessages; + globalChatLastReadMessages = newMessages; + + if (chatPanel == ChatPanelType.Lobby) + lobbyChatUnreadMessages = 0; + + if (chatPanel == ChatPanelType.Global) + globalChatUnreadMessages = 0; + } + void AddChatLine(Color c, string from, string text) { + lobbyChatUnreadMessages += 1; + var template = chatTemplate.Clone(); var nameLabel = template.Get("NAME"); var timeLabel = template.Get("TIME");