using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using MultiTerm.Core.Types;
using MultiTerm.Protocols;
using MultiTerm.Protocols.Types;
namespace MultiTerm.Core.ViewModel;
public abstract partial class TerminalViewModel : ObservableObject, ITerminalViewModel
{
public abstract string Title { get; }
public abstract TerminalViewType ViewType { get; }
public ProtocolType ProtocolType { get; set; }
public ICommunicationProtocol? CommunicationProtocol { get; set; }
public event EventHandler? ClosingEvent;
private IProtocolSettingsViewModel? protocolSettings;
public IProtocolSettingsViewModel? ProtocolSettings
{
get { return protocolSettings; }
set
{
protocolSettings = value;
// register event handler for connection request from viewmodel
if(value != null)
{
protocolSettings!.ConnectRequested += OnViewModelRequestedConnect; ;
protocolSettings!.DisconnectRequested += OnViewModelRequestedDisconnect;
}
}
}
///
/// Method to override if any closing actions are required.
/// Closing can be cancelled using the return value.
///
/// true if closing is allowed. false if it shall be cancelled.
protected virtual bool ClosingActions() { return true; }
[RelayCommand]
public void CloseRequest()
{
if (this.ClosingActions() == true)
{
ClosingEvent?.Invoke(this, EventArgs.Empty);
}
}
private void OnViewModelRequestedConnect(object? sender, IProtocolSettings e)
{
this.CommunicationProtocol?.Connect(e);
}
private void OnViewModelRequestedDisconnect(object? sender, EventArgs e)
{
this.CommunicationProtocol?.Disconnect();
}
}