using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Windows.Forms;
namespace Trigger
{
///
/// This is a that displays all available information from the and the
///
public partial class StatusView : Form
{
#region Properties
private Main Main;
#endregion
#region Constructors
///
///
public StatusView(Main Main)
{
InitializeComponent();
this.Main = Main;
this.Refresh();
}
#endregion
#region Methods
///
/// Refreshes all elements in the
///
public override void Refresh()
{
this.treeView.Nodes.Clear();
this.treeView.Nodes.Add(this.Main.EventMgr.GetStatus(this.treeView));
this.treeView.Nodes.Add(this.Main.TaskMgr.GetStatus(this.treeView));
TreeNode tnStatus = this.treeView.Nodes.Add("System Status");
List statusPlugins = this.getAvailableStatus();
foreach (Type statusPlugin in statusPlugins)
{
MethodInfo getStatus = statusPlugin.GetMethod("GetStatus");
if (getStatus != null)
tnStatus.Nodes.Add((TreeNode)getStatus.Invoke(null, null));
}
TreeNode tnProcess = this.treeView.Nodes.Add("Process data");
Process process = Process.GetCurrentProcess();
tnProcess.Nodes.Add("Nonpaged Memory usage: " + (process.NonpagedSystemMemorySize64 / 1024).ToString() + "kB");
tnProcess.Nodes.Add("Paged Memory usage: " + (process.PagedSystemMemorySize64 / 1024).ToString() + "kB");
tnProcess.Nodes.Add("Virtual Memory usage: " + (process.VirtualMemorySize64 / 1024 / 1024).ToString() + "MB");
tnProcess.Nodes.Add("Working Memory usage: " + (process.WorkingSet64 / 1024 / 1024).ToString() + "MB");
tnProcess.Nodes.Add("Total Processor time: " + process.TotalProcessorTime.TotalSeconds.ToString() + "s");
tnProcess.Nodes.Add("User Processor time: " + process.UserProcessorTime.TotalSeconds.ToString() + "s");
base.Refresh();
}
///
/// Gets a list of all available Status using Reflection
///
///
private List getAvailableStatus()
{
List types = new List(System.Reflection.Assembly.GetExecutingAssembly().GetTypes());
types = types.FindAll(new Predicate(item => { return item.IsClass && item.Namespace.StartsWith("Trigger.Status"); }));
return types;
}
#endregion
#region Events
private void treeView_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.F5:
this.Refresh();
break;
case Keys.Escape:
this.Close();
break;
case Keys.C:
System.Windows.Forms.Clipboard.SetText(treeView.SelectedNode.Text);
break;
}
}
#endregion
}
}