using Avalonia; using Avalonia.Controls; using Avalonia.Controls.Primitives; using System.Windows.Input; using Avalonia.Data; using Plpext.Core.Models; namespace Plpext.UI; public class AudioPlayerControl : TemplatedControl { public static readonly StyledProperty PlaybackStateProperty = AvaloniaProperty.Register(nameof(PlaybackState), defaultValue: PlaybackState.Unknown, inherits: false, defaultBindingMode: BindingMode.OneWay); public PlaybackState PlaybackState { get {return GetValue(PlaybackStateProperty);} set {SetValue(PlaybackStateProperty, value);} } public static readonly StyledProperty IsPlayingProperty = AvaloniaProperty.Register(nameof(IsPlaying), false, false, Avalonia.Data.BindingMode.TwoWay); public bool IsPlaying { get { return GetValue(IsPlayingProperty); } set { SetValue(IsPlayingProperty, value); } } public static readonly StyledProperty CurrentDurationProperty = AvaloniaProperty.Register ( name: nameof(CurrentDuration), defaultValue: "0:55", inherits: false, defaultBindingMode: Avalonia.Data.BindingMode.TwoWay, validate: (x) => x != "0" ); public string CurrentDuration { get { return GetValue(CurrentDurationProperty); } set { SetValue(CurrentDurationProperty, value); } } public static readonly StyledProperty TotalDurationProperty = AvaloniaProperty.Register ( name: nameof(TotalDuration), defaultValue: "1:07", inherits: false, defaultBindingMode: Avalonia.Data.BindingMode.TwoWay, validate: (x) => x != "0" ); public string TotalDuration { get { return GetValue(TotalDurationProperty); } set { SetValue(TotalDurationProperty, value); } } public static readonly StyledProperty ProgressProperty = AvaloniaProperty.Register ( name: nameof(Progress), defaultValue: 0, inherits: false, defaultBindingMode: Avalonia.Data.BindingMode.TwoWay, validate: (x) => x >= 0 ); public double Progress { get { return GetValue(ProgressProperty); } set { SetValue(ProgressProperty, value); } } public static readonly StyledProperty PlayCommandProperty = AvaloniaProperty.Register(nameof(PlayCommand)); public static readonly StyledProperty PlayCommandParameterProperty = AvaloniaProperty.Register(nameof(PlayCommandParameter)); public ICommand? PlayCommand { get => GetValue(PlayCommandProperty); set => SetValue(PlayCommandProperty, value); } public object? PlayCommandParameter { get => GetValue(PlayCommandParameterProperty); set => SetValue(PlayCommandParameterProperty, value); } public static readonly StyledProperty StopCommandProperty = AvaloniaProperty.Register(nameof(StopCommand)); public static readonly StyledProperty StopCommandParameterProperty = AvaloniaProperty.Register(nameof(StopCommandParameter)); public ICommand? StopCommand { get => GetValue(StopCommandProperty); set => SetValue(StopCommandProperty, value); } public object? StopCommandParameter { get => GetValue(StopCommandParameterProperty); set => SetValue(StopCommandParameterProperty, value); } }