]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
UI improvements for holopads (#34055)
authorchromiumboy <50505512+chromiumboy@users.noreply.github.com>
Sat, 28 Dec 2024 23:33:15 +0000 (17:33 -0600)
committerGitHub <noreply@github.com>
Sat, 28 Dec 2024 23:33:15 +0000 (00:33 +0100)
* Initial commit

* Minor update

Content.Client/Holopad/HolopadWindow.xaml
Content.Client/Holopad/HolopadWindow.xaml.cs
Content.Server/Telephone/TelephoneSystem.cs
Content.Shared/Telephone/SharedTelephoneSystem.cs
Content.Shared/Telephone/TelephoneComponent.cs
Resources/Locale/en-US/holopad/holopad.ftl
Resources/Locale/en-US/telephone/telephone.ftl

index 9c3dfab1ea67aab84a913b3de45e6016dc6a7671..882f918158a34ba31a3db05f9861d48c052076c8 100644 (file)
                 <!-- Header text -->
                 <BoxContainer MinHeight="60" Orientation="Vertical" VerticalAlignment="Center">
                     <Label Name="CallStatusText" Margin="10 5 10 0" ReservesSpace="False"/>
-                    <RichTextLabel Name="CallerIdText" HorizontalAlignment="Center" Margin="0 0 0 0" ReservesSpace="False"/>
+                    <BoxContainer Name="CallerIdContainer" Orientation="Vertical" ReservesSpace="False">
+                        <RichTextLabel Name="CallerIdText" HorizontalAlignment="Center" Margin="0 0 0 0"/>
+                        <Label Text="{Loc 'holopad-window-relay-label'}" Margin="10 5 10 0" ReservesSpace="False"/>
+                        <RichTextLabel Name="HolopadIdText" HorizontalAlignment="Center" Margin="0 0 0 10"/>
+                    </BoxContainer>
                 </BoxContainer>
 
                 <!-- Controls (the answer call button is absent when the phone is not ringing) -->
                     <PanelContainer Name="HolopadContactListHeaderPanel">
                         <Label Text="{Loc 'holopad-window-select-contact-from-list'}" HorizontalAlignment="Center" Margin="0 3 0 3"/>
                     </PanelContainer>
-                
+
                     <PanelContainer Name="HolopadContactListPanel">
-                        <ScrollContainer HorizontalExpand="True" VerticalExpand="True" Margin="8, 8, 8, 8" MinHeight="256">
+                        <BoxContainer Orientation="Vertical">
+
+                            <!-- Contact filter -->
+                            <LineEdit Name="SearchLineEdit" HorizontalExpand="True" Margin="4, 4, 4, 0"
+                                      PlaceHolder="{Loc holopad-window-filter-line-placeholder}" />
 
-                            <!-- If there is no data yet, this will be displayed -->
-                            <BoxContainer Name="FetchingAvailableHolopadsContainer" HorizontalAlignment="Center" HorizontalExpand="True" VerticalExpand="True" ReservesSpace="False">
-                                <Label Text="{Loc 'holopad-window-fetching-contacts-list'}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
-                            </BoxContainer>
+                            <ScrollContainer HorizontalExpand="True" VerticalExpand="True" Margin="8, 8, 8, 8" MinHeight="256">
 
-                            <!-- Container for the contacts -->
-                            <BoxContainer Name="ContactsList" Orientation="Vertical" HorizontalExpand="True" VerticalExpand="True" Margin="10 0 10 0"/>
-                        </ScrollContainer>
+                                <!-- If there is no data yet, this will be displayed -->
+                                <BoxContainer Name="FetchingAvailableHolopadsContainer" HorizontalAlignment="Center" HorizontalExpand="True" VerticalExpand="True" ReservesSpace="False">
+                                    <Label Text="{Loc 'holopad-window-fetching-contacts-list'}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                                </BoxContainer>
+
+                                <!-- Container for the contacts -->
+                                <BoxContainer Name="ContactsList" Orientation="Vertical" HorizontalExpand="True" VerticalExpand="True" Margin="10 0 10 0"/>
+                            </ScrollContainer>
+                        </BoxContainer>
                     </PanelContainer>
                 </BoxContainer>
 
index bcab0d43df14a744428494518434a0c50a662023..25982b901c279501872f4f06ef93245155a7c780 100644 (file)
@@ -171,8 +171,10 @@ public sealed partial class HolopadWindow : FancyWindow
 
         // Caller ID text
         var callerId = _telephoneSystem.GetFormattedCallerIdForEntity(telephone.LastCallerId.Item1, telephone.LastCallerId.Item2, Color.LightGray, "Default", 11);
+        var holoapdId = _telephoneSystem.GetFormattedDeviceIdForEntity(telephone.LastCallerId.Item3, Color.LightGray, "Default", 11);
 
         CallerIdText.SetMessage(FormattedMessage.FromMarkupOrThrow(callerId));
+        HolopadIdText.SetMessage(FormattedMessage.FromMarkupOrThrow(holoapdId));
         LockOutIdText.SetMessage(FormattedMessage.FromMarkupOrThrow(callerId));
 
         // Sort holopads alphabetically
@@ -236,10 +238,13 @@ public sealed partial class HolopadWindow : FancyWindow
         // Make / update required children
         foreach (var child in ContactsList.Children)
         {
-            if (child is not HolopadContactButton)
+            if (child is not HolopadContactButton contactButton)
                 continue;
 
-            var contactButton = (HolopadContactButton)child;
+            var passesFilter = string.IsNullOrEmpty(SearchLineEdit.Text) ||
+                               contactButton.Text?.Contains(SearchLineEdit.Text, StringComparison.CurrentCultureIgnoreCase) == true;
+
+            contactButton.Visible = passesFilter;
             contactButton.Disabled = (_currentState != TelephoneState.Idle || lockButtons);
         }
 
@@ -290,7 +295,7 @@ public sealed partial class HolopadWindow : FancyWindow
         FetchingAvailableHolopadsContainer.Visible = (ContactsList.ChildCount == 0);
         ActiveCallControlsContainer.Visible = (_currentState != TelephoneState.Idle || _currentUiKey == HolopadUiKey.AiRequestWindow);
         CallPlacementControlsContainer.Visible = !ActiveCallControlsContainer.Visible;
-        CallerIdText.Visible = (_currentState == TelephoneState.Ringing);
+        CallerIdContainer.Visible = (_currentState == TelephoneState.Ringing);
         AnswerCallButton.Visible = (_currentState == TelephoneState.Ringing);
     }
 
@@ -316,6 +321,7 @@ public sealed partial class HolopadWindow : FancyWindow
             HorizontalExpand = true;
             SetHeight = 32;
             Margin = new Thickness(0f, 1f, 0f, 1f);
+            ReservesSpace = false;
         }
 
         public void UpdateValues(NetEntity netEntity, string label)
index d4398c76d3f487f9bc604b97f89754c9e9e0e292..cb0c72939aaa86c3263bd91c77b09bfbda9e6247 100644 (file)
@@ -151,7 +151,7 @@ public sealed class TelephoneSystem : SharedTelephoneSystem
 
                     break;
 
-                // Try to hang up if their has been no recent in-call activity 
+                // Try to hang up if there has been no recent in-call activity
                 case TelephoneState.InCall:
                     if (_timing.CurTime > telephone.StateStartTime + TimeSpan.FromSeconds(telephone.IdlingTimeout))
                         EndTelephoneCalls(entity);
@@ -214,7 +214,8 @@ public sealed class TelephoneSystem : SharedTelephoneSystem
         source.Comp.LinkedTelephones.Add(receiver);
         source.Comp.Muted = options?.MuteSource == true;
 
-        receiver.Comp.LastCallerId = GetNameAndJobOfCallingEntity(user); // This will be networked when the state changes
+        var callerInfo = GetNameAndJobOfCallingEntity(user);
+        receiver.Comp.LastCallerId = (callerInfo.Item1, callerInfo.Item2, Name(source)); // This will be networked when the state changes
         receiver.Comp.LinkedTelephones.Add(source);
         receiver.Comp.Muted = options?.MuteReceiver == true;
 
index ab423623cb5eaaa6406cf2e08c017254b6b79f46..78a72d59a555d18a71a39da88687f8122a7412c2 100644 (file)
@@ -36,4 +36,21 @@ public abstract class SharedTelephoneSystem : EntitySystem
 
         return callerId;
     }
+
+    public string GetFormattedDeviceIdForEntity(string? deviceName, Color fontColor, string fontType = "Default", int fontSize = 12)
+    {
+        if (deviceName == null)
+        {
+            return Loc.GetString("chat-telephone-unknown-device",
+                ("color", fontColor),
+                ("fontType", fontType),
+                ("fontSize", fontSize));
+        }
+
+        return Loc.GetString("chat-telephone-device-id",
+            ("deviceName", deviceName),
+            ("color", fontColor),
+            ("fontType", fontType),
+            ("fontSize", fontSize));
+    }
 }
index 530748f4d37492762f2b17b125bee601214d5467..d739a8412d6e5a989f89381c2456e348f676bf85 100644 (file)
@@ -127,9 +127,10 @@ public sealed partial class TelephoneComponent : Component
 
     /// <summary>
     /// The presumed name and/or job of the last person to call this telephone
+    /// and the name of the device that they used to do so
     /// </summary>
     [ViewVariables, AutoNetworkedField]
-    public (string?, string?) LastCallerId;
+    public (string?, string?, string?) LastCallerId;
 }
 
 #region: Telephone events
index fbb7a78531e2c8c62c92e8650aa8f4fc395432e3..8a268eb1c32e962dbafac82817ffaeb3123492b5 100644 (file)
@@ -6,6 +6,7 @@ holopad-window-options = [color=darkgray][font size=10][italic]Please select an
 # Call status
 holopad-window-no-calls-in-progress = No holo-calls in progress
 holopad-window-incoming-call = Incoming holo-call from:
+holopad-window-relay-label = Originating at:
 holopad-window-outgoing-call = Attempting to establish a connection...
 holopad-window-call-in-progress = Holo-call in progress
 holopad-window-call-ending = Disconnecting...
@@ -28,6 +29,7 @@ holopad-window-access-denied = Access denied
 holopad-window-select-contact-from-list = Select a contact to initiate a holo-call
 holopad-window-fetching-contacts-list = No holopads are currently contactable
 holopad-window-contact-label = {CAPITALIZE($label)}
+holopad-window-filter-line-placeholder = Search for a contact
 
 # Flavor
 holopad-window-flavor-left = ⚠ Do not enter while projector is active
index 915d54843ff1f71e1e84005313064f910ac3a05d..b1b27768e6ec0a2a61a335de7f41c5fc4c95827e 100644 (file)
@@ -5,4 +5,6 @@ chat-telephone-message-wrap-bold = [color={$color}][bold]{$name}[/bold] {$verb},
 # Caller ID
 chat-telephone-unknown-caller = [color={$color}][font={$fontType} size={$fontSize}][bolditalic]Unknown caller[/bolditalic][/font][/color]
 chat-telephone-caller-id-with-job = [color={$color}][font={$fontType} size={$fontSize}][bold]{CAPITALIZE($callerName)} ({CAPITALIZE($callerJob)})[/bold][/font][/color]
-chat-telephone-caller-id-without-job = [color={$color}][font={$fontType} size={$fontSize}][bold]{CAPITALIZE($callerName)}[/bold][/font][/color]
\ No newline at end of file
+chat-telephone-caller-id-without-job = [color={$color}][font={$fontType} size={$fontSize}][bold]{CAPITALIZE($callerName)}[/bold][/font][/color]
+chat-telephone-unknown-device = [color={$color}][font={$fontType} size={$fontSize}][bolditalic]Unknown device[/bolditalic][/font][/color]
+chat-telephone-device-id = [color={$color}][font={$fontType} size={$fontSize}][bold]{CAPITALIZE($deviceName)}[/bold][/font][/color]