mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-26 12:08:37 +08:00
Created a message printer for sending messages to the errors and infos window
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Windows.Forms;
|
||||
using mRemoteNG.UI.Forms;
|
||||
using mRemoteNG.UI.Window;
|
||||
using WeifenLuo.WinFormsUI.Docking;
|
||||
|
||||
namespace mRemoteNG.Messages.MessagePrinters
|
||||
{
|
||||
public class ErrorAndInfoWindowMessagePrinter : IMessagePrinter
|
||||
{
|
||||
private readonly ErrorAndInfoWindow _messageWindow;
|
||||
private Timer _ecTimer;
|
||||
|
||||
public ErrorAndInfoWindowMessagePrinter(ErrorAndInfoWindow messageWindow)
|
||||
{
|
||||
if (messageWindow == null)
|
||||
throw new ArgumentNullException(nameof(messageWindow));
|
||||
|
||||
_messageWindow = messageWindow;
|
||||
CreateTimer();
|
||||
}
|
||||
|
||||
public void Print(IMessage message)
|
||||
{
|
||||
_ecTimer.Enabled = true;
|
||||
|
||||
var lvItem = BuildListViewItem(message);
|
||||
AddToList(lvItem);
|
||||
}
|
||||
|
||||
public void Print(IEnumerable<IMessage> messages)
|
||||
{
|
||||
foreach (var message in messages)
|
||||
Print(message);
|
||||
}
|
||||
|
||||
private static ListViewItem BuildListViewItem(IMessage nMsg)
|
||||
{
|
||||
var lvItem = new ListViewItem
|
||||
{
|
||||
ImageIndex = Convert.ToInt32(nMsg.Class),
|
||||
Text = nMsg.Text.Replace(Environment.NewLine, " "),
|
||||
Tag = nMsg
|
||||
};
|
||||
return lvItem;
|
||||
}
|
||||
|
||||
private void CreateTimer()
|
||||
{
|
||||
_ecTimer = new Timer
|
||||
{
|
||||
Enabled = false,
|
||||
Interval = 300
|
||||
};
|
||||
_ecTimer.Tick += SwitchTimerTick;
|
||||
}
|
||||
|
||||
private void SwitchTimerTick(object sender, EventArgs e)
|
||||
{
|
||||
SwitchToMessage();
|
||||
_ecTimer.Enabled = false;
|
||||
}
|
||||
|
||||
private void SwitchToMessage()
|
||||
{
|
||||
_messageWindow.PreviousActiveForm = (DockContent)frmMain.Default.pnlDock.ActiveContent;
|
||||
ShowMcForm();
|
||||
_messageWindow.lvErrorCollector.Focus();
|
||||
_messageWindow.lvErrorCollector.SelectedItems.Clear();
|
||||
_messageWindow.lvErrorCollector.Items[0].Selected = true;
|
||||
_messageWindow.lvErrorCollector.FocusedItem = _messageWindow.lvErrorCollector.Items[0];
|
||||
}
|
||||
|
||||
private void ShowMcForm()
|
||||
{
|
||||
if (frmMain.Default.pnlDock.InvokeRequired)
|
||||
frmMain.Default.pnlDock.Invoke((MethodInvoker)ShowMcForm);
|
||||
else
|
||||
_messageWindow.Show(frmMain.Default.pnlDock);
|
||||
}
|
||||
|
||||
private void AddToList(ListViewItem lvItem)
|
||||
{
|
||||
if (_messageWindow.lvErrorCollector.InvokeRequired)
|
||||
_messageWindow.lvErrorCollector.Invoke((MethodInvoker)(() => AddToList(lvItem)));
|
||||
else
|
||||
_messageWindow.lvErrorCollector.Items.Insert(0, lvItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -218,6 +218,7 @@
|
||||
<Compile Include="Credential\INotifyingCredentialRecord.cs" />
|
||||
<Compile Include="Messages\MessagePrinters\DebugMessagePrinter.cs" />
|
||||
<Compile Include="Messages\IMessage.cs" />
|
||||
<Compile Include="Messages\MessagePrinters\ErrorAndInfoWindowMessagePrinter.cs" />
|
||||
<Compile Include="Messages\MessagePrinters\IMessagePrinter.cs" />
|
||||
<Compile Include="Messages\MessageClassEnum.cs" />
|
||||
<Compile Include="Messages\MessageCollector2.cs" />
|
||||
|
||||
Reference in New Issue
Block a user