2025-12-07 17:20:35 -08:00

106 lines
3.1 KiB
C#

using qtcnet_client.Controls;
using QtCNETAPI.Dtos.User;
using System.ComponentModel;
namespace qtcnet_client.Forms
{
public partial class ChatRoomForm : Form
{
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public string RoomId { get; set; } = string.Empty;
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public string RoomName { get; set; } = "Room";
public string SentMessage { get; private set; } = string.Empty;
public event EventHandler? OnSend;
public event EventHandler? OnClose;
public ChatRoomForm()
{
InitializeComponent();
}
private void ChatRoomForm_Load(object sender, EventArgs e)
{
Text = $"QtC.NET Chat Room - {RoomName}";
lblRoomName.Text = RoomName;
}
private void rtxtChatbox_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
if (ValidateChatBox())
{
SentMessage = rtxtChatbox.Text;
OnSend?.Invoke(this, EventArgs.Empty);
rtxtChatbox.Clear();
}
}
}
private void btnSend_Click(object sender, EventArgs e)
{
if (ValidateChatBox())
{
SentMessage = rtxtChatbox.Text;
OnSend?.Invoke(this, EventArgs.Empty);
rtxtChatbox.Clear();
}
}
private void ChatRoomForm_FormClosed(object sender, FormClosedEventArgs e)
{
OnClose?.Invoke(this, EventArgs.Empty);
Close();
}
public void AddUsersToRoomList(List<UserInformationDto> users)
{
lvUsers.SuspendLayout();
lvUsers.Items.Clear();
List<ListViewItem> lvis = [];
foreach (UserInformationDto user in users)
{
lvis.Add(new ListViewItem
{
Tag = user.Id,
Text = user.Username,
ImageIndex = user.Status
});
}
lvUsers.Items.AddRange([.. lvis.DistinctBy(u => u.Tag)]);
lvUsers.ResumeLayout(true);
}
public void AddUserToRoomList(UserInformationDto user)
{
ListViewItem lvi = new()
{
Tag = user.Id,
Text = user.Username,
ImageIndex = user.Status
};
lvUsers.Items.Add(lvi);
}
public void AddMessage(MessageControl messageCtrl)
{
messageCtrl.Width = flpMessages.ClientSize.Width - 10;
messageCtrl.Margin = new Padding(0, 0, 0, 6);
flpMessages.Controls.Add(messageCtrl);
flpMessages.ScrollControlIntoView(messageCtrl);
}
private bool ValidateChatBox()
{
return !string.IsNullOrWhiteSpace(rtxtChatbox.Text) || !string.IsNullOrEmpty(rtxtChatbox.Text);
}
}
}