Console UI WIP

This commit is contained in:
2023-08-07 20:40:53 +02:00
parent 9a63516aba
commit 7807a82f3f
4 changed files with 59 additions and 26 deletions

View File

@@ -36,6 +36,7 @@ public class App : IApplication
_mainWindow.Initialize(); _mainWindow.Initialize();
Application.Init(); Application.Init();
var asd = Application.Top.ColorScheme;
foreach (var element in _mainWindow.GetElements()) foreach (var element in _mainWindow.GetElements())
{ {

View File

@@ -12,14 +12,13 @@ public class ItemRenderer : IListDataSource
public ItemRenderer( public ItemRenderer(
IDeclarativeProperty<ObservableCollection<IItemViewModel>?> source, IDeclarativeProperty<ObservableCollection<IItemViewModel>?> source,
ListView listView Action update
) )
{ {
_source = source; _source = source;
source.Subscribe((_, _) => source.Subscribe((_, _) =>
{ {
listView.EnsureSelectedItemVisible(); update();
listView.SetNeedsDisplay();
}); });
} }

View File

@@ -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();
}
}

View File

@@ -1,9 +1,6 @@
using System.Collections.ObjectModel; using DeclarativeProperty;
using DeclarativeProperty;
using FileTime.App.Core.ViewModels;
using FileTime.ConsoleUI.App.Controls; using FileTime.ConsoleUI.App.Controls;
using FileTime.Core.Models; using FileTime.ConsoleUI.App.Extensions;
using ObservableComputations;
using Terminal.Gui; using Terminal.Gui;
namespace FileTime.ConsoleUI.App; namespace FileTime.ConsoleUI.App;
@@ -11,24 +8,25 @@ namespace FileTime.ConsoleUI.App;
public class MainWindow public class MainWindow
{ {
private readonly IConsoleAppState _consoleAppState; private readonly IConsoleAppState _consoleAppState;
private readonly ListView _selectedItemsView; private View[] _views;
private const int ParentColumnWidth = 20;
public MainWindow(IConsoleAppState consoleAppState) public MainWindow(IConsoleAppState consoleAppState)
{ {
_consoleAppState = 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 var selectedsItems = _consoleAppState
.SelectedTab .SelectedTab
.Map(t => t.CurrentItems) .Map(t => t.CurrentItems)
@@ -45,17 +43,40 @@ public class MainWindow
.Subscribe((index, _) => .Subscribe((index, _) =>
{ {
if (index == -1) return; if (index == -1) return;
_selectedItemsView.SelectedItem = index; selectedItemsView.SelectedItem = index;
_selectedItemsView.EnsureSelectedItemVisible(); selectedItemsView.Update();
_selectedItemsView.SetNeedsDisplay();
}); });
var renderer = new ItemRenderer(selectedsItems, _selectedItemsView); var renderer = new ItemRenderer(selectedsItems, selectedItemsView.Update);
_selectedItemsView.Source = renderer; selectedItemsView.Source = renderer;
return selectedItemsView;
} }
public IEnumerable<View> 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<View> GetElements() => _views;
} }