using Content.Shared.Chat; using Content.Shared.Input; using Robust.Client.UserInterface.Controls; namespace Content.Client.UserInterface.Systems.Chat.Controls; [Virtual] public class ChatInputBox : PanelContainer { public const string StyleClassChatPanel = "ChatPanel"; public const string StyleClassChatLineEdit = "ChatLineEdit"; public const string StyleClassChatFilterOptionButton = "ChatFilterOptionButton"; public readonly ChannelSelectorButton ChannelSelector; public readonly HistoryLineEdit Input; public readonly ChannelFilterButton FilterButton; public Button? EmojiButton; // Sunrise-Add protected readonly BoxContainer Container; protected ChatChannel ActiveChannel { get; private set; } = ChatChannel.Local; public ChatInputBox() { Container = new BoxContainer { Orientation = BoxContainer.LayoutOrientation.Horizontal, SeparationOverride = 4 }; AddChild(Container); ChannelSelector = new ChannelSelectorButton { Name = "ChannelSelector", ToggleMode = true, StyleClasses = { ChannelSelectorItemButton.StyleClassChatSelectorOptionButton }, MinWidth = 75 }; Container.AddChild(ChannelSelector); Input = new HistoryLineEdit { Name = "Input", PlaceHolder = GetChatboxInfoPlaceholder(), HorizontalExpand = true, StyleClasses = { StyleClassChatLineEdit } }; Container.AddChild(Input); FilterButton = new ChannelFilterButton { Name = "FilterButton", StyleClasses = { StyleClassChatFilterOptionButton } }; Container.AddChild(FilterButton); AddStyleClass(StyleClassChatPanel); ChannelSelector.OnChannelSelect += UpdateActiveChannel; } // Sunrise-Start public void ToggleEmojiButton(bool visible) { if (visible && EmojiButton == null) { EmojiButton = new Button { Name = "EmojiButton", Text = "☻", SetWidth = 30, ToolTip = Loc.GetString("messenger-emoji-button-tooltip") }; // Insert before FilterButton Container.AddChild(EmojiButton); FilterButton.SetPositionInParent(Container.ChildCount - 1); } if (EmojiButton != null) EmojiButton.Visible = visible; } // Sunrise-End private void UpdateActiveChannel(ChatSelectChannel selectedChannel) { ActiveChannel = (ChatChannel) selectedChannel; } private static string GetChatboxInfoPlaceholder() { return (BoundKeyHelper.IsBound(ContentKeyFunctions.FocusChat), BoundKeyHelper.IsBound(ContentKeyFunctions.CycleChatChannelForward)) switch { (true, true) => Loc.GetString("hud-chatbox-info", ("talk-key", BoundKeyHelper.ShortKeyName(ContentKeyFunctions.FocusChat)), ("cycle-key", BoundKeyHelper.ShortKeyName(ContentKeyFunctions.CycleChatChannelForward))), (true, false) => Loc.GetString("hud-chatbox-info-talk", ("talk-key", BoundKeyHelper.ShortKeyName(ContentKeyFunctions.FocusChat))), (false, true) => Loc.GetString("hud-chatbox-info-cycle", ("cycle-key", BoundKeyHelper.ShortKeyName(ContentKeyFunctions.CycleChatChannelForward))), (false, false) => Loc.GetString("hud-chatbox-info-unbound") }; } }