diff --git a/orchestrator-ui.sln b/orchestrator-ui.sln
new file mode 100644
index 0000000..2eafe02
--- /dev/null
+++ b/orchestrator-ui.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.10.35027.167
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "orchestrator-ui", "orchestrator-ui\orchestrator-ui.csproj", "{FD7C4C9C-B075-43CE-8146-D030633F649F}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {FD7C4C9C-B075-43CE-8146-D030633F649F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FD7C4C9C-B075-43CE-8146-D030633F649F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FD7C4C9C-B075-43CE-8146-D030633F649F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FD7C4C9C-B075-43CE-8146-D030633F649F}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {2C99DD72-6D41-462B-A0B7-A6F7AFCDF3CE}
+ EndGlobalSection
+EndGlobal
diff --git a/orchestrator-ui/MainUI.Designer.cs b/orchestrator-ui/MainUI.Designer.cs
new file mode 100644
index 0000000..1fe7a1c
--- /dev/null
+++ b/orchestrator-ui/MainUI.Designer.cs
@@ -0,0 +1,162 @@
+namespace orchestrator_ui
+{
+ partial class MainUI
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ sourceBox = new ComboBox();
+ modeBox = new ComboBox();
+ destinationBox = new ComboBox();
+ extraBox = new TextBox();
+ entryName = new TextBox();
+ button1 = new Button();
+ literalBox = new CheckBox();
+ saveButton = new Button();
+ listView1 = new ListView();
+ SuspendLayout();
+ //
+ // sourceBox
+ //
+ sourceBox.FormattingEnabled = true;
+ sourceBox.Items.AddRange(new object[] { "BASE_DIR" });
+ sourceBox.Location = new Point(354, 12);
+ sourceBox.Name = "sourceBox";
+ sourceBox.Size = new Size(119, 28);
+ sourceBox.TabIndex = 1;
+ sourceBox.Text = "BASE_DIR";
+ //
+ // modeBox
+ //
+ modeBox.FormattingEnabled = true;
+ modeBox.Items.AddRange(new object[] { "COPY", "COPY_DIR" });
+ modeBox.Location = new Point(476, 12);
+ modeBox.Name = "modeBox";
+ modeBox.Size = new Size(119, 28);
+ modeBox.TabIndex = 2;
+ modeBox.Text = "COPY";
+ //
+ // destinationBox
+ //
+ destinationBox.FormattingEnabled = true;
+ destinationBox.Items.AddRange(new object[] { "PLUGINS" });
+ destinationBox.Location = new Point(232, 12);
+ destinationBox.Name = "destinationBox";
+ destinationBox.Size = new Size(119, 28);
+ destinationBox.TabIndex = 3;
+ destinationBox.Text = "PLUGINS";
+ //
+ // extraBox
+ //
+ extraBox.Location = new Point(599, 13);
+ extraBox.Name = "extraBox";
+ extraBox.PlaceholderText = "Extra";
+ extraBox.Size = new Size(125, 27);
+ extraBox.TabIndex = 4;
+ //
+ // entryName
+ //
+ entryName.Location = new Point(104, 13);
+ entryName.Name = "entryName";
+ entryName.PlaceholderText = "Entry Name";
+ entryName.Size = new Size(125, 27);
+ entryName.TabIndex = 5;
+ //
+ // button1
+ //
+ button1.Location = new Point(731, 13);
+ button1.Name = "button1";
+ button1.Size = new Size(26, 29);
+ button1.TabIndex = 6;
+ button1.Text = "+";
+ button1.UseVisualStyleBackColor = true;
+ button1.Click += button1_Click;
+ //
+ // literalBox
+ //
+ literalBox.AutoSize = true;
+ literalBox.Location = new Point(12, 15);
+ literalBox.Name = "literalBox";
+ literalBox.Size = new Size(72, 24);
+ literalBox.TabIndex = 7;
+ literalBox.Text = "Literal";
+ literalBox.UseVisualStyleBackColor = true;
+ //
+ // saveButton
+ //
+ saveButton.Location = new Point(762, 13);
+ saveButton.Name = "saveButton";
+ saveButton.Size = new Size(26, 29);
+ saveButton.TabIndex = 8;
+ saveButton.Text = "S";
+ saveButton.UseVisualStyleBackColor = true;
+ saveButton.Click += saveButton_Click;
+ //
+ // listView1
+ //
+ listView1.AutoArrange = false;
+ listView1.GridLines = true;
+ listView1.LabelEdit = true;
+ listView1.LabelWrap = false;
+ listView1.Location = new Point(12, 45);
+ listView1.Name = "listView1";
+ listView1.Size = new Size(776, 393);
+ listView1.TabIndex = 9;
+ listView1.UseCompatibleStateImageBehavior = false;
+ listView1.View = View.List;
+ //
+ // MainUI
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(800, 450);
+ Controls.Add(listView1);
+ Controls.Add(saveButton);
+ Controls.Add(literalBox);
+ Controls.Add(button1);
+ Controls.Add(entryName);
+ Controls.Add(extraBox);
+ Controls.Add(destinationBox);
+ Controls.Add(modeBox);
+ Controls.Add(sourceBox);
+ Name = "MainUI";
+ Text = "Orchestrator UI";
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+ private ComboBox sourceBox;
+ private ComboBox modeBox;
+ private ComboBox destinationBox;
+ private TextBox extraBox;
+ private TextBox entryName;
+ private Button button1;
+ private CheckBox literalBox;
+ private Button saveButton;
+ private ListView listView1;
+ }
+}
diff --git a/orchestrator-ui/MainUI.cs b/orchestrator-ui/MainUI.cs
new file mode 100644
index 0000000..b0df19e
--- /dev/null
+++ b/orchestrator-ui/MainUI.cs
@@ -0,0 +1,66 @@
+using System.Text;
+
+namespace orchestrator_ui
+{
+ public partial class MainUI : Form
+ {
+
+ private string FileName;
+
+ public MainUI()
+ {
+ OpenFileDialog openFileDialog = new OpenFileDialog();
+ openFileDialog.ShowDialog();
+ FileName = openFileDialog.FileName;
+ if (!FileName.EndsWith(".settings"))
+ {
+ MessageBox.Show("Error! Only .settings file can be loaded");
+ Application.Exit();
+ return;
+ }
+
+ string[] lines = File.ReadAllLines(FileName);
+
+ InitializeComponent();
+
+ foreach (string line in lines)
+ {
+ listView1.Items.Add(line);
+ }
+ }
+
+ private void button1_Click(object sender, EventArgs e)
+ {
+ bool isLiteral = literalBox.Checked;
+ String entry = entryName.Text;
+ String destination = destinationBox.Text;
+ String source = sourceBox.Text;
+ String mode = modeBox.Text;
+ String extra = extraBox.Text;
+
+ StringBuilder stringBuilder = new StringBuilder();
+ if (isLiteral)
+ {
+ stringBuilder.Append("LITERAL ");
+ }
+
+ stringBuilder.Append(entry).Append(",").Append(destination).Append(",").Append(source).Append(",").Append(mode);
+
+ if (extra.Trim().Length > 0)
+ {
+ stringBuilder.Append(" ").Append(extra);
+ }
+
+ listView1.Items.Add(stringBuilder.ToString());
+ }
+
+ private void saveButton_Click(object sender, EventArgs e)
+ {
+ List list = new List();
+ foreach (ListViewItem item in listView1.Items) {
+ list.Add(item.Text);
+ }
+ File.WriteAllLines(FileName, list.ToArray());
+ }
+ }
+}
diff --git a/orchestrator-ui/MainUI.resx b/orchestrator-ui/MainUI.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/orchestrator-ui/MainUI.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/orchestrator-ui/Program.cs b/orchestrator-ui/Program.cs
new file mode 100644
index 0000000..aabf01f
--- /dev/null
+++ b/orchestrator-ui/Program.cs
@@ -0,0 +1,17 @@
+namespace orchestrator_ui
+{
+ internal static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ // To customize application configuration such as set high DPI settings or default font,
+ // see https://aka.ms/applicationconfiguration.
+ ApplicationConfiguration.Initialize();
+ Application.Run(new MainUI());
+ }
+ }
+}
\ No newline at end of file
diff --git a/orchestrator-ui/orchestrator-ui.csproj b/orchestrator-ui/orchestrator-ui.csproj
new file mode 100644
index 0000000..b7ee157
--- /dev/null
+++ b/orchestrator-ui/orchestrator-ui.csproj
@@ -0,0 +1,12 @@
+
+
+
+ WinExe
+ net8.0-windows
+ orchestrator_ui
+ enable
+ true
+ enable
+
+
+
\ No newline at end of file