using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; using Dinah.Core; using LibationFileManager; using System.Collections.Generic; using Avalonia.Data.Converters; using System; using System.Globalization; using Avalonia.Data; using System.IO; using System.Reactive.Subjects; namespace LibationAvalonia.Controls { public class KnownDirectoryConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value is Configuration.KnownDirectories dir) return dir.GetDescription(); return new BindingNotification(new InvalidCastException(), BindingErrorType.Error); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return new BindingNotification(new InvalidCastException(), BindingErrorType.Error); } } public partial class DirectorySelectControl : UserControl { public static List DefaultKnownDirectories { get; } = new() { Configuration.KnownDirectories.WinTemp, Configuration.KnownDirectories.UserProfile, Configuration.KnownDirectories.AppDir, Configuration.KnownDirectories.MyDocs, Configuration.KnownDirectories.LibationFiles }; public static readonly StyledProperty SelectedDirectoryProperty = AvaloniaProperty.Register(nameof(SelectedDirectory)); public static readonly StyledProperty> KnownDirectoriesProperty = AvaloniaProperty.Register>(nameof(KnownDirectories), DefaultKnownDirectories); public static readonly StyledProperty SubDirectoryProperty = AvaloniaProperty.Register(nameof(SubDirectory)); public DirectorySelectControl() { InitializeComponent(); displayPathTbox = this.Get(nameof(displayPathTbox)); displayPathTbox.Bind(TextBox.TextProperty, TextboxPath); PropertyChanged += DirectorySelectControl_PropertyChanged; } private Subject TextboxPath = new Subject(); private void DirectorySelectControl_PropertyChanged(object sender, AvaloniaPropertyChangedEventArgs e) { if (e.Property.Name == nameof(SelectedDirectory)) { TextboxPath.OnNext( Path.Combine( SelectedDirectory is Configuration.KnownDirectories.None ? string.Empty : SelectedDirectory is Configuration.KnownDirectories.AppDir ? Configuration.AppDir_Absolute : Configuration.GetKnownDirectoryPath(SelectedDirectory) , SubDirectory ?? string.Empty)); } } public List KnownDirectories { get => GetValue(KnownDirectoriesProperty); set => SetValue(KnownDirectoriesProperty, value); } public Configuration.KnownDirectories SelectedDirectory { get => GetValue(SelectedDirectoryProperty); set => SetValue(SelectedDirectoryProperty, value); } public string SubDirectory { get => GetValue(SubDirectoryProperty); set => SetValue(SubDirectoryProperty, value); } } }