Custom TUI Library WIP

This commit is contained in:
2023-08-08 00:27:42 +02:00
parent 7807a82f3f
commit a77d5cc235
22 changed files with 334 additions and 282 deletions

View File

@@ -1,14 +1,16 @@
using DeclarativeProperty;
using FileTime.ConsoleUI.App.Controls;
using System.Collections.ObjectModel;
using DeclarativeProperty;
using FileTime.App.Core.ViewModels;
using FileTime.ConsoleUI.App.Extensions;
using Terminal.Gui;
using TerminalUI;
using TerminalUI.Controls;
using TerminalUI.Extensions;
namespace FileTime.ConsoleUI.App;
public class MainWindow
{
private readonly IConsoleAppState _consoleAppState;
private View[] _views;
private const int ParentColumnWidth = 20;
public MainWindow(IConsoleAppState consoleAppState)
@@ -16,67 +18,16 @@ public class MainWindow
_consoleAppState = consoleAppState;
}
public void Initialize() =>
_views = new View[]
{
GetSelectedItemsView(),
GetParentsChildren(),
GetSelectedsChildren()
};
private ListView GetSelectedItemsView()
public void Initialize()
{
ListView selectedItemsView = new() {X = ParentColumnWidth, Y = 1, Width = Dim.Percent(60) - 20, Height = Dim.Fill()};
var selectedsItems = _consoleAppState
.SelectedTab
.Map(t => t.CurrentItems)
.Switch();
ListView<IAppState, IItemViewModel> selectedItemsView = new();
selectedItemsView.DataContext = _consoleAppState;
var selectedItem = _consoleAppState.SelectedTab
.Map(t => t.CurrentSelectedItem)
.Switch();
DeclarativePropertyHelpers.CombineLatest(
selectedItem,
selectedsItems,
(selected, items) => Task.FromResult(items.IndexOf(selected)))
.Subscribe((index, _) =>
{
if (index == -1) return;
selectedItemsView.SelectedItem = index;
selectedItemsView.Update();
});
var renderer = new ItemRenderer(selectedsItems, selectedItemsView.Update);
selectedItemsView.Source = renderer;
return selectedItemsView;
selectedItemsView.Bind(
selectedItemsView,
appState => appState.SelectedTab.Map(t => t == null ? null : t.CurrentItems).Switch(),
v => v.ItemsSource);
selectedItemsView.Render();
}
private ListView GetParentsChildren()
{
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<View> GetElements() => _views;
}