using System; using System.Collections.Generic; using System.Windows.Forms; namespace Matrix42.Extensions.Scaffolder.Wizard { public partial class WizardForm : Form { private readonly List _projects = new List(); public string ExtensionNamespace => txtExtensionNamespace.Text.Trim(); public IReadOnlyList 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(); } } }