Ordering improvements
This commit is contained in:
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,4 +26,5 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
using DeclarativeProperty;
|
using DeclarativeProperty;
|
||||||
|
|
||||||
namespace FileTime.App.Core.Models.Traits;
|
namespace FileTime.Core.Traits;
|
||||||
|
|
||||||
public interface ISizeProvider
|
public interface ISizeProvider
|
||||||
{
|
{
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user