Set current selected item with mouse
This commit is contained in:
@@ -11,6 +11,7 @@ using FileTime.Core.Enums;
|
|||||||
using FileTime.Core.Models;
|
using FileTime.Core.Models;
|
||||||
using FileTime.Core.Models.Extensions;
|
using FileTime.Core.Models.Extensions;
|
||||||
using FileTime.Core.Services;
|
using FileTime.Core.Services;
|
||||||
|
using FileTime.Core.Timeline;
|
||||||
using InitableService;
|
using InitableService;
|
||||||
using MvvmGen;
|
using MvvmGen;
|
||||||
using ObservableComputations;
|
using ObservableComputations;
|
||||||
@@ -26,6 +27,7 @@ public partial class TabViewModel : ITabViewModel
|
|||||||
private readonly IItemNameConverterService _itemNameConverterService;
|
private readonly IItemNameConverterService _itemNameConverterService;
|
||||||
private readonly IAppState _appState;
|
private readonly IAppState _appState;
|
||||||
private readonly IRxSchedulerService _rxSchedulerService;
|
private readonly IRxSchedulerService _rxSchedulerService;
|
||||||
|
private readonly ITimelessContentProvider _timelessContentProvider;
|
||||||
private readonly SourceList<FullName> _markedItems = new();
|
private readonly SourceList<FullName> _markedItems = new();
|
||||||
private readonly List<IDisposable> _disposables = new();
|
private readonly List<IDisposable> _disposables = new();
|
||||||
private bool _disposed;
|
private bool _disposed;
|
||||||
@@ -51,7 +53,8 @@ public partial class TabViewModel : ITabViewModel
|
|||||||
IServiceProvider serviceProvider,
|
IServiceProvider serviceProvider,
|
||||||
IItemNameConverterService itemNameConverterService,
|
IItemNameConverterService itemNameConverterService,
|
||||||
IAppState appState,
|
IAppState appState,
|
||||||
IRxSchedulerService rxSchedulerService)
|
IRxSchedulerService rxSchedulerService,
|
||||||
|
ITimelessContentProvider timelessContentProvider)
|
||||||
{
|
{
|
||||||
_serviceProvider = serviceProvider;
|
_serviceProvider = serviceProvider;
|
||||||
_itemNameConverterService = itemNameConverterService;
|
_itemNameConverterService = itemNameConverterService;
|
||||||
@@ -60,6 +63,7 @@ public partial class TabViewModel : ITabViewModel
|
|||||||
MarkedItems = _markedItems.Connect().StartWithEmpty();
|
MarkedItems = _markedItems.Connect().StartWithEmpty();
|
||||||
IsSelected = _appState.SelectedTab.Select(s => s == this);
|
IsSelected = _appState.SelectedTab.Select(s => s == this);
|
||||||
_rxSchedulerService = rxSchedulerService;
|
_rxSchedulerService = rxSchedulerService;
|
||||||
|
_timelessContentProvider = timelessContentProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Init(ITab tab, int tabNumber)
|
public void Init(ITab tab, int tabNumber)
|
||||||
@@ -103,7 +107,14 @@ public partial class TabViewModel : ITabViewModel
|
|||||||
tab.CurrentSelectedItem,
|
tab.CurrentSelectedItem,
|
||||||
CurrentItems.Watch<ObservableCollection<IItemViewModel>, IItemViewModel>(),
|
CurrentItems.Watch<ObservableCollection<IItemViewModel>, IItemViewModel>(),
|
||||||
(currentSelectedItem, currentItems) =>
|
(currentSelectedItem, currentItems) =>
|
||||||
Task.FromResult(currentItems?.FirstOrDefault(i => i.BaseItem?.FullName?.Path == currentSelectedItem?.Path.Path))
|
Task.FromResult(currentItems?.FirstOrDefault(i => i.BaseItem?.FullName?.Path == currentSelectedItem?.Path.Path)),
|
||||||
|
item =>
|
||||||
|
{
|
||||||
|
if (item?.BaseItem is not { } baseItem)
|
||||||
|
return;
|
||||||
|
|
||||||
|
tab.SetSelectedItem(new AbsolutePath(_timelessContentProvider, baseItem));
|
||||||
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
CurrentSelectedItemAsContainer = CurrentSelectedItem.Map(i => i as IContainerViewModel);
|
CurrentSelectedItemAsContainer = CurrentSelectedItem.Map(i => i as IContainerViewModel);
|
||||||
|
|||||||
@@ -6,16 +6,20 @@ public sealed class CombineLatestProperty<T1, T2, TResult> : DeclarativeProperty
|
|||||||
private T1? _value1;
|
private T1? _value1;
|
||||||
private T2? _value2;
|
private T2? _value2;
|
||||||
|
|
||||||
public CombineLatestProperty(IDeclarativeProperty<T1> prop1, IDeclarativeProperty<T2> prop2, Func<T1?, T2?, Task<TResult>> func)
|
public CombineLatestProperty(
|
||||||
|
IDeclarativeProperty<T1> prop1,
|
||||||
|
IDeclarativeProperty<T2> prop2,
|
||||||
|
Func<T1?, T2?, Task<TResult>> func,
|
||||||
|
Action<TResult?>? setValueHook = null) : base(setValueHook)
|
||||||
{
|
{
|
||||||
ArgumentNullException.ThrowIfNull(prop1);
|
ArgumentNullException.ThrowIfNull(prop1);
|
||||||
ArgumentNullException.ThrowIfNull(prop2);
|
ArgumentNullException.ThrowIfNull(prop2);
|
||||||
|
|
||||||
_func = func;
|
_func = func;
|
||||||
|
|
||||||
_value1 = prop1.Value is null ? default : prop1.Value;
|
_value1 = prop1.Value is null ? default : prop1.Value;
|
||||||
_value2 = prop2.Value is null ? default : prop2.Value;
|
_value2 = prop2.Value is null ? default : prop2.Value;
|
||||||
|
|
||||||
prop1.Subscribe(async (value1, token) =>
|
prop1.Subscribe(async (value1, token) =>
|
||||||
{
|
{
|
||||||
_value1 = value1;
|
_value1 = value1;
|
||||||
|
|||||||
@@ -3,10 +3,11 @@
|
|||||||
public static class DeclarativePropertyHelpers
|
public static class DeclarativePropertyHelpers
|
||||||
{
|
{
|
||||||
public static CombineLatestProperty<T1, T2, TResult> CombineLatest<T1, T2, TResult>(
|
public static CombineLatestProperty<T1, T2, TResult> CombineLatest<T1, T2, TResult>(
|
||||||
IDeclarativeProperty<T1> prop1,
|
IDeclarativeProperty<T1> prop1,
|
||||||
IDeclarativeProperty<T2> prop2,
|
IDeclarativeProperty<T2> prop2,
|
||||||
Func<T1, T2, Task<TResult>> func)
|
Func<T1, T2, Task<TResult>> func,
|
||||||
=> new(prop1, prop2, func);
|
Action<TResult?>? setValueHook = null)
|
||||||
|
=> new(prop1, prop2, func, setValueHook);
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed class DeclarativeProperty<T> : DeclarativePropertyBase<T>
|
public sealed class DeclarativeProperty<T> : DeclarativePropertyBase<T>
|
||||||
@@ -17,9 +18,9 @@ public sealed class DeclarativeProperty<T> : DeclarativePropertyBase<T>
|
|||||||
|
|
||||||
public DeclarativeProperty(T initialValue, Action<T?>? setValueHook = null) : base(initialValue, setValueHook)
|
public DeclarativeProperty(T initialValue, Action<T?>? setValueHook = null) : base(initialValue, setValueHook)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task SetValue(T newValue, CancellationToken cancellationToken = default)
|
public async Task SetValue(T newValue, CancellationToken cancellationToken = default)
|
||||||
=> await SetNewValueAsync(newValue, cancellationToken);
|
=> await SetNewValueAsync(newValue, cancellationToken);
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user