@ -9,6 +9,7 @@ using MultiTerm.Core.Types;
using MultiTerm.Protocols.Types ;
using CommunityToolkit.Mvvm.Messaging ;
using Common.Messaging ;
using System.Timers ;
namespace MultiTerm.Core.ViewModel ;
@ -16,6 +17,7 @@ public partial class ShellViewModel : ObservableObject, IRecipient<IUserInterfac
{
private const string defaultReceiveNewlineSeparatorAppSettingsKey = "DefaultReceiveNewlineSeparator" ;
private const string defaultSendNewlineSeparatorAppSettingsKey = "DefaultSendNewlineSeparator" ;
private const int statusBarMessageDurationMs = 1 2 0 0 0 ; // how long the status bar shall be displayed
#region Terminal collection
[ObservableProperty]
@ -39,11 +41,17 @@ public partial class ShellViewModel : ObservableObject, IRecipient<IUserInterfac
# endregion
#region Status Bar
private System . Timers . Timer ? statusBarMessageTimer ;
private const int statusBarMessageTimerIntervalMs = 1 0 0 ; // After x milliseconds the timer shall be called
[ObservableProperty]
private string statusBarMessage = "" ;
[ObservableProperty]
private MessageImportance statusBarMessageImportance = MessageImportance . Normal ;
[ObservableProperty]
private double statusBarMessageDurationPercentage = 0 ;
# endregion
private readonly ITerminalViewModelFactory terminalViewModelFactory ;
@ -142,8 +150,40 @@ public partial class ShellViewModel : ObservableObject, IRecipient<IUserInterfac
#region Messaging handling
public void Receive ( IUserInterfaceMessage message )
{
// reset percentage
this . StatusBarMessageDurationPercentage = 1 0 0 ;
// display message
this . StatusBarMessage = message . ToString ( ) ;
this . StatusBarMessageImportance = message . Importance ;
// start timer
if ( this . statusBarMessageTimer = = null )
{
this . statusBarMessageTimer = new System . Timers . Timer ( statusBarMessageTimerIntervalMs ) ;
this . statusBarMessageTimer . Elapsed + = StatusBarMessageTimer_Elapsed ;
this . statusBarMessageTimer . AutoReset = true ; // restart after elapsed
this . statusBarMessageTimer . Enabled = true ; // start timer
}
}
private void StatusBarMessageTimer_Elapsed ( object? sender , ElapsedEventArgs e )
{
float differencePercentage = ( statusBarMessageDurationMs / statusBarMessageTimerIntervalMs ) / 1 0 0 ;
// if not yet done
if ( this . StatusBarMessageDurationPercentage - differencePercentage > 0 )
{
this . StatusBarMessageDurationPercentage - = differencePercentage ;
return ;
}
// clear message and kill timer when finished
this . StatusBarMessage = "" ;
this . StatusBarMessageDurationPercentage = 0 ;
this . statusBarMessageTimer ! . Enabled = false ;
this . statusBarMessageTimer . Dispose ( ) ;
this . statusBarMessageTimer = null ;
}
# endregion
}