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, EventArgs e) { this.CommunicationProtocol?.Connect(); } private void OnViewModelRequestedDisconnect(object? sender, EventArgs e) { this.CommunicationProtocol?.Disconnect(); } }