bfr/BFR/MainWindow.xaml.cs
adroslice 5d8327f071 Fully implemented Operations UI with one example
- You can now add, remove, modify and move operations
- FilterChangedAny was renamed to FilterChanged, the new event for the preview follows the same naming scheme with PreviewChanged
- Operations now actually verify that they're enabled (This was originally supposed to be done in the loop in Preview(), but this way seems nicer since it also removes the error label when the operation is disabled)
- The foundation has been laid to make it very easy to add more operations
2019-11-17 02:22:13 +01:00

92 lines
3.5 KiB
C#

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<FileModel>(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");
}
}
}