mirror of
https://github.com/J3vb/OwnCord.git
synced 2026-09-03 03:50:00 +03:00
Client UI: - Design system: Colors, Typography, Controls resource dictionaries - Message actions: reply compose bar, hover edit/delete/reply buttons - Rich content: code blocks, attachments, system messages, content parser - Server strip: 72px sidebar with server icons, home button, add server - Status picker: popup for changing online/idle/dnd/invisible status - ConnectPage: server health check dots with auto-refresh - User popup: profile card with banner, avatar, roles, member since - Emoji picker: 6 categories, search, grid of Unicode emojis - Settings overlay: full-screen with sidebar navigation - Friends/DM view: sidebar + friends list with tabs (online/all/pending) - Toast notifications: auto-dismiss after 3s with fade animation Models & services: - Attachment model added to Message, ApiMessage, ChatMessagePayload - EditMessageAsync, DeleteMessageAsync, SendStatusChangeAsync APIs - MessageContentParser (code blocks, inline code, bold, italic) - EmojiData, ToastService, HealthStatusToBrushConverter Server (from prior session): - Voice room management, SFU, speaker detection - ACME/TLS support, config improvements - Protocol and schema updates Tests: 331 passing (61 converter + 24 voice service + 34 voice VM + 41 parser + 9 edit/delete + existing)
79 lines
2.2 KiB
C#
79 lines
2.2 KiB
C#
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Input;
|
|
|
|
namespace OwnCord.Client.Controls;
|
|
|
|
public partial class MessageActionsBar : UserControl
|
|
{
|
|
public static readonly DependencyProperty ReplyCommandProperty =
|
|
DependencyProperty.Register(
|
|
nameof(ReplyCommand),
|
|
typeof(ICommand),
|
|
typeof(MessageActionsBar),
|
|
new PropertyMetadata(null));
|
|
|
|
public static readonly DependencyProperty EditCommandProperty =
|
|
DependencyProperty.Register(
|
|
nameof(EditCommand),
|
|
typeof(ICommand),
|
|
typeof(MessageActionsBar),
|
|
new PropertyMetadata(null));
|
|
|
|
public static readonly DependencyProperty DeleteCommandProperty =
|
|
DependencyProperty.Register(
|
|
nameof(DeleteCommand),
|
|
typeof(ICommand),
|
|
typeof(MessageActionsBar),
|
|
new PropertyMetadata(null));
|
|
|
|
public static readonly DependencyProperty IsOwnMessageProperty =
|
|
DependencyProperty.Register(
|
|
nameof(IsOwnMessage),
|
|
typeof(bool),
|
|
typeof(MessageActionsBar),
|
|
new PropertyMetadata(false));
|
|
|
|
public static readonly DependencyProperty CommandParameterProperty =
|
|
DependencyProperty.Register(
|
|
nameof(CommandParameter),
|
|
typeof(object),
|
|
typeof(MessageActionsBar),
|
|
new PropertyMetadata(null));
|
|
|
|
public ICommand? ReplyCommand
|
|
{
|
|
get => (ICommand?)GetValue(ReplyCommandProperty);
|
|
set => SetValue(ReplyCommandProperty, value);
|
|
}
|
|
|
|
public ICommand? EditCommand
|
|
{
|
|
get => (ICommand?)GetValue(EditCommandProperty);
|
|
set => SetValue(EditCommandProperty, value);
|
|
}
|
|
|
|
public ICommand? DeleteCommand
|
|
{
|
|
get => (ICommand?)GetValue(DeleteCommandProperty);
|
|
set => SetValue(DeleteCommandProperty, value);
|
|
}
|
|
|
|
public bool IsOwnMessage
|
|
{
|
|
get => (bool)GetValue(IsOwnMessageProperty);
|
|
set => SetValue(IsOwnMessageProperty, value);
|
|
}
|
|
|
|
public object? CommandParameter
|
|
{
|
|
get => GetValue(CommandParameterProperty);
|
|
set => SetValue(CommandParameterProperty, value);
|
|
}
|
|
|
|
public MessageActionsBar()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
}
|