Ordering improvements

This commit is contained in:
2023-08-28 22:09:33 +02:00
parent c7b29abca4
commit 53a97e2a42
7 changed files with 37 additions and 26 deletions

View File

@@ -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; namespace FileTime.App.ContainerSizeScanner;

View File

@@ -1,6 +1,6 @@
using FileTime.App.Core.Models.Enums; using FileTime.App.Core.Models.Enums;
using FileTime.App.Core.Models.Traits;
using FileTime.Core.Models; using FileTime.Core.Models;
using FileTime.Core.Traits;
using InitableService; using InitableService;
namespace FileTime.App.Core.ViewModels; namespace FileTime.App.Core.ViewModels;

View File

@@ -1,12 +1,12 @@
using System.Globalization; using System.Globalization;
using FileTime.App.Core.Models.Enums; using FileTime.App.Core.Models.Enums;
using FileTime.App.Core.Models.Traits;
using FileTime.App.Core.ViewModels; using FileTime.App.Core.ViewModels;
using FileTime.ConsoleUI.App.Configuration; using FileTime.ConsoleUI.App.Configuration;
using FileTime.ConsoleUI.App.Controls; using FileTime.ConsoleUI.App.Controls;
using FileTime.ConsoleUI.App.Styling; using FileTime.ConsoleUI.App.Styling;
using FileTime.Core.Enums; using FileTime.Core.Enums;
using FileTime.Core.Models; using FileTime.Core.Models;
using FileTime.Core.Traits;
using Humanizer.Bytes; using Humanizer.Bytes;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using TerminalUI; using TerminalUI;
@@ -538,6 +538,7 @@ public class MainWindow
}), }),
new StackPanel<IItemViewModel> new StackPanel<IItemViewModel>
{ {
Orientation = Orientation.Horizontal,
Extensions = {new GridPositionExtension(1, 0)}, Extensions = {new GridPositionExtension(1, 0)},
ChildInitializer = ChildInitializer =
{ {
@@ -559,7 +560,7 @@ public class MainWindow
}); });
}), }),
/*new TextBlock<IItemViewModel>() new TextBlock<IItemViewModel>()
.Setup(t => .Setup(t =>
{ {
if (!options.ShowAttributes) return; if (!options.ShowAttributes) return;
@@ -571,7 +572,7 @@ public class MainWindow
}).Setup(s => s.Bind( }).Setup(s => s.Bind(
s, s,
dc => dc.BaseItem.Type == AbsolutePathType.Container, dc => dc.BaseItem.Type == AbsolutePathType.Container,
s => s.IsVisible))*/ s => s.IsVisible))
} }
}, },
} }

View File

@@ -26,4 +26,5 @@
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -1,6 +1,6 @@
using DeclarativeProperty; using DeclarativeProperty;
namespace FileTime.App.Core.Models.Traits; namespace FileTime.Core.Traits;
public interface ISizeProvider public interface ISizeProvider
{ {

View File

@@ -7,6 +7,7 @@ using DynamicData;
using FileTime.Core.Helper; using FileTime.Core.Helper;
using FileTime.Core.Models; using FileTime.Core.Models;
using FileTime.Core.Timeline; using FileTime.Core.Timeline;
using FileTime.Core.Traits;
using ObservableComputations; using ObservableComputations;
using IContainer = FileTime.Core.Models.IContainer; using IContainer = FileTime.Core.Models.IContainer;
@@ -100,18 +101,22 @@ public class Tab : ITab
_ => throw new NotImplementedException() _ => throw new NotImplementedException()
}; };
return (itemComparer, order); return (itemComparer, order, ordering is not ItemOrdering.Name and not ItemOrdering.NameDesc);
}), }),
(items, ordering) => (items, ordering) =>
{ {
if (items is null) return Task.FromResult<ObservableCollection<IItem>?>(null); if (items is null) return Task.FromResult<ObservableCollection<IItem>?>(null);
var (itemComparer, order) = ordering; var (itemComparer, order, addName) = ordering;
ObservableCollection<IItem>? orderedItems = items var primaryOrderedItems = items
.Ordering(i => i.Type) .Ordering(i => i.Type)
.ThenOrdering(itemComparer, order); .ThenOrdering(itemComparer, order);
ObservableCollection<IItem>? orderedItems = addName
? primaryOrderedItems.ThenOrdering(i => i.DisplayName)
: primaryOrderedItems;
return Task.FromResult(orderedItems); return Task.FromResult(orderedItems);
} }
); );
@@ -124,7 +129,7 @@ public class Tab : ITab
var itemSelectingContext = new LastItemSelectingContext(CurrentLocation.Value); var itemSelectingContext = new LastItemSelectingContext(CurrentLocation.Value);
var lastItemSelectingContext = _lastItemSelectingContext; var lastItemSelectingContext = _lastItemSelectingContext;
if (items == null || items.Count == 0) return Task.FromResult<AbsolutePath?>(null); if (items == null || items.Count == 0) return Task.FromResult<AbsolutePath?>(null);
_lastItemSelectingContext = itemSelectingContext; _lastItemSelectingContext = itemSelectingContext;
if (selected != null) if (selected != null)
{ {
@@ -153,23 +158,23 @@ public class Tab : ITab
}); });
DeclarativePropertyHelpers.CombineLatest( DeclarativePropertyHelpers.CombineLatest(
CurrentItems, CurrentItems,
CurrentSelectedItem, CurrentSelectedItem,
(items, selected) => (items, selected) =>
{ {
if(items is null || selected is null) return Task.FromResult<IEnumerable<AbsolutePath>?>(null); if (items is null || selected is null) return Task.FromResult<IEnumerable<AbsolutePath>?>(null);
var primaryCandidates = items.SkipWhile(i => i.FullName is {Path: var p} && p != selected.Path.Path).Skip(1); 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 secondaryCandidates = items.TakeWhile(i => i.FullName is {Path: var p} && p != selected.Path.Path).Reverse();
var candidates = primaryCandidates var candidates = primaryCandidates
.Concat(secondaryCandidates) .Concat(secondaryCandidates)
.Select(c => new AbsolutePath(_timelessContentProvider, c)); .Select(c => new AbsolutePath(_timelessContentProvider, c));
return Task.FromResult(candidates); return Task.FromResult(candidates);
}) })
.Subscribe(candidates => .Subscribe(candidates =>
{ {
if(candidates is null) return; if (candidates is null) return;
_selectedItemCandidates.Clear(); _selectedItemCandidates.Clear();
_selectedItemCandidates.AddRange(candidates); _selectedItemCandidates.AddRange(candidates);
}); });
@@ -181,6 +186,10 @@ public class Tab : ITab
{ {
return element.Size; return element.Size;
} }
else if (item is ISizeProvider sizeProvider)
{
return sizeProvider.Size.Value;
}
return -1; return -1;
} }

View File

@@ -6,7 +6,7 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:guiappvm="using:FileTime.GuiApp.App.ViewModels" xmlns:guiappvm="using:FileTime.GuiApp.App.ViewModels"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 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" x:Name="ItemRoot"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch" HorizontalContentAlignment="Stretch"