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.
94 lines
2.8 KiB
94 lines
2.8 KiB
using Common.StartupHelpers;
|
|
using CommunityToolkit.Mvvm.ComponentModel;
|
|
using CommunityToolkit.Mvvm.Input;
|
|
using MultiTerm.Core.Common;
|
|
using MultiTerm.Core.Factories;
|
|
using System.Collections.ObjectModel;
|
|
|
|
namespace MultiTerm.Core.ViewModel;
|
|
|
|
public partial class ShellViewModel : ObservableObject
|
|
{
|
|
[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
|
|
|
|
#region New Terminal Context Menu
|
|
[ObservableProperty]
|
|
private TerminalViewType selectedTerminalViewType = TerminalViewType.SendReceive;
|
|
|
|
#endregion
|
|
|
|
private readonly ITerminalViewModelFactory terminalViewModelFactory;
|
|
|
|
public ShellViewModel(ITerminalViewModelFactory terminalViewModelFactory)
|
|
{
|
|
this.terminalViewModelFactory = terminalViewModelFactory;
|
|
}
|
|
|
|
[RelayCommand]
|
|
private void AppendTerminalWithSelectedViewType(ProtocolType protocolType)
|
|
{
|
|
this.AppendConfiguredTerminal(this.terminalViewModelFactory.Create(this.SelectedTerminalViewType, protocolType));
|
|
}
|
|
|
|
|
|
private void AppendConfiguredTerminal(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(Terminal_ClosingEvent)} failed to convert sender to {nameof(ITerminalViewModel)}"); }
|
|
this.RemoveTerminal(tvm);
|
|
}
|
|
|
|
private 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]
|
|
private void TestButtonClicked()
|
|
{
|
|
this.DefaultReceiveNewlineSeparator = NewlineSeparatorType.CR_LF;
|
|
}
|
|
|
|
}
|
|
|