Files
2026-06-26 11:31:03 +02:00

165 lines
5.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace Matrix42.Extensions.Scaffolder.Wizard
{
public partial class WizardForm : Form
{
private readonly List<ProjectDefinition> _projects = new List<ProjectDefinition>();
public string ExtensionNamespace => txtExtensionNamespace.Text.Trim();
public IReadOnlyList<ProjectDefinition> Projects => _projects;
public WizardForm()
{
InitializeComponent();
cboProjectType.DataSource = Enum.GetValues(typeof(ProjectType));
clbRuntimes.Items.Add("Win");
clbRuntimes.Items.Add("WinCore");
clbRuntimes.Items.Add("LinuxCore");
clbRuntimes.Items.Add("ALL");
cboProjectType.SelectedIndexChanged += CboProjectType_SelectedIndexChanged;
}
private void WizardForm_Load(object sender, EventArgs e)
{
lblHint.Text = "aka Matrix42.MyExtension";
}
private void CboProjectType_SelectedIndexChanged(object sender, EventArgs e)
{
var type = (ProjectType)cboProjectType.SelectedItem;
switch (type)
{
case ProjectType.WebApi:
txtProjectPrefix.Text = "Services";
txtProjectPrefix.ReadOnly = false;
break;
case ProjectType.Contracts:
txtProjectPrefix.Text = "Contracts";
txtProjectPrefix.ReadOnly = false;
break;
case ProjectType.BizLogic:
txtProjectPrefix.Text = "BizLogic";
txtProjectPrefix.ReadOnly = false;
break;
case ProjectType.Custom:
txtProjectPrefix.Text = string.Empty;
txtProjectPrefix.ReadOnly = false;
break;
}
}
private void btnAddProject_Click(object sender, EventArgs e)
{
if (!ValidateProjectInputs())
return;
var def = new ProjectDefinition
{
Type = (ProjectType)cboProjectType.SelectedItem,
Prefix = txtProjectPrefix.Text.Trim(),
Runtimes = GetSelectedRuntimes()
};
_projects.Add(def);
lstProjects.Items.Add(def.Display);
txtProjectPrefix.Clear();
for (int i = 0; i < clbRuntimes.Items.Count; i++)
clbRuntimes.SetItemChecked(i, false);
}
private RuntimeTargets GetSelectedRuntimes()
{
RuntimeTargets result = RuntimeTargets.None;
foreach (var item in clbRuntimes.CheckedItems)
{
switch (item.ToString())
{
case "Win":
result |= RuntimeTargets.Win;
break;
case "WinCore":
result |= RuntimeTargets.WinCore;
break;
case "LinuxCore":
result |= RuntimeTargets.LinuxCore;
break;
case "ALL":
result |= RuntimeTargets.All;
break;
}
}
return result;
}
private bool ValidateProjectInputs()
{
if (cboProjectType.SelectedItem == null)
{
MessageBox.Show("Please select project type.");
return false;
}
var type = (ProjectType)cboProjectType.SelectedItem;
if (string.IsNullOrWhiteSpace(txtProjectPrefix.Text))
{
if (type == ProjectType.Custom)
{
MessageBox.Show("Project prefix is required for Custom project type.");
return false;
}
}
if (clbRuntimes.CheckedItems.Count == 0)
{
MessageBox.Show("Please select at least one runtime.");
return false;
}
return true;
}
private void btnRemoveSelected_Click(object sender, EventArgs e)
{
int idx = lstProjects.SelectedIndex;
if (idx < 0 || idx >= _projects.Count)
return;
_projects.RemoveAt(idx);
lstProjects.Items.RemoveAt(idx);
}
private void btnOK_Click(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(ExtensionNamespace))
{
MessageBox.Show("Extension Namespace is required.");
return;
}
if (_projects.Count == 0)
{
MessageBox.Show("Please add at least one project.");
return;
}
DialogResult = DialogResult.OK;
Close();
}
private void btnCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
}
}