Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
<BoxContainer
xmlns="https://spacestation14.io"
xmlns:graphics="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client"
Orientation="Vertical"
HorizontalExpand="True">

<!-- Clickable chat row for DMs and joined groups -->
<Button Name="ChatButton"
StyleClasses="ButtonSquare"
HorizontalExpand="True"
Expand Down Expand Up @@ -31,18 +34,63 @@
HorizontalExpand="True"
VerticalExpand="True"
VerticalAlignment="Center">
<RichTextLabel Name="NameLabel"
StyleClasses="LabelHeading"
HorizontalExpand="True"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Margin="0 -2 0 0" />
<Label Name="JobLabel"
<Label Name="NameLabel"
StyleClasses="LabelHeading"
HorizontalExpand="True"
VerticalAlignment="Center"
Align="Center"
ClipText="True"
Margin="0 -2 0 0" />
<Label Name="SubLabel"
StyleClasses="LabelSubText"
HorizontalExpand="True"
ClipText="False"
HorizontalAlignment="Center" />
Align="Center"
ClipText="True" />
</BoxContainer>
</BoxContainer>
</Button>

<!-- Info row for public groups and invites: name + action buttons stacked -->
<PanelContainer Name="InfoPanel"
StyleClasses="ButtonSquare"
HorizontalExpand="True"
Margin="0 1"
Visible="False">
<BoxContainer Orientation="Vertical"
HorizontalExpand="True"
Margin="6 4">
<Label Name="InfoNameLabel"
StyleClasses="LabelHeading"
HorizontalExpand="True"
Align="Center"
ClipText="True"
Margin="0 -2 0 0" />
<Label Name="InfoSubLabel"
StyleClasses="LabelSubText"
HorizontalExpand="True"
ClipText="True" />
<BoxContainer Name="ActionButtons"
Orientation="Vertical"
HorizontalExpand="True"
Margin="0 3 0 0">
<Button Name="JoinButton"
Text="{Loc nano-chat-group-join}"
HorizontalExpand="True"
MinHeight="28"
StyleClasses="OpenBoth" />
<Button Name="AcceptButton"
Text="{Loc nano-chat-group-accept}"
HorizontalExpand="True"
MinHeight="28"
Margin="0 2 0 0"
StyleClasses="OpenBoth" />
<Button Name="DeclineButton"
Text="{Loc nano-chat-group-decline}"
HorizontalExpand="True"
MinHeight="28"
Margin="0 2 0 0"
StyleClasses="OpenBoth" />
</BoxContainer>
</BoxContainer>
</PanelContainer>
</BoxContainer>
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,75 @@ namespace Content.Client.ADT.CartridgeLoader.Cartridges;
public sealed partial class NanoChatEntry : BoxContainer
{
public event Action<uint>? OnPressed;
public event Action<uint>? OnJoinPressed;
public event Action<uint>? OnAcceptPressed;
public event Action<uint>? OnDeclinePressed;

private uint _number;
private Action<EventArgs>? _pressHandler;

public NanoChatEntry()
{
RobustXamlLoader.Load(this);

JoinButton.OnPressed += _ => OnJoinPressed?.Invoke(_number);
AcceptButton.OnPressed += _ => OnAcceptPressed?.Invoke(_number);
DeclineButton.OnPressed += _ => OnDeclinePressed?.Invoke(_number);
}

public void SetRecipient(NanoChatRecipient recipient, uint number, bool isSelected)
{
SetupButton(number, isSelected);

NameLabel.Text = recipient.Name;
SubLabel.Text = recipient.JobTitle ?? "";
SubLabel.Visible = !string.IsNullOrEmpty(recipient.JobTitle);
UnreadIndicator.Visible = recipient.HasUnread;
ActionButtons.Visible = false;
}

public void SetGroup(NanoChatGroup group, uint number, bool isSelected)
{
SetupButton(number, isSelected);

NameLabel.Text = group.Name;
SubLabel.Text = Loc.GetString("nano-chat-group-members-count", ("count", group.Members.Count));
SubLabel.Visible = true;
UnreadIndicator.Visible = group.HasUnread;
ActionButtons.Visible = false;
}

public void SetPublicGroup(NanoChatGroupInfo group, uint number)
{
_number = number;
ChatButton.Visible = false;
InfoPanel.Visible = true;

InfoNameLabel.Text = group.Name;
InfoSubLabel.Text = Loc.GetString("nano-chat-public-group-info",
("count", group.MemberCount),
("owner", group.OwnerName ?? Loc.GetString("nano-chat-group-unknown-owner")));
ActionButtons.Visible = true;
JoinButton.Visible = true;
AcceptButton.Visible = false;
DeclineButton.Visible = false;
}

public void SetInvite(NanoChatGroupInvite invite, uint number)
{
_number = number;
ChatButton.Visible = false;
InfoPanel.Visible = true;

InfoNameLabel.Text = invite.GroupName;
InfoSubLabel.Text = Loc.GetString("nano-chat-invite-row", ("from", invite.FromName));
ActionButtons.Visible = true;
JoinButton.Visible = false;
AcceptButton.Visible = true;
DeclineButton.Visible = true;
}

private void SetupButton(uint number, bool isSelected)
{
// Remove old handler if it exists
if (_pressHandler != null)
Expand All @@ -29,11 +89,7 @@ public void SetRecipient(NanoChatRecipient recipient, uint number, bool isSelect
_pressHandler = _ => OnPressed?.Invoke(_number);
ChatButton.OnPressed += _pressHandler;

NameLabel.Text = recipient.Name;
JobLabel.Text = recipient.JobTitle ?? "";
JobLabel.Visible = !string.IsNullOrEmpty(recipient.JobTitle);
UnreadIndicator.Visible = recipient.HasUnread;

ChatButton.ModulateSelfOverride = isSelected ? NanoChatMessageBubble.OwnMessageColor : null;
ChatButton.Disabled = false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,70 @@
HorizontalExpand="True"
VerticalExpand="True"
StyleClasses="AngleRect">
<ScrollContainer Margin="-10"
VerticalExpand="True"
HorizontalExpand="True">
<BoxContainer Name="ContactsList"
<BoxContainer Orientation="Vertical"
VerticalExpand="True"
HorizontalExpand="True"
Margin="6">
<!-- Поиск по имени или номеру -->
<PanelContainer StyleClasses="ButtonSquare"
Margin="0 4 0 0">
<LineEdit Name="SearchInput"
PlaceHolder="{Loc nano-chat-search-placeholder}" />
</PanelContainer>

<!-- Инлайн-создание группы: поле имени и публичность -->
<BoxContainer Name="CreateGroupPanel"
Orientation="Vertical"
VerticalExpand="True"
HorizontalExpand="True" />
</ScrollContainer>
Visible="False"
Margin="0 6 0 0">
<Label Text="{Loc nano-chat-group-name-label}"
StyleClasses="LabelHeading" />
<PanelContainer StyleClasses="ButtonSquare">
<LineEdit Name="GroupNameInput"
PlaceHolder="{Loc nano-chat-group-name-placeholder}" />
</PanelContainer>
<CheckBox Name="PublicCheck"
Text="{Loc nano-chat-group-public}"
Margin="0 4" />
</BoxContainer>

<ScrollContainer VerticalExpand="True"
HorizontalExpand="True"
Margin="0 4 0 0">
<BoxContainer Name="ContactsList"
Orientation="Vertical"
VerticalExpand="True"
HorizontalExpand="True" />
</ScrollContainer>

<!-- Кнопка создания группы; в режиме создания замещается Отменить/Создать -->
<BoxContainer Name="CreateGroupButtons"
Orientation="Horizontal"
HorizontalExpand="True"
Margin="0 6 0 0">
<Button Name="CreateGroupButton"
Text="{Loc nano-chat-create-group}"
HorizontalExpand="True"
MinHeight="28"
StyleClasses="OpenBoth" />
</BoxContainer>
<BoxContainer Name="ConfirmGroupButtons"
Orientation="Horizontal"
HorizontalExpand="True"
Visible="False"
Margin="0 6 0 0">
<Button Name="CancelCreateButton"
Text="{Loc nano-chat-cancel}"
HorizontalExpand="True"
MinHeight="28"
StyleClasses="OpenRight" />
<Button Name="ConfirmCreateButton"
Text="{Loc nano-chat-create}"
HorizontalExpand="True"
MinHeight="28"
Margin="4 0 0 0"
StyleClasses="OpenLeft"
Disabled="True" />
</BoxContainer>
</BoxContainer>
</cartridges:NanoChatLookupView>
Loading
Loading