Files
HawkeyeVision/framework/Inspectron.Settings.WindowsWizard/SetupPage.cs
2025-07-14 12:03:59 +02:00

157 lines
4.3 KiB
C#

using Inspectron.Settings.WindowsWizard.Enums;
using Inspectron.Settings.WindowsWizard.Interfaces;
namespace Inspectron.Settings.WindowsWizard
{
public partial class SetupPage : Form
{
public SetupPage()
{
InitializeComponent();
}
public SetupPage PreviousPage { get; set; }
public SetupPage NextPage { get; set; }
public FlowLayoutPanel CurrentLayout { get; set; }
public static SetupPage Begin(string tabName,string title=null,Func<bool> expertModeCheck=null)
{
var sp = new SetupPage();
if (title != null)
{
sp.Text = title;
}
sp.ExpertModeCheck = expertModeCheck;
if (sp.ExpertModeCheck == null)
{
sp.checkBox1.Visible = false;
}
TabPage tp = new TabPage();
tp.Text = tabName;
FlowLayoutPanel panel = new FlowLayoutPanel();
panel.Dock = DockStyle.Fill;
panel.FlowDirection = FlowDirection.TopDown;
tp.Controls.Add(panel);
sp.tabControl1.TabPages.Add(tp);
sp.CurrentLayout = panel;
return sp;
}
public Func<bool> ExpertModeCheck { get; set; }
List<TabPage> _expertPages=new List<TabPage>();
public SetupPage Next(string tabName,bool forExpert=false)
{
TabPage tp = new TabPage();
tp.Text = tabName;
FlowLayoutPanel panel = new FlowLayoutPanel();
panel.Dock = DockStyle.Fill;
panel.FlowDirection = FlowDirection.TopDown;
tp.Controls.Add(panel);
if (forExpert)
{
_expertPages.Add(tp);
}
else
{
this.tabControl1.TabPages.Add(tp);
}
this.CurrentLayout = panel;
return this;
}
public static string SplitCamelCase(string input)
{
return System.Text.RegularExpressions.Regex.Replace(input, "([A-Z])", " $1", System.Text.RegularExpressions.RegexOptions.Compiled).Trim();
}
public ESetupResult SetupResult { get; private set; } = ESetupResult.Cancel;
public void ShowSetup()
{
SetupPage start = this;
while (start.PreviousPage!=null)
{
start = start.PreviousPage;
}
start.Show();
}
public void ShowSetupDialog()
{
SetupPage start = this;
while (start.PreviousPage != null)
{
start = start.PreviousPage;
}
start.ShowDialog();
}
public SetupPage FinishWith(Action setupFinished)
{
this.SetupFinished = setupFinished;
return this;
}
public Action SetupFinished { get; set; }
public SetupPage AddItem(ISetupItem item)
{
CurrentLayout.Controls.Add(item as UserControl);
return this;
}
public SetupPage AddItem<T>(object obj, string prp,Action<T> itemAction=null) where T:ISetupItem,new()
{
T pe = new T();
itemAction?.Invoke(pe);
pe.SetProperty(obj, prp);
(pe as UserControl).Width = 500;
this.AddItem(pe);
return this;
}
private void button1_Click(object sender, EventArgs e)
{
SetupFinished?.Invoke();
this.Close();
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked)
{
if ((ExpertModeCheck?.Invoke() ?? true))
{
foreach (TabPage page in _expertPages)
{
this.tabControl1.TabPages.Add(page);
}
}
else
{
checkBox1.Checked = false;
}
}
else
{
foreach (TabPage page in _expertPages)
{
this.tabControl1.TabPages.Remove(page);
}
}
}
}
}