Skip to content

Commit 951b4e0

Browse files
committed
Added a UI-Applikation "TRA.Tool" to enable a userfriendly use of the TrassierungInterface library
1 parent 649c06f commit 951b4e0

10 files changed

+902
-16
lines changed

TRA.Tool/MainForm.Designer.cs

Lines changed: 138 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

TRA.Tool/MainForm.cs

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
using Microsoft.Extensions.DependencyInjection;
2+
using Microsoft.Extensions.Logging;
3+
using TrassierungInterface;
4+
5+
namespace TRA.Tool
6+
{
7+
public partial class MainForm : Form
8+
{
9+
private ILogger<MainForm> logger;
10+
public MainForm()
11+
{
12+
InitializeComponent();
13+
LoadRootDirectories();
14+
15+
// Handle TreeView events
16+
treeView.ItemDrag += TreeView_ItemDrag;
17+
18+
ILoggerFactory loggerFactory = LoggerFactory.Create(builder =>
19+
{
20+
builder.AddProvider(new TextBoxLoggerProvider(tb_Log));
21+
});
22+
// Create logger
23+
logger = loggerFactory.CreateLogger<MainForm>();
24+
TrassierungLog.AssignLogger(loggerFactory);
25+
26+
}
27+
28+
private void LoadRootDirectories()
29+
{
30+
treeView.Nodes.Clear();
31+
foreach (var drive in Directory.GetLogicalDrives())
32+
{
33+
var rootNode = new TreeNode(drive);
34+
rootNode.Nodes.Add("Loading...");
35+
treeView.Nodes.Add(rootNode);
36+
}
37+
treeView.BeforeExpand += TreeView_BeforeExpand;
38+
}
39+
40+
private void TreeView_BeforeExpand(object sender, TreeViewCancelEventArgs e)
41+
{
42+
var node = e.Node;
43+
if (node.Nodes[0].Text == "Loading...")
44+
{
45+
node.Nodes.Clear();
46+
LoadDirectoriesAndFiles(node);
47+
}
48+
}
49+
50+
private void LoadDirectoriesAndFiles(TreeNode node)
51+
{
52+
try
53+
{
54+
var path = node.FullPath;
55+
foreach (var directory in Directory.GetDirectories(path))
56+
{
57+
var dirNode = new TreeNode(Path.GetFileName(directory)) { Tag = directory };
58+
dirNode.Nodes.Add("Loading...");
59+
node.Nodes.Add(dirNode);
60+
}
61+
62+
foreach (var file in Directory.GetFiles(path))
63+
{
64+
var fileNode = new TreeNode(Path.GetFileName(file)) { Tag = file };
65+
node.Nodes.Add(fileNode);
66+
}
67+
}
68+
catch (UnauthorizedAccessException)
69+
{
70+
// Handle access exceptions
71+
}
72+
}
73+
74+
private void TreeView_ItemDrag(object sender, ItemDragEventArgs e)
75+
{
76+
TreeNode node = (TreeNode)e.Item;
77+
if (node.Tag != null)
78+
{
79+
DoDragDrop(node,
80+
DragDropEffects.Copy);
81+
}
82+
}
83+
84+
85+
}
86+
87+
public class TextBoxLogger : ILogger
88+
{
89+
private readonly string _name;
90+
private readonly TextBox _textBox;
91+
92+
public TextBoxLogger(string name, TextBox textBox)
93+
{
94+
_name = name;
95+
_textBox = textBox;
96+
}
97+
98+
public IDisposable BeginScope<TState>(TState state) => null;
99+
100+
public bool IsEnabled(LogLevel logLevel) => true;
101+
102+
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
103+
{
104+
if (formatter == null)
105+
{
106+
throw new ArgumentNullException(nameof(formatter));
107+
}
108+
109+
string message = formatter(state, exception);
110+
if (!string.IsNullOrEmpty(message))
111+
{
112+
_textBox.Invoke((Action)(() => _textBox.AppendText($"{DateTime.Now}: {logLevel} - {message}{Environment.NewLine}")));
113+
}
114+
}
115+
}
116+
117+
public class TextBoxLoggerProvider : ILoggerProvider
118+
{
119+
private readonly TextBox _textBox;
120+
121+
public TextBoxLoggerProvider(TextBox textBox)
122+
{
123+
_textBox = textBox;
124+
}
125+
126+
public ILogger CreateLogger(string categoryName)
127+
{
128+
return new TextBoxLogger(categoryName, _textBox);
129+
}
130+
131+
public void Dispose() { }
132+
}
133+
134+
}

TRA.Tool/MainForm.resx

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
<root>
2+
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
3+
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
4+
<xsd:element name="root" msdata:IsDataSet="true">
5+
<xsd:complexType>
6+
<xsd:choice maxOccurs="unbounded">
7+
<xsd:element name="metadata">
8+
<xsd:complexType>
9+
<xsd:sequence>
10+
<xsd:element name="value" type="xsd:string" minOccurs="0" />
11+
</xsd:sequence>
12+
<xsd:attribute name="name" use="required" type="xsd:string" />
13+
<xsd:attribute name="type" type="xsd:string" />
14+
<xsd:attribute name="mimetype" type="xsd:string" />
15+
<xsd:attribute ref="xml:space" />
16+
</xsd:complexType>
17+
</xsd:element>
18+
<xsd:element name="assembly">
19+
<xsd:complexType>
20+
<xsd:attribute name="alias" type="xsd:string" />
21+
<xsd:attribute name="name" type="xsd:string" />
22+
</xsd:complexType>
23+
</xsd:element>
24+
<xsd:element name="data">
25+
<xsd:complexType>
26+
<xsd:sequence>
27+
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
28+
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
29+
</xsd:sequence>
30+
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
31+
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
32+
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
33+
<xsd:attribute ref="xml:space" />
34+
</xsd:complexType>
35+
</xsd:element>
36+
<xsd:element name="resheader">
37+
<xsd:complexType>
38+
<xsd:sequence>
39+
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
40+
</xsd:sequence>
41+
<xsd:attribute name="name" type="xsd:string" use="required" />
42+
</xsd:complexType>
43+
</xsd:element>
44+
</xsd:choice>
45+
</xsd:complexType>
46+
</xsd:element>
47+
</xsd:schema>
48+
<resheader name="resmimetype">
49+
<value>text/microsoft-resx</value>
50+
</resheader>
51+
<resheader name="version">
52+
<value>2.0</value>
53+
</resheader>
54+
<resheader name="reader">
55+
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
56+
</resheader>
57+
<resheader name="writer">
58+
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
59+
</resheader>
60+
</root>

TRA.Tool/Program.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using Microsoft.Extensions.DependencyInjection;
2+
using Microsoft.Extensions.Logging;
3+
using TrassierungInterface;
4+
5+
namespace TRA.Tool
6+
{
7+
internal static class Program
8+
{
9+
/// <summary>
10+
/// The main entry point for the application.
11+
/// </summary>
12+
[STAThread]
13+
static void Main()
14+
{
15+
// To customize application configuration such as set high DPI settings or default font,
16+
// see https://aka.ms/applicationconfiguration.
17+
ApplicationConfiguration.Initialize();
18+
19+
Application.Run(new MainForm());
20+
21+
22+
}
23+
24+
25+
26+
}
27+
}
28+
29+
30+

TRA.Tool/TRA.Tool.csproj

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>WinExe</OutputType>
5+
<TargetFramework>net6.0-windows</TargetFramework>
6+
<Nullable>enable</Nullable>
7+
<UseWindowsForms>true</UseWindowsForms>
8+
<ImplicitUsings>enable</ImplicitUsings>
9+
</PropertyGroup>
10+
11+
<ItemGroup>
12+
<ProjectReference Include="..\TrassierungInterface\TrassierungInterface.csproj" />
13+
</ItemGroup>
14+
15+
</Project>

0 commit comments

Comments
 (0)