From 53a97e2a42676d7188bf4b951f2656c66c02c6a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81d=C3=A1m=20Kov=C3=A1cs?= Date: Mon, 28 Aug 2023 22:09:33 +0200 Subject: [PATCH] Ordering improvements --- .../ISizeItem.cs | 4 +- .../ViewModels/IElementViewModel.cs | 2 +- .../FileTime.ConsoleUI.App/MainWindow.cs | 7 +-- .../FileTime.Core.Abstraction.csproj | 1 + .../Traits/ISizeProvider.cs | 2 +- src/Core/FileTime.Core.Services/Tab.cs | 45 +++++++++++-------- .../FileTime.GuiApp.App/Views/ItemView.axaml | 2 +- 7 files changed, 37 insertions(+), 26 deletions(-) rename src/{AppCommon/FileTime.App.Core.Abstraction/Models => Core/FileTime.Core.Abstraction}/Traits/ISizeProvider.cs (72%) diff --git a/src/AppCommon/FileTime.App.ContainerSizeScanner.Abstractions/ISizeItem.cs b/src/AppCommon/FileTime.App.ContainerSizeScanner.Abstractions/ISizeItem.cs index abfc50f..0df71a8 100644 --- a/src/AppCommon/FileTime.App.ContainerSizeScanner.Abstractions/ISizeItem.cs +++ b/src/AppCommon/FileTime.App.ContainerSizeScanner.Abstractions/ISizeItem.cs @@ -1,5 +1,5 @@ -using FileTime.App.Core.Models.Traits; -using FileTime.Core.Models; +using FileTime.Core.Models; +using FileTime.Core.Traits; namespace FileTime.App.ContainerSizeScanner; diff --git a/src/AppCommon/FileTime.App.Core.Abstraction/ViewModels/IElementViewModel.cs b/src/AppCommon/FileTime.App.Core.Abstraction/ViewModels/IElementViewModel.cs index fbe04e2..6c4b326 100644 --- a/src/AppCommon/FileTime.App.Core.Abstraction/ViewModels/IElementViewModel.cs +++ b/src/AppCommon/FileTime.App.Core.Abstraction/ViewModels/IElementViewModel.cs @@ -1,6 +1,6 @@ using FileTime.App.Core.Models.Enums; -using FileTime.App.Core.Models.Traits; using FileTime.Core.Models; +using FileTime.Core.Traits; using InitableService; namespace FileTime.App.Core.ViewModels; diff --git a/src/ConsoleApp/FileTime.ConsoleUI.App/MainWindow.cs b/src/ConsoleApp/FileTime.ConsoleUI.App/MainWindow.cs index 5da278f..39af0fa 100644 --- a/src/ConsoleApp/FileTime.ConsoleUI.App/MainWindow.cs +++ b/src/ConsoleApp/FileTime.ConsoleUI.App/MainWindow.cs @@ -1,12 +1,12 @@ using System.Globalization; using FileTime.App.Core.Models.Enums; -using FileTime.App.Core.Models.Traits; using FileTime.App.Core.ViewModels; using FileTime.ConsoleUI.App.Configuration; using FileTime.ConsoleUI.App.Controls; using FileTime.ConsoleUI.App.Styling; using FileTime.Core.Enums; using FileTime.Core.Models; +using FileTime.Core.Traits; using Humanizer.Bytes; using Microsoft.Extensions.Options; using TerminalUI; @@ -538,6 +538,7 @@ public class MainWindow }), new StackPanel { + Orientation = Orientation.Horizontal, Extensions = {new GridPositionExtension(1, 0)}, ChildInitializer = { @@ -559,7 +560,7 @@ public class MainWindow }); }), - /*new TextBlock() + new TextBlock() .Setup(t => { if (!options.ShowAttributes) return; @@ -571,7 +572,7 @@ public class MainWindow }).Setup(s => s.Bind( s, dc => dc.BaseItem.Type == AbsolutePathType.Container, - s => s.IsVisible))*/ + s => s.IsVisible)) } }, } diff --git a/src/Core/FileTime.Core.Abstraction/FileTime.Core.Abstraction.csproj b/src/Core/FileTime.Core.Abstraction/FileTime.Core.Abstraction.csproj index 3a280f0..c49580b 100644 --- a/src/Core/FileTime.Core.Abstraction/FileTime.Core.Abstraction.csproj +++ b/src/Core/FileTime.Core.Abstraction/FileTime.Core.Abstraction.csproj @@ -26,4 +26,5 @@ + diff --git a/src/AppCommon/FileTime.App.Core.Abstraction/Models/Traits/ISizeProvider.cs b/src/Core/FileTime.Core.Abstraction/Traits/ISizeProvider.cs similarity index 72% rename from src/AppCommon/FileTime.App.Core.Abstraction/Models/Traits/ISizeProvider.cs rename to src/Core/FileTime.Core.Abstraction/Traits/ISizeProvider.cs index f4609f2..8a6a140 100644 --- a/src/AppCommon/FileTime.App.Core.Abstraction/Models/Traits/ISizeProvider.cs +++ b/src/Core/FileTime.Core.Abstraction/Traits/ISizeProvider.cs @@ -1,6 +1,6 @@ using DeclarativeProperty; -namespace FileTime.App.Core.Models.Traits; +namespace FileTime.Core.Traits; public interface ISizeProvider { diff --git a/src/Core/FileTime.Core.Services/Tab.cs b/src/Core/FileTime.Core.Services/Tab.cs index abffbed..8ecca8b 100644 --- a/src/Core/FileTime.Core.Services/Tab.cs +++ b/src/Core/FileTime.Core.Services/Tab.cs @@ -7,6 +7,7 @@ using DynamicData; using FileTime.Core.Helper; using FileTime.Core.Models; using FileTime.Core.Timeline; +using FileTime.Core.Traits; using ObservableComputations; using IContainer = FileTime.Core.Models.IContainer; @@ -100,18 +101,22 @@ public class Tab : ITab _ => throw new NotImplementedException() }; - return (itemComparer, order); + return (itemComparer, order, ordering is not ItemOrdering.Name and not ItemOrdering.NameDesc); }), (items, ordering) => { if (items is null) return Task.FromResult?>(null); - var (itemComparer, order) = ordering; + var (itemComparer, order, addName) = ordering; - ObservableCollection? orderedItems = items + var primaryOrderedItems = items .Ordering(i => i.Type) .ThenOrdering(itemComparer, order); + ObservableCollection? orderedItems = addName + ? primaryOrderedItems.ThenOrdering(i => i.DisplayName) + : primaryOrderedItems; + return Task.FromResult(orderedItems); } ); @@ -124,7 +129,7 @@ public class Tab : ITab var itemSelectingContext = new LastItemSelectingContext(CurrentLocation.Value); var lastItemSelectingContext = _lastItemSelectingContext; if (items == null || items.Count == 0) return Task.FromResult(null); - + _lastItemSelectingContext = itemSelectingContext; if (selected != null) { @@ -153,23 +158,23 @@ public class Tab : ITab }); DeclarativePropertyHelpers.CombineLatest( - CurrentItems, - CurrentSelectedItem, - (items, selected) => - { - if(items is null || selected is null) return Task.FromResult?>(null); - var primaryCandidates = items.SkipWhile(i => i.FullName is {Path: var p} && p != selected.Path.Path).Skip(1); - var secondaryCandidates = items.TakeWhile(i => i.FullName is {Path: var p} && p != selected.Path.Path).Reverse(); - var candidates = primaryCandidates - .Concat(secondaryCandidates) - .Select(c => new AbsolutePath(_timelessContentProvider, c)); + CurrentItems, + CurrentSelectedItem, + (items, selected) => + { + if (items is null || selected is null) return Task.FromResult?>(null); + var primaryCandidates = items.SkipWhile(i => i.FullName is {Path: var p} && p != selected.Path.Path).Skip(1); + var secondaryCandidates = items.TakeWhile(i => i.FullName is {Path: var p} && p != selected.Path.Path).Reverse(); + var candidates = primaryCandidates + .Concat(secondaryCandidates) + .Select(c => new AbsolutePath(_timelessContentProvider, c)); - return Task.FromResult(candidates); - }) + return Task.FromResult(candidates); + }) .Subscribe(candidates => { - if(candidates is null) return; - + if (candidates is null) return; + _selectedItemCandidates.Clear(); _selectedItemCandidates.AddRange(candidates); }); @@ -181,6 +186,10 @@ public class Tab : ITab { return element.Size; } + else if (item is ISizeProvider sizeProvider) + { + return sizeProvider.Size.Value; + } return -1; } diff --git a/src/GuiApp/Avalonia/FileTime.GuiApp.App/Views/ItemView.axaml b/src/GuiApp/Avalonia/FileTime.GuiApp.App/Views/ItemView.axaml index 1ffda4f..cc90140 100644 --- a/src/GuiApp/Avalonia/FileTime.GuiApp.App/Views/ItemView.axaml +++ b/src/GuiApp/Avalonia/FileTime.GuiApp.App/Views/ItemView.axaml @@ -6,7 +6,7 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:guiappvm="using:FileTime.GuiApp.App.ViewModels" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - xmlns:traits="clr-namespace:FileTime.App.Core.Models.Traits;assembly=FileTime.App.Core.Abstraction" + xmlns:traits="clr-namespace:FileTime.Core.Traits;assembly=FileTime.Core.Abstraction" x:Name="ItemRoot" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch"