From 7807a82f3fc63b9e0c4e98db5d87ae00dd737aee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81d=C3=A1m=20Kov=C3=A1cs?= Date: Mon, 7 Aug 2023 20:40:53 +0200 Subject: [PATCH] Console UI WIP --- src/ConsoleApp/FileTime.ConsoleUI.App/App.cs | 1 + .../Controls/ItemRenderer.cs | 5 +- .../Extensions/UIExtensions.cs | 12 ++++ .../FileTime.ConsoleUI.App/MainWindow.cs | 67 ++++++++++++------- 4 files changed, 59 insertions(+), 26 deletions(-) create mode 100644 src/ConsoleApp/FileTime.ConsoleUI.App/Extensions/UIExtensions.cs diff --git a/src/ConsoleApp/FileTime.ConsoleUI.App/App.cs b/src/ConsoleApp/FileTime.ConsoleUI.App/App.cs index 35aedf8..dee940b 100644 --- a/src/ConsoleApp/FileTime.ConsoleUI.App/App.cs +++ b/src/ConsoleApp/FileTime.ConsoleUI.App/App.cs @@ -36,6 +36,7 @@ public class App : IApplication _mainWindow.Initialize(); Application.Init(); + var asd = Application.Top.ColorScheme; foreach (var element in _mainWindow.GetElements()) { diff --git a/src/ConsoleApp/FileTime.ConsoleUI.App/Controls/ItemRenderer.cs b/src/ConsoleApp/FileTime.ConsoleUI.App/Controls/ItemRenderer.cs index 5a7f4f7..7620731 100644 --- a/src/ConsoleApp/FileTime.ConsoleUI.App/Controls/ItemRenderer.cs +++ b/src/ConsoleApp/FileTime.ConsoleUI.App/Controls/ItemRenderer.cs @@ -12,14 +12,13 @@ public class ItemRenderer : IListDataSource public ItemRenderer( IDeclarativeProperty?> source, - ListView listView + Action update ) { _source = source; source.Subscribe((_, _) => { - listView.EnsureSelectedItemVisible(); - listView.SetNeedsDisplay(); + update(); }); } diff --git a/src/ConsoleApp/FileTime.ConsoleUI.App/Extensions/UIExtensions.cs b/src/ConsoleApp/FileTime.ConsoleUI.App/Extensions/UIExtensions.cs new file mode 100644 index 0000000..d25e2ca --- /dev/null +++ b/src/ConsoleApp/FileTime.ConsoleUI.App/Extensions/UIExtensions.cs @@ -0,0 +1,12 @@ +using Terminal.Gui; + +namespace FileTime.ConsoleUI.App.Extensions; + +public static class UiExtensions +{ + public static void Update(this ListView listView) + { + listView.EnsureSelectedItemVisible(); + listView.SetNeedsDisplay(); + } +} \ No newline at end of file diff --git a/src/ConsoleApp/FileTime.ConsoleUI.App/MainWindow.cs b/src/ConsoleApp/FileTime.ConsoleUI.App/MainWindow.cs index d96feb1..f3c2da1 100644 --- a/src/ConsoleApp/FileTime.ConsoleUI.App/MainWindow.cs +++ b/src/ConsoleApp/FileTime.ConsoleUI.App/MainWindow.cs @@ -1,9 +1,6 @@ -using System.Collections.ObjectModel; -using DeclarativeProperty; -using FileTime.App.Core.ViewModels; +using DeclarativeProperty; using FileTime.ConsoleUI.App.Controls; -using FileTime.Core.Models; -using ObservableComputations; +using FileTime.ConsoleUI.App.Extensions; using Terminal.Gui; namespace FileTime.ConsoleUI.App; @@ -11,24 +8,25 @@ namespace FileTime.ConsoleUI.App; public class MainWindow { private readonly IConsoleAppState _consoleAppState; - private readonly ListView _selectedItemsView; + private View[] _views; + private const int ParentColumnWidth = 20; public MainWindow(IConsoleAppState consoleAppState) { _consoleAppState = consoleAppState; - - _selectedItemsView = new() {X = 1, Y = 0, Width = Dim.Fill(), Height = Dim.Fill()}; - _selectedItemsView.AddKeyBinding(Key.Space, Command.ToggleChecked); - /*_selectedItemsView.OpenSelectedItem += (e) => - { - if (e.Value is IItemViewModel {BaseItem: IContainer container} - && consoleAppState.SelectedTab.Value?.Tab is { } tab) - tab.SetCurrentLocation(container); - };*/ } - public void Initialize() + public void Initialize() => + _views = new View[] + { + GetSelectedItemsView(), + GetParentsChildren(), + GetSelectedsChildren() + }; + + private ListView GetSelectedItemsView() { + ListView selectedItemsView = new() {X = ParentColumnWidth, Y = 1, Width = Dim.Percent(60) - 20, Height = Dim.Fill()}; var selectedsItems = _consoleAppState .SelectedTab .Map(t => t.CurrentItems) @@ -45,17 +43,40 @@ public class MainWindow .Subscribe((index, _) => { if (index == -1) return; - _selectedItemsView.SelectedItem = index; - _selectedItemsView.EnsureSelectedItemVisible(); - _selectedItemsView.SetNeedsDisplay(); + selectedItemsView.SelectedItem = index; + selectedItemsView.Update(); }); - var renderer = new ItemRenderer(selectedsItems, _selectedItemsView); - _selectedItemsView.Source = renderer; + var renderer = new ItemRenderer(selectedsItems, selectedItemsView.Update); + selectedItemsView.Source = renderer; + return selectedItemsView; } - public IEnumerable GetElements() + private ListView GetParentsChildren() { - return new View[] {_selectedItemsView}; + ListView parentsChildrenView = new() {X = 0, Y = 1, Width = ParentColumnWidth, Height = Dim.Fill()}; + var parentsChildren = _consoleAppState + .SelectedTab + .Map(t => t.ParentsChildren) + .Switch(); + + var renderer = new ItemRenderer(parentsChildren, parentsChildrenView.Update); + parentsChildrenView.Source = renderer; + return parentsChildrenView; } + + private ListView GetSelectedsChildren() + { + ListView selectedsChildrenView = new() {X = Pos.Percent(60), Y = 1, Width = Dim.Percent(40), Height = Dim.Fill()}; + var selectedsChildren = _consoleAppState + .SelectedTab + .Map(t => t.SelectedsChildren) + .Switch(); + + var renderer = new ItemRenderer(selectedsChildren, selectedsChildrenView.Update); + selectedsChildrenView.Source = renderer; + return selectedsChildrenView; + } + + public IEnumerable GetElements() => _views; } \ No newline at end of file