mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Add GUI console.
This commit is contained in:
142
DiscImageChef.Gui/frmConsole.xeto.cs
Normal file
142
DiscImageChef.Gui/frmConsole.xeto.cs
Normal file
@@ -0,0 +1,142 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using DiscImageChef.CommonTypes.Interop;
|
||||
using DiscImageChef.Console;
|
||||
using Eto.Drawing;
|
||||
using Eto.Forms;
|
||||
using Eto.Serialization.Xaml;
|
||||
using PlatformID = DiscImageChef.CommonTypes.Interop.PlatformID;
|
||||
using Version = DiscImageChef.CommonTypes.Interop.Version;
|
||||
|
||||
namespace DiscImageChef.Gui
|
||||
{
|
||||
public class frmConsole : Form
|
||||
{
|
||||
public frmConsole()
|
||||
{
|
||||
XamlReader.Load(this);
|
||||
|
||||
grdMessages.DataStore = ConsoleHandler.Entries;
|
||||
grdMessages.Columns.Add(new GridColumn
|
||||
{
|
||||
DataCell = new TextBoxCell {Binding = Binding.Property<LogEntry, string>(r => $"{r.Timestamp}")},
|
||||
HeaderText = "Time",
|
||||
Sortable = true
|
||||
});
|
||||
grdMessages.Columns.Add(new GridColumn
|
||||
{
|
||||
DataCell = new TextBoxCell {Binding = Binding.Property<LogEntry, string>(r => r.Type)},
|
||||
HeaderText = "Type",
|
||||
Sortable = true
|
||||
});
|
||||
grdMessages.Columns.Add(new GridColumn
|
||||
{
|
||||
DataCell = new TextBoxCell {Binding = Binding.Property<LogEntry, string>(r => r.Module)},
|
||||
HeaderText = "Module",
|
||||
Sortable = true
|
||||
});
|
||||
grdMessages.Columns.Add(new GridColumn
|
||||
{
|
||||
DataCell = new TextBoxCell {Binding = Binding.Property<LogEntry, string>(r => r.Message)},
|
||||
HeaderText = "Message",
|
||||
Sortable = true
|
||||
});
|
||||
|
||||
grdMessages.AllowMultipleSelection = false;
|
||||
grdMessages.CellFormatting += (sender, e) =>
|
||||
{
|
||||
if(((LogEntry)e.Item).Type.ToLower() != "error") return;
|
||||
|
||||
e.BackgroundColor = Colors.Red;
|
||||
e.ForegroundColor = Colors.Black;
|
||||
};
|
||||
grdMessages.AllowColumnReordering = true;
|
||||
|
||||
chkDebug.Checked = ConsoleHandler.Debug;
|
||||
Closing += OnClosing;
|
||||
}
|
||||
|
||||
void OnClosing(object sender, CancelEventArgs e)
|
||||
{
|
||||
// Otherwise if this closes it does not stop hearing events from collection, preventing console to keep working.
|
||||
grdMessages.DataStore = null;
|
||||
}
|
||||
|
||||
protected void OnChkDebugChecked(object sender, EventArgs e)
|
||||
{
|
||||
ConsoleHandler.Debug = chkDebug.Checked.Value;
|
||||
}
|
||||
|
||||
protected void OnBtnClearClicked(object sender, EventArgs e)
|
||||
{
|
||||
ConsoleHandler.Entries.Clear();
|
||||
}
|
||||
|
||||
protected void OnBtnSaveClicked(object sender, EventArgs e)
|
||||
{
|
||||
SaveFileDialog dlgSave = new SaveFileDialog {CheckFileExists = true};
|
||||
dlgSave.Filters.Add(new FileFilter {Extensions = new[] {"log"}, Name = "Log files"});
|
||||
DialogResult result = dlgSave.ShowDialog(this);
|
||||
if(result != DialogResult.Ok) return;
|
||||
|
||||
try
|
||||
{
|
||||
FileStream logFs = new FileStream(dlgSave.FileName, FileMode.Create, FileAccess.ReadWrite);
|
||||
StreamWriter logSw = new StreamWriter(logFs);
|
||||
|
||||
logSw.WriteLine("Log saved at {0}", DateTime.Now);
|
||||
|
||||
PlatformID platId = DetectOS.GetRealPlatformID();
|
||||
string platVer = DetectOS.GetVersion();
|
||||
AssemblyInformationalVersionAttribute assemblyVersion =
|
||||
Attribute.GetCustomAttribute(typeof(DicConsole).Assembly,
|
||||
typeof(AssemblyInformationalVersionAttribute)) as
|
||||
AssemblyInformationalVersionAttribute;
|
||||
|
||||
logSw.WriteLine("################# System information #################");
|
||||
logSw.WriteLine("{0} {1} ({2}-bit)", DetectOS.GetPlatformName(platId, platVer), platVer,
|
||||
Environment.Is64BitOperatingSystem ? 64 : 32);
|
||||
if(DetectOS.IsMono) logSw.WriteLine("Mono {0}", Version.GetMonoVersion());
|
||||
else logSw.WriteLine(".NET Framework {0}", Environment.Version);
|
||||
|
||||
logSw.WriteLine();
|
||||
|
||||
logSw.WriteLine("################# Program information ################");
|
||||
logSw.WriteLine("DiscImageChef {0}", assemblyVersion?.InformationalVersion);
|
||||
logSw.WriteLine("Running in {0}-bit", Environment.Is64BitProcess ? 64 : 32);
|
||||
logSw.WriteLine("Running GUI mode using {0}", Application.Instance.Platform.ID);
|
||||
#if DEBUG
|
||||
logSw.WriteLine("DEBUG version");
|
||||
#endif
|
||||
logSw.WriteLine("Command line: {0}", Environment.CommandLine);
|
||||
logSw.WriteLine();
|
||||
|
||||
logSw.WriteLine("################# Console ################");
|
||||
foreach(LogEntry entry in ConsoleHandler.Entries)
|
||||
if(entry.Type != "Info")
|
||||
logSw.WriteLine("{0}: ({1}) {2}", entry.Timestamp, entry.Type.ToLower(), entry.Message);
|
||||
else
|
||||
logSw.WriteLine("{0}: {1}", entry.Timestamp, entry.Message);
|
||||
|
||||
logSw.Close();
|
||||
logFs.Close();
|
||||
}
|
||||
catch(Exception exception)
|
||||
{
|
||||
MessageBox.Show("Exception {0} trying to save logfile, details has been sent to console.",
|
||||
exception.Message);
|
||||
DicConsole.ErrorWriteLine("Console", exception.Message);
|
||||
DicConsole.ErrorWriteLine("Console", exception.StackTrace);
|
||||
}
|
||||
}
|
||||
|
||||
#region XAML controls
|
||||
GridView grdMessages;
|
||||
CheckBox chkDebug;
|
||||
Button btnClear;
|
||||
Button btnSave;
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user