Console UI WIP
This commit is contained in:
@@ -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())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user