]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Hover examine buttons (#35206)
authorKillerqu00 <47712032+Killerqu00@users.noreply.github.com>
Sat, 22 Mar 2025 02:22:01 +0000 (03:22 +0100)
committerGitHub <noreply@github.com>
Sat, 22 Mar 2025 02:22:01 +0000 (13:22 +1100)
* hover examine verbs (not aligned to the left yet)

* handle click hovers and align them to the left

* revert contrabandsystem changes (this is for another PR)

* add support for markup tags

Content.Client/Examine/ExamineButton.cs
Content.Client/Examine/ExamineSystem.cs
Content.Client/Verbs/UI/VerbMenuElement.cs
Content.Client/Verbs/VerbSystem.cs
Content.Server/Verbs/VerbSystem.cs
Content.Shared/Examine/ExamineSystemShared.Group.cs
Content.Shared/Verbs/Verb.cs

index 52ff7a972eb7334c3a2ecdd87f4caa54548aa35c..839e08f3d4602eaba57009109c64056c3d0c542e 100644 (file)
@@ -4,6 +4,7 @@ using Content.Shared.Verbs;
 using Robust.Client.AutoGenerated;
 using Robust.Client.Graphics;
 using Robust.Client.UserInterface.Controls;
+using Robust.Client.UserInterface.CustomControls;
 using Robust.Client.UserInterface.XAML;
 using Robust.Client.Utility;
 using Robust.Shared.Utility;
@@ -40,7 +41,17 @@ public sealed class ExamineButton : ContainerButton
             Disabled = true;
         }
 
-        ToolTip = verb.Message ?? verb.Text;
+        TooltipSupplier = sender =>
+        {
+            var label = new RichTextLabel();
+            label.SetMessage(FormattedMessage.FromMarkupOrThrow(verb.Message ?? verb.Text));
+
+            var tooltip = new Tooltip();
+            tooltip.GetChild(0).Children.Clear();
+            tooltip.GetChild(0).Children.Add(label);
+
+            return tooltip;
+        };
 
         Icon = new TextureRect
         {
index 1c1f1984de4e39c1668c0ef1c96149cf5178328a..07694ac24a323cda4b8d146569968dc6a97182d9 100644 (file)
@@ -298,10 +298,28 @@ namespace Content.Client.Examine
             {
                 Name = "ExamineButtonsHBox",
                 Orientation = LayoutOrientation.Horizontal,
-                HorizontalAlignment = Control.HAlignment.Right,
+                HorizontalAlignment = Control.HAlignment.Stretch,
                 VerticalAlignment = Control.VAlignment.Bottom,
             };
 
+            var hoverExamineBox = new BoxContainer
+            {
+                Name = "HoverExamineHBox",
+                Orientation = LayoutOrientation.Horizontal,
+                HorizontalAlignment = Control.HAlignment.Left,
+                VerticalAlignment = Control.VAlignment.Center,
+                HorizontalExpand = true
+            };
+
+            var clickExamineBox = new BoxContainer
+            {
+                Name = "ClickExamineHBox",
+                Orientation = LayoutOrientation.Horizontal,
+                HorizontalAlignment = Control.HAlignment.Right,
+                VerticalAlignment = Control.VAlignment.Center,
+                HorizontalExpand = true
+            };
+
             // Examine button time
             foreach (var verb in verbs)
             {
@@ -316,8 +334,15 @@ namespace Content.Client.Examine
 
                 var button = new ExamineButton(examine);
 
-                button.OnPressed += VerbButtonPressed;
-                buttonsHBox.AddChild(button);
+                if (examine.HoverVerb)
+                {
+                    hoverExamineBox.AddChild(button);
+                }
+                else
+                {
+                    button.OnPressed += VerbButtonPressed;
+                    clickExamineBox.AddChild(button);
+                }
             }
 
             var vbox = _examineTooltipOpen?.GetChild(0).GetChild(0);
@@ -334,6 +359,8 @@ namespace Content.Client.Examine
             {
                 vbox.Children.Remove(hbox.First());
             }
+            buttonsHBox.AddChild(hoverExamineBox);
+            buttonsHBox.AddChild(clickExamineBox);
             vbox.AddChild(buttonsHBox);
         }
 
index 1815144f7d775e200fd5f837394d9975bd52c667..f1f8972c459c2444c7e2295bcaa957c42d45a8e0 100644 (file)
@@ -3,10 +3,12 @@ using Content.Client.ContextMenu.UI;
 using Content.Shared.Verbs;
 using Robust.Client.GameObjects;
 using Robust.Client.UserInterface.Controls;
+using Robust.Client.UserInterface.CustomControls;
 using Robust.Client.Utility;
 using Robust.Shared.GameObjects;
 using Robust.Shared.IoC;
 using Robust.Shared.Maths;
+using Robust.Shared.Utility;
 
 namespace Content.Client.Verbs.UI
 {
@@ -27,7 +29,17 @@ namespace Content.Client.Verbs.UI
 
         public VerbMenuElement(Verb verb) : base(verb.Text)
         {
-            ToolTip = verb.Message;
+            TooltipSupplier = sender =>
+            {
+                var label = new RichTextLabel();
+                label.SetMessage(FormattedMessage.FromMarkupOrThrow(verb.Message ?? verb.Text));
+
+                var tooltip = new Tooltip();
+                tooltip.GetChild(0).Children.Clear();
+                tooltip.GetChild(0).Children.Add(label);
+
+                return tooltip;
+            };
             Disabled = verb.Disabled;
             Verb = verb;
 
index f592303d2819804f140beb693826f5839bdcda38..d6513c0a7809f2127879ca5b7503daa2d51344c6 100644 (file)
@@ -213,7 +213,7 @@ namespace Content.Client.Verbs
             {
                 // maybe send an informative pop-up message.
                 if (!string.IsNullOrWhiteSpace(verb.Message))
-                    _popupSystem.PopupEntity(verb.Message, user);
+                    _popupSystem.PopupEntity(FormattedMessage.RemoveMarkupOrThrow(verb.Message), user);
 
                 return;
             }
index ebb3bb1df3e66c7091d374c95ea5e15de9ca87f5..a0ca0a80dfd4be3857bb84841f6bda1bc9a52b2b 100644 (file)
@@ -7,6 +7,7 @@ using Content.Shared.Database;
 using Content.Shared.Hands.Components;
 using Content.Shared.Inventory.VirtualItem;
 using Content.Shared.Verbs;
+using Robust.Shared.Utility;
 
 namespace Content.Server.Verbs
 {
@@ -75,7 +76,7 @@ namespace Content.Server.Verbs
             {
                 // Send an informative pop-up message
                 if (!string.IsNullOrWhiteSpace(verb.Message))
-                    _popupSystem.PopupEntity(verb.Message, user, user);
+                    _popupSystem.PopupEntity(FormattedMessage.RemoveMarkupOrThrow(verb.Message), user, user);
 
                 return;
             }
index aaf850a5d31ab139ed6bf7d1016b552cb88f1b05..299d3c4af287f80cbcc69abd44fd826eca7f0593 100644 (file)
@@ -111,7 +111,7 @@ namespace Content.Shared.Examine
         /// <summary>
         ///     Either sends the details to a GroupExamineComponent if it finds one, or adds a details examine verb itself.
         /// </summary>
-        public void AddDetailedExamineVerb(GetVerbsEvent<ExamineVerb> verbsEvent, Component component, List<ExamineEntry> entries, string verbText, string iconTexture = DefaultIconTexture, string hoverMessage = "")
+        public void AddDetailedExamineVerb(GetVerbsEvent<ExamineVerb> verbsEvent, Component component, List<ExamineEntry> entries, string verbText, string iconTexture = DefaultIconTexture, string hoverMessage = "", bool isHoverExamine = false)
         {
             // If the entity has the GroupExamineComponent
             if (TryComp<GroupExamineComponent>(verbsEvent.Target, out var groupExamine))
@@ -142,17 +142,23 @@ namespace Content.Shared.Examine
             }
 
             var formattedMessage = GetFormattedMessageFromExamineEntries(entries);
+            var act = () =>
+            {
+                SendExamineTooltip(verbsEvent.User, verbsEvent.Target, formattedMessage, false, false);
+            };
+            if (isHoverExamine)
+            {
+                act = () => { };
+            }
 
             var examineVerb = new ExamineVerb()
             {
-                Act = () =>
-                {
-                    SendExamineTooltip(verbsEvent.User, verbsEvent.Target, formattedMessage, false, false);
-                },
+                Act = act,
                 Text = verbText,
                 Message = hoverMessage,
                 Category = VerbCategory.Examine,
                 Icon = new SpriteSpecifier.Texture(new(iconTexture)),
+                HoverVerb = isHoverExamine
             };
 
             verbsEvent.Verbs.Add(examineVerb);
@@ -161,18 +167,26 @@ namespace Content.Shared.Examine
         /// <summary>
         ///     Either adds a details examine verb, or sends the details to a GroupExamineComponent if it finds one.
         /// </summary>
-        public void AddDetailedExamineVerb(GetVerbsEvent<ExamineVerb> verbsEvent, Component component, ExamineEntry entry, string verbText, string iconTexture = DefaultIconTexture, string hoverMessage = "")
+        public void AddDetailedExamineVerb(GetVerbsEvent<ExamineVerb> verbsEvent, Component component, ExamineEntry entry, string verbText, string iconTexture = DefaultIconTexture, string hoverMessage = "", bool isHoverExamine = false)
         {
-            AddDetailedExamineVerb(verbsEvent, component, new List<ExamineEntry> { entry }, verbText, iconTexture, hoverMessage);
+            AddDetailedExamineVerb(verbsEvent, component, new List<ExamineEntry> { entry }, verbText, iconTexture, hoverMessage, isHoverExamine);
         }
 
         /// <summary>
         ///     Either adds a details examine verb, or sends the details to a GroupExamineComponent if it finds one.
         /// </summary>
-        public void AddDetailedExamineVerb(GetVerbsEvent<ExamineVerb> verbsEvent, Component component, FormattedMessage message, string verbText, string iconTexture = DefaultIconTexture, string hoverMessage = "")
+        public void AddDetailedExamineVerb(GetVerbsEvent<ExamineVerb> verbsEvent, Component component, FormattedMessage message, string verbText, string iconTexture = DefaultIconTexture, string hoverMessage = "", bool isHoverExamine = false)
         {
             var componentName = _componentFactory.GetComponentName(component.GetType());
-            AddDetailedExamineVerb(verbsEvent, component, new ExamineEntry(componentName, 0f, message), verbText, iconTexture, hoverMessage);
+            AddDetailedExamineVerb(verbsEvent, component, new ExamineEntry(componentName, 0f, message), verbText, iconTexture, hoverMessage, isHoverExamine);
+        }
+
+        /// <summary>
+        ///     Adds an icon aligned to the left of examine window that gives you info on hover.
+        /// </summary>
+        public void AddHoverExamineVerb(GetVerbsEvent<ExamineVerb> verbsEvent, Component component, string hoverMessage, string iconTexture = DefaultIconTexture)
+        {
+            AddDetailedExamineVerb(verbsEvent, component, FormattedMessage.Empty, "", iconTexture, hoverMessage, true);
         }
     }
 }
index 660a3bdf948d156cf1bb15804afabaf9f63bcef2..5faca9bb06771b3524aa110f2c5a175e3abc712b 100644 (file)
@@ -347,6 +347,7 @@ namespace Content.Shared.Verbs
         public override bool CloseMenuDefault => false; // for examine verbs, this will close the examine tooltip.
 
         public bool ShowOnExamineTooltip = true;
+        public bool HoverVerb = false; // aligned to the left, gives text on hover
     }
 
     /// <summary>