using System; using System.IO; using System.Linq; using System.Threading.Tasks; using System.Collections.Generic; using System.Text.RegularExpressions; using Avalonia.Input; using Avalonia.Controls; using Avalonia.Markup.Xaml; using Avalonia.Interactivity; using BFR.Helpers; using BFR.DataModels; namespace BFR { public partial class MainWindow : Window { public async Task OpenDirectoryButtonClick() => OpenDirectory(await new OpenFolderDialog() { Directory = WorkingDirectory }.ShowAsync(this)); public void OpenDirectory(string directory) { WorkingDirectory = directory; AllFiles.ReplaceAll(Directory.GetFiles(WorkingDirectory).Select(x => new FileModel(x))); Filter(); } public void FilterChanged(object sender, KeyEventArgs e) => Filter(); public void FilterChanged(object sender, RoutedEventArgs e) => Filter(); public void Filter() { // Filter all files in the directory for those satisfying the given filters Files.ReplaceAll(AllFiles.Where(x => (FilterExtension == "" || x.Extension == FilterExtension) && (FilterFullName ? x.FullName : x.Name).RegexContains(FilterRegex ? FilterPattern : Regex.Escape(FilterPattern)))); Preview(); } public void PreviewChanged(object sender, KeyEventArgs e) => Preview(); // TextBox.KeyUp public void PreviewChanged(object sender, RoutedEventArgs e) => Preview(); // CheckBox.Click public void PreviewChanged(object sender, SelectionChangedEventArgs e) => Preview(); // ComboBox.SelectionChanged public void PreviewChanged(object sender, NumericUpDownValueChangedEventArgs e) => Preview(); // NumericUpDown.ValueChanged public void Preview() { // Reset all files to how they currently exist foreach (var file in Files) file.Path = file.OldPath; // Apply operations foreach (var operation in Operations) operation.ApplyTo(Files); // Refresh the file list to guarantee that changes are displayed. TODO: Find a better way to do this. Files.ReplaceAll(new List(Files)); } public void AddOperation() { Operations.Insert( SelectedOperation >= 0 ? SelectedOperation + 1 : Operations.Count, OperationTypes[SelectedOperationType].Create()); Preview(); } public void RemoveOperation() { if (SelectedOperation >= 0) Operations.RemoveAt(SelectedOperation); else Operations.RemoveAt(0); Preview(); } public void MoveOperation(object sender, SpinEventArgs e) { if (Operations.Count > 1) if (e.Direction == SpinDirection.Increase && SelectedOperation > 0) Operations.Move(SelectedOperation, SelectedOperation - 1); else if (e.Direction == SpinDirection.Decrease && SelectedOperation < Operations.Count - 1) Operations.Move(SelectedOperation, SelectedOperation + 1); Preview(); } public MainWindow() => InitializeComponent(); private void InitializeComponent() { AvaloniaXamlLoader.Load(this); DataContext = this; OpenDirectory(Environment.OSVersion.Platform == PlatformID.Win32NT ? @"C:\Users" : @"\home"); } } }