Revert "Goida revert (#600)" (#601)

This reverts commit a95fe131
This commit is contained in:
ThereDrD
2024-08-09 21:08:34 +03:00
committed by GitHub
parent e2f75bb380
commit 8e4ebf02aa
408 changed files with 49995 additions and 42785 deletions

View File

@@ -0,0 +1,38 @@
using Content.Client.UserInterface.Fragments;
using Content.Shared._White.CartridgeLoader.Cartridges;
using Content.Shared.CartridgeLoader;
using Robust.Client.UserInterface;
namespace Content.Client._White.CartridgeLoader.Cartridges;
public sealed partial class MessagesUi : UIFragment
{
private MessagesUiFragment _fragment;
public override Control GetUIFragmentRoot()
{
return _fragment;
}
public override void Setup(BoundUserInterface userInterface, EntityUid? fragmentOwner)
{
_fragment = new MessagesUiFragment();
_fragment.OnMessageSent += note => SendMessagesMessage(MessagesUiAction.Send, note, null, userInterface);
_fragment.OnButtonPressed += userUid => SendMessagesMessage(MessagesUiAction.ChangeChat, null, userUid, userInterface);
}
public override void UpdateState(BoundUserInterfaceState state)
{
if (state is not MessagesUiState messagesState)
return;
_fragment.UpdateState(messagesState.Mode, messagesState.Users, messagesState.Messages, messagesState.Name);
}
private void SendMessagesMessage(MessagesUiAction action, string? stringInput, int? uidInput, BoundUserInterface userInterface)
{
var messagesMessage = new MessagesUiMessageEvent(action, stringInput, uidInput);
var message = new CartridgeUiMessage(messagesMessage);
userInterface.SendMessage(message);
}
}

View File

@@ -0,0 +1,125 @@
using System.Numerics;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Content.Shared._White.CartridgeLoader.Cartridges;
using Content.Shared.Roles;
using Robust.Shared.Prototypes;
namespace Content.Client._White.CartridgeLoader.Cartridges;
[GenerateTypedNameReferences]
public sealed partial class MessagesUiFragment : BoxContainer
{
public event Action<string>? OnMessageSent;
public event Action<int?>? OnButtonPressed;
private string _searchText = string.Empty;
public MessagesUiFragment()
{
RobustXamlLoader.Load(this);
Input.OnTextEntered += _ =>
{
if (!string.IsNullOrEmpty(Input.Text))
OnMessageSent?.Invoke(Input.Text);
Input.Clear();
};
BackButton.OnPressed += _ => OnButtonPressed?.Invoke(null);
SearchBar.OnTextChanged += OnSearchTextChanged;
UpdateState(MessagesUiStateMode.UserList, [], [], null);
}
public void UpdateState(MessagesUiStateMode mode, List<(MessagesUserData, int?)>? users, List<(string, int?)>? messages, string? name)
{
MessageContainer.DisposeAllChildren();
Input.Orphan();
BackButton.Orphan();
SearchBar.Visible = false;
if (mode == MessagesUiStateMode.Chat && messages != null)
{
HeaderLabel.Text = name;
foreach (var (senderName, message) in messages)
{
AddNote($"{senderName} {message}");
}
OverContainer.AddChild(Input);
HeaderBox.AddChild(BackButton);
BackButton.SetPositionInParent(0);
}
else if (mode == MessagesUiStateMode.Error)
{
HeaderLabel.Text = Loc.GetString("messages-pda-error-header");
AddNote(Loc.GetString("messages-pda-error-message"));
}
else if (mode == MessagesUiStateMode.UserList && users != null)
{
SearchBar.Visible = true;
HeaderLabel.Text = Loc.GetString("messages-pda-chat-choice");
foreach (var (messagesUser, userUid) in users)
{
AddButton(userUid, messagesUser.Name + ", " + messagesUser.Job, messagesUser.Department);
}
}
}
///<summary>
/// Adding a button for selecting a chat
///</summary>
private void AddButton(int? userUid, string userName, string departmentId)
{
var styleClass = IoCManager.Resolve<IPrototypeManager>().Index<DepartmentPrototype>(departmentId).ButtonStyle;
var button = new Button
{
Text = userName,
HorizontalExpand = true,
ClipText = true,
StyleClasses = { styleClass },
MinWidth = 60
};
button.OnPressed += _ => OnButtonPressed?.Invoke(userUid);
MessageContainer.AddChild(button);
}
///<summary>
/// Adding a text label to the message container
///</summary>
private void AddNote(string note)
{
MessageContainer.AddChild(new Label
{
Text = note,
HorizontalExpand = true,
ClipText = false
});
}
private bool ButtonIsVisible(Button button)
{
return string.IsNullOrEmpty(_searchText) || button.Text == null || button.Text.Contains(_searchText, StringComparison.OrdinalIgnoreCase);
}
private void UpdateVisibleButtons()
{
foreach (var child in MessageContainer.Children)
{
if (child is Button button)
button.Visible = ButtonIsVisible(button);
}
}
private void OnSearchTextChanged(LineEdit.LineEditEventArgs args)
{
_searchText = args.Text;
UpdateVisibleButtons();
MessagesScroll.SetScrollValue(Vector2.Zero);
}
}

View File

@@ -0,0 +1,17 @@
<cartridges1:MessagesUiFragment
xmlns="https://spacestation14.io"
xmlns:cartridges1="clr-namespace:Content.Client._White.CartridgeLoader.Cartridges"
Margin="1 0 2 0" Orientation="Vertical" HorizontalExpand="True" VerticalExpand="True">
<PanelContainer StyleClasses="BackgroundDark"/>
<BoxContainer Name="OverContainer" Orientation="Vertical" HorizontalExpand="True" VerticalExpand="True">
<BoxContainer Name="HeaderBox">
<Button Name="BackButton" Text="{Loc 'messages-pda-ui-back'}" HorizontalExpand="False"/>
<Label Name="HeaderLabel"/>
</BoxContainer>
<LineEdit Name="SearchBar" PlaceHolder="Search" HorizontalExpand="True" Margin="0 4" />
<ScrollContainer Name="MessagesScroll" HorizontalExpand="True" VerticalExpand="True" HScrollEnabled="True">
<BoxContainer Orientation="Vertical" Name="MessageContainer" HorizontalExpand="True" VerticalExpand="True"/>
</ScrollContainer>
<LineEdit Name="Input" HorizontalExpand="True" SetHeight="32"/>
</BoxContainer>
</cartridges1:MessagesUiFragment>