Multiprocotol Terminalprogram (BAT)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
MultiTerm/MultiTerm.Core/ViewModel/ShellViewModel.cs

81 lines
2.5 KiB

using Common.StartupHelpers;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using MultiTerm.Core.Common;
using System.Collections.ObjectModel;
namespace MultiTerm.Core.ViewModel;
public partial class ShellViewModel : ObservableObject
{
private readonly IAbstractFactory<SendReceiveViewModel> sendReceiveViewModelFactory;
[ObservableProperty]
private string title = "ShellView Test";
[ObservableProperty]
private ObservableCollection<ITerminalViewModel> terminalViewModels = new();
[ObservableProperty]
private ITerminalViewModel? selectedTerminalViewModel;
#region Settings Menu Bar
// TODO Initialize from File
[ObservableProperty]
private NewlineSeparatorType defaultReceiveNewlineSeparator = NewlineSeparatorType.None;
// TODO Initialize from File
[ObservableProperty]
private NewlineSeparatorType defaultSendNewlineSeparator = NewlineSeparatorType.None;
#endregion
public ShellViewModel(IAbstractFactory<SendReceiveViewModel> sendReceiveViewModelFactory)
{
this.sendReceiveViewModelFactory = sendReceiveViewModelFactory;
// create a new terminal
this.AppendTerminal(this.sendReceiveViewModelFactory.Create());
}
public void AppendTerminal(ITerminalViewModel newTerminal)
{
// guard null value
if(newTerminal == null) { return; }
// add to collection and register closing event handler
this.TerminalViewModels.Add(newTerminal);
newTerminal.ClosingEvent += Terminal_ClosingEvent;
// set as selected
this.SelectedTerminalViewModel = newTerminal;
}
private void Terminal_ClosingEvent(object? sender, EventArgs e)
{
if(sender is not ITerminalViewModel tvm) { throw new ArgumentException(nameof(sender)); }
this.RemoveTerminal(tvm);
}
public void RemoveTerminal(ITerminalViewModel terminalToRemove)
{
// guard null value
if(terminalToRemove == null) { return; }
this.TerminalViewModels.Remove(terminalToRemove);
}
partial void OnDefaultReceiveNewlineSeparatorChanged(NewlineSeparatorType value)
{
Console.WriteLine($"Changed to {value}");
}
partial void OnDefaultSendNewlineSeparatorChanged(NewlineSeparatorType value)
{
Console.WriteLine($"Changed Send to {value}");
}
[RelayCommand]
public void TestButtonClicked()
{
this.DefaultReceiveNewlineSeparator = NewlineSeparatorType.CR_LF;
}
}