using MgTestAdmin.Model; using SqliteDotNet; using System; using System.Windows.Forms; namespace MgTestAdmin { public partial class ParameterSetManager : UserControl { public ParameterSetManager() { InitializeComponent(); } public event EventHandler SelectedParamSetChanged; public ParameterSetInfo SelectedParamSet { get { if (lstParamSets.SelectedItem != null) return (ParameterSetInfo)lstParamSets.SelectedItem; return null; } } private SqliteDb _db; private bool _freeze; private OperationProviderService _opService; public void Setup(SqliteDb db, bool freeze, OperationProviderService opService) { _db = db; _freeze = freeze; _opService = opService; tbAdd.DropDownItems.Clear(); if (_opService != null) { foreach (var cat in _opService.GetCategories()) { var btn = new ToolStripMenuItem(cat); tbAdd.DropDownItems.Add(btn); foreach (var op in _opService.GetProviders(cat)) { var opBtn = new ToolStripMenuItem(op.Name); opBtn.Tag = op; opBtn.Click += OpBtn_Click; btn.DropDownItems.Add(opBtn); } } } mainToolstrip.Visible = !_freeze; lstParamSets.DataSource = _db.GetParamSets(); //If we have any tests in the list select the first one by default if (lstParamSets.Items.Count > 0) { lstParamSets.SelectedIndex = 0; } tbDelete.Enabled = lstParamSets.SelectedIndex >= 0; } private void OpBtn_Click(object sender, EventArgs e) { var op = (sender as ToolStripMenuItem)?.Tag as IOperationProvider; if (op != null) { lstParamSets.ClearSelected(); var ps = op.CreateDefault(_db.GetNewParamSetId()); this.LoadMainPanel(new ParameterSetControl().Attach(ps, _db, _freeze)); } } private void tbDelete_Click(object sender, EventArgs e) { MessageBox.Show("Not implemented yet"); } private void lstParamSets_SelectedIndexChanged(object sender, EventArgs e) { tbDelete.Enabled = lstParamSets.SelectedIndex >= 0; if (lstParamSets.SelectedItem != null) { var psi = (ParameterSetInfo)lstParamSets.SelectedItem; var ps = _db.GetParamSet(psi.Id); if (ps != null) { this.LoadMainPanel(new ParameterSetControl().Attach(ps, _db, _freeze)); this.SelectedParamSetChanged?.Invoke(this, EventArgs.Empty); } } } private void ClearMainPanel() { foreach (Control c in splitContainer1.Panel2.Controls) { c.Dispose(); } splitContainer1.Panel2.Controls.Clear(); } private void LoadMainPanel(Control c) { this.SuspendLayout(); try { this.ClearMainPanel(); c.Dock = DockStyle.Fill; splitContainer1.Panel2.Controls.Add(c); } finally { this.ResumeLayout(); } } } }