165 lines
5.0 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|