From 12c9aa039a6685c5552c4e0d141d2e29e344159f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81d=C3=A1m=20Kov=C3=A1cs?= Date: Fri, 28 Jul 2023 02:21:29 +0200 Subject: [PATCH] RapidTravel display name --- .../ViewModels/IAppState.cs | 3 ++- .../ViewModels/IItemViewModel.cs | 2 +- .../NavigationUserCommandHandlerService.cs | 4 ++-- .../FileTime.App.Core/ViewModels/AppStateBase.cs | 5 +++-- .../FileTime.App.Core/ViewModels/ItemViewModel.cs | 13 ++++++++++--- .../FileTime.App.Core/ViewModels/TabViewModel.cs | 13 ------------- .../Services/RapidTravelModeKeyInputHandler.cs | 12 ++++++++---- .../Avalonia/FileTime.GuiApp/Views/MainWindow.axaml | 2 +- 8 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/AppCommon/FileTime.App.Core.Abstraction/ViewModels/IAppState.cs b/src/AppCommon/FileTime.App.Core.Abstraction/ViewModels/IAppState.cs index f00f379..cd4b7a9 100644 --- a/src/AppCommon/FileTime.App.Core.Abstraction/ViewModels/IAppState.cs +++ b/src/AppCommon/FileTime.App.Core.Abstraction/ViewModels/IAppState.cs @@ -1,4 +1,5 @@ using System.Collections.ObjectModel; +using DeclarativeProperty; using FileTime.App.Core.Models.Enums; using FileTime.App.Core.ViewModels.Timeline; @@ -10,7 +11,7 @@ public interface IAppState IObservable SelectedTab { get; } IObservable SearchText { get; } IObservable ViewMode { get; } - string RapidTravelText { get; set; } + DeclarativeProperty RapidTravelText { get; } ITabViewModel? CurrentSelectedTab { get; } ITimelineViewModel TimelineViewModel { get; } diff --git a/src/AppCommon/FileTime.App.Core.Abstraction/ViewModels/IItemViewModel.cs b/src/AppCommon/FileTime.App.Core.Abstraction/ViewModels/IItemViewModel.cs index a2e94fe..01e274c 100644 --- a/src/AppCommon/FileTime.App.Core.Abstraction/ViewModels/IItemViewModel.cs +++ b/src/AppCommon/FileTime.App.Core.Abstraction/ViewModels/IItemViewModel.cs @@ -9,7 +9,7 @@ namespace FileTime.App.Core.ViewModels; public interface IItemViewModel : IInitable { IItem? BaseItem { get; set; } - IObservable>? DisplayName { get; set; } + IDeclarativeProperty>? DisplayName { get; } string? DisplayNameText { get; set; } IDeclarativeProperty IsSelected { get; set; } IObservable? IsMarked { get; set; } diff --git a/src/AppCommon/FileTime.App.Core/Services/UserCommandHandler/NavigationUserCommandHandlerService.cs b/src/AppCommon/FileTime.App.Core/Services/UserCommandHandler/NavigationUserCommandHandlerService.cs index 3abd8aa..37f6fc1 100644 --- a/src/AppCommon/FileTime.App.Core/Services/UserCommandHandler/NavigationUserCommandHandlerService.cs +++ b/src/AppCommon/FileTime.App.Core/Services/UserCommandHandler/NavigationUserCommandHandlerService.cs @@ -225,7 +225,7 @@ public class NavigationUserCommandHandlerService : UserCommandHandlerServiceBase if (_currentSelectedItem?.Value is not IContainerViewModel containerViewModel || containerViewModel.Container is null) return; - _appState.RapidTravelText = ""; + await _appState.RapidTravelText.SetValue(""); if (_selectedTab?.Tab is { } tab) { await tab.SetCurrentLocation(containerViewModel.Container); @@ -240,7 +240,7 @@ public class NavigationUserCommandHandlerService : UserCommandHandlerServiceBase return; } - _appState.RapidTravelText = ""; + await _appState.RapidTravelText.SetValue(""); if (_selectedTab?.Tab is { } tab) { await tab.SetCurrentLocation(newContainer); diff --git a/src/AppCommon/FileTime.App.Core/ViewModels/AppStateBase.cs b/src/AppCommon/FileTime.App.Core/ViewModels/AppStateBase.cs index 4bc3cce..d4b3398 100644 --- a/src/AppCommon/FileTime.App.Core/ViewModels/AppStateBase.cs +++ b/src/AppCommon/FileTime.App.Core/ViewModels/AppStateBase.cs @@ -1,6 +1,7 @@ using System.Collections.ObjectModel; using System.Reactive.Linq; using System.Reactive.Subjects; +using DeclarativeProperty; using DynamicData; using FileTime.App.Core.Models.Enums; using FileTime.App.Core.ViewModels.Timeline; @@ -25,11 +26,11 @@ public abstract partial class AppStateBase : IAppState public IObservable SelectedTab { get; private set; } public ITabViewModel? CurrentSelectedTab { get; private set; } - - [Property] private string _rapidTravelText = ""; + public DeclarativeProperty RapidTravelText { get; private set; } partial void OnInitialize() { + RapidTravelText = new(""); ViewMode = _viewMode.AsObservable(); var tabsObservable = _tabs.Connect(); diff --git a/src/AppCommon/FileTime.App.Core/ViewModels/ItemViewModel.cs b/src/AppCommon/FileTime.App.Core/ViewModels/ItemViewModel.cs index 769c731..3d18d8f 100644 --- a/src/AppCommon/FileTime.App.Core/ViewModels/ItemViewModel.cs +++ b/src/AppCommon/FileTime.App.Core/ViewModels/ItemViewModel.cs @@ -21,8 +21,6 @@ public abstract partial class ItemViewModel : IItemViewModel [Property] private IItem? _baseItem; - [Property] private IObservable>? _displayName; - [Property] private string? _displayNameText; [Property] private IDeclarativeProperty _isSelected; @@ -37,6 +35,8 @@ public abstract partial class ItemViewModel : IItemViewModel [Property] private IDeclarativeProperty _isAlternative; + public IDeclarativeProperty>? DisplayName { get; private set; } + public void Init(IItem item, ITabViewModel parentTab, ItemViewModelType itemViewModelType) { _parentTab = parentTab; @@ -49,8 +49,14 @@ public abstract partial class ItemViewModel : IItemViewModel _ => throw new InvalidEnumArgumentException() }; + var displayName = itemViewModelType switch + { + ItemViewModelType.Main => _appState.RapidTravelText.Map(s => (IReadOnlyList) _itemNameConverterService.GetDisplayName(item.DisplayName, s)), + _ => new DeclarativeProperty>(new List {new (item.DisplayName)}), + }; + BaseItem = item; - DisplayName = _appState.SearchText.Select(s => _itemNameConverterService.GetDisplayName(item.DisplayName, s)); + DisplayName = displayName; DisplayNameText = item.DisplayName; IsMarked = itemViewModelType is ItemViewModelType.Main @@ -79,6 +85,7 @@ public abstract partial class ItemViewModel : IItemViewModel _ => ItemViewMode.Default }; + public bool EqualsTo(IItemViewModel? itemViewModel) { return BaseItem?.FullName?.Path is string path && path == itemViewModel?.BaseItem?.FullName?.Path; diff --git a/src/AppCommon/FileTime.App.Core/ViewModels/TabViewModel.cs b/src/AppCommon/FileTime.App.Core/ViewModels/TabViewModel.cs index a1647f4..d1f5b77 100644 --- a/src/AppCommon/FileTime.App.Core/ViewModels/TabViewModel.cs +++ b/src/AppCommon/FileTime.App.Core/ViewModels/TabViewModel.cs @@ -88,19 +88,6 @@ public partial class TabViewModel : ITabViewModel (items, ordering) => { if (items is null) return Task.FromResult?>(null); - /*Expression> orderExpression = ordering switch - { - ItemOrdering.Name or ItemOrdering.NameDesc => i => i.DisplayNameText, - ItemOrdering.LastModifyDate or ItemOrdering.LastModifyDateDesc => i => i.CreatedAt, - _ => throw new NotImplementedException() - }; - Expression> direction = ordering switch - { - ItemOrdering.Name or ItemOrdering.LastModifyDate => () => ListSortDirection.Ascending, - ItemOrdering.NameDesc or ItemOrdering.LastModifyDateDesc => () => ListSortDirection.Descending, - _ => throw new NotImplementedException() - }; - return Task.FromResult((ObservableCollection?) items.Ordering(orderExpression, direction));*/ ObservableCollection? orderedItems = ordering switch { diff --git a/src/GuiApp/Avalonia/FileTime.GuiApp/Services/RapidTravelModeKeyInputHandler.cs b/src/GuiApp/Avalonia/FileTime.GuiApp/Services/RapidTravelModeKeyInputHandler.cs index cb88b3a..4870e30 100644 --- a/src/GuiApp/Avalonia/FileTime.GuiApp/Services/RapidTravelModeKeyInputHandler.cs +++ b/src/GuiApp/Avalonia/FileTime.GuiApp/Services/RapidTravelModeKeyInputHandler.cs @@ -64,17 +64,21 @@ public class RapidTravelModeKeyInputHandler : IRapidTravelModeKeyInputHandler } else if (key == Key.Back) { - if (_appState.RapidTravelText.Length > 0) + if (_appState.RapidTravelText.Value!.Length > 0) { setHandled(true); - _appState.RapidTravelText = _appState.RapidTravelText.Substring(0, _appState.RapidTravelText.Length - 1); + await _appState.RapidTravelText.SetValue( + _appState.RapidTravelText.Value![..^1] + ); updateRapidTravelFilter = true; } } else if (keyString.Length == 1) { setHandled(true); - _appState.RapidTravelText += keyString.ToLower(); + await _appState.RapidTravelText.SetValue( + _appState.RapidTravelText.Value + keyString.ToLower() + ); updateRapidTravelFilter = true; } else @@ -93,7 +97,7 @@ public class RapidTravelModeKeyInputHandler : IRapidTravelModeKeyInputHandler if (_selectedTab?.Tab is not ITab tab) return; tab.RemoveItemFilter(RapidTravelFilterName); - tab.AddItemFilter(new ItemFilter(RapidTravelFilterName, i => i.Name.ToLower().Contains(_appState.RapidTravelText))); + tab.AddItemFilter(new ItemFilter(RapidTravelFilterName, i => i.Name.ToLower().Contains(_appState.RapidTravelText.Value!))); /*var currentLocation = await _appState.SelectedTab.CurrentLocation.Container.WithoutVirtualContainer(MainPageViewModel.RAPIDTRAVEL); var newLocation = new VirtualContainer( currentLocation, diff --git a/src/GuiApp/Avalonia/FileTime.GuiApp/Views/MainWindow.axaml b/src/GuiApp/Avalonia/FileTime.GuiApp/Views/MainWindow.axaml index 5252fa9..b49a0a0 100644 --- a/src/GuiApp/Avalonia/FileTime.GuiApp/Views/MainWindow.axaml +++ b/src/GuiApp/Avalonia/FileTime.GuiApp/Views/MainWindow.axaml @@ -642,7 +642,7 @@ - +