using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using CaeModel; using CaeGlobals; using System.Collections; using CPSO.PropertyViews; using CPSO.Settings; namespace CPSO.Forms { public partial class FrmStepControls : UserControls.PrePoMaxChildForm, IFormBase { // Variables private string _stepName; private StepControls _stepControls; private Controller _controller; private TabPage[] _pages; private bool _showWarning; // Properties public StepControls StepControls { get { return _stepControls; } set { _stepControls = value.DeepClone(); } } // Constructors public FrmStepControls(Controller controller) { InitializeComponent(); // _controller = controller; _stepControls = null; // int i = 0; _pages = new TabPage[tcProperties.TabPages.Count]; foreach (TabPage tabPage in tcProperties.TabPages) { tabPage.Paint += TabPage_Paint; _pages[i++] = tabPage; } // _showWarning = true; // ClearControls(); } // Event handling private void TabPage_Paint(object sender, PaintEventArgs e) { SolidBrush fillBrush = new SolidBrush(((TabPage)sender).BackColor); e.Graphics.FillRectangle(fillBrush, e.ClipRectangle); // Enable copy/paste without first selecting the cell 0,0 if (sender == tpDataPoints) { ActiveControl = dgvData; dgvData[0, 0].Selected = true; } } private void tvProperties_DoubleClick(object sender, EventArgs e) { btnAdd_Click(null, null); } private void btnAdd_Click(object sender, EventArgs e) { if (tvProperties.SelectedNode != null && tvProperties.SelectedNode.Tag != null) { string propertyName = tvProperties.SelectedNode.Text; // if (lvAddedProperties.FindItemWithText(propertyName) == null) { ListViewItem item = new ListViewItem(propertyName); if (tvProperties.SelectedNode.Tag is StepControlParameter scp) { if (scp is ResetStepControlParameter rscp) item.Tag = new ViewResetStepControlParameter(rscp.DeepClone()); else if (scp is TimeIncrementationStepControlParameter tiscp) item.Tag = new ViewTimeIncrementationStepControlParameter(tiscp.DeepClone()); else if (scp is FieldStepControlParameter fscp) item.Tag = new ViewFieldStepControlParameter(fscp.DeepClone()); else if (scp is ContactStepControlParameter cscp) item.Tag = new ViewContactStepControlParameter(cscp.DeepClone()); else throw new NotSupportedException(); } else throw new NotSupportedException(); // lvAddedProperties.Items.Add(item); int id = lvAddedProperties.Items.IndexOf(item); lvAddedProperties.Items[id].Selected = true; lvAddedProperties.Select(); } } _propertyItemChanged = true; } private void btnMoveUp_Click(object sender, EventArgs e) { try { int currentIndex = lvAddedProperties.PossiblySelectedItems[0].Index; ListViewItem item = lvAddedProperties.Items[currentIndex]; if (currentIndex > 0) { lvAddedProperties.Items.RemoveAt(currentIndex); lvAddedProperties.Items.Insert(currentIndex - 1, item); } _propertyItemChanged = true; } catch { } } private void btnMoveDown_Click(object sender, EventArgs e) { try { int currentIndex = lvAddedProperties.PossiblySelectedItems[0].Index; ListViewItem item = lvAddedProperties.Items[currentIndex]; if (currentIndex < lvAddedProperties.Items.Count - 1) { lvAddedProperties.Items.RemoveAt(currentIndex); lvAddedProperties.Items.Insert(currentIndex + 1, item); } _propertyItemChanged = true; } catch { } } private void btnRemove_Click(object sender, EventArgs e) { if (lvAddedProperties.PossiblySelectedItems.Count == 1) { ListViewItem item = lvAddedProperties.PossiblySelectedItems[0]; int index = item.Index; if (index == lvAddedProperties.Items.Count - 1) index--; lvAddedProperties.Items.Remove(item); // if (lvAddedProperties.Items.Count > 0) lvAddedProperties.Items[index].Selected = true; else ClearControls(); } _propertyItemChanged = true; } private void lvAddedProperties_SelectedIndexChanged(object sender, EventArgs e) { if (lvAddedProperties.SelectedItems.Count == 1) { // Clear dgvData.DataSource = null; dgvData.Columns.Clear(); tcProperties.TabPages.Clear(); // string gridItemTextToSelect; // if (lvAddedProperties.SelectedItems[0].Tag is ViewResetStepControlParameter vrscp) { tcProperties.TabPages.Add(_pages[0]); // properties gridItemTextToSelect = nameof(vrscp.Reset); } else if (lvAddedProperties.SelectedItems[0].Tag is ViewTimeIncrementationStepControlParameter vtiscp) { tcProperties.TabPages.Add(_pages[0]); // properties gridItemTextToSelect = nameof(vtiscp.I0); } else if (lvAddedProperties.SelectedItems[0].Tag is ViewFieldStepControlParameter vfscp) { tcProperties.TabPages.Add(_pages[0]); // properties gridItemTextToSelect = nameof(vfscp.Rna); if (gridItemTextToSelect == "Rna") gridItemTextToSelect = "Rnα"; else throw new NotSupportedException(); } else if (lvAddedProperties.SelectedItems[0].Tag is ViewContactStepControlParameter vcscp) { tcProperties.TabPages.Add(_pages[0]); // properties gridItemTextToSelect = nameof(vcscp.Delcon); if (gridItemTextToSelect == "Delcon") gridItemTextToSelect = "delcon"; else throw new NotSupportedException(); } else throw new NotSupportedException(); // propertyGrid.SelectedObject = lvAddedProperties.SelectedItems[0].Tag; // Select grid item try { // Get start point grid item GridItem gi = propertyGrid.EnumerateAllItems().First((item) => item.PropertyDescriptor != null && item.PropertyDescriptor.DisplayName.TrimStart(new char[] { '\t' }) == gridItemTextToSelect); // Select it gi.Select(); } catch { } // SetAllGridViewUnits(); } lvAddedProperties.Select(); } private void Binding_ListChanged(object sender, ListChangedEventArgs e) { _propertyItemChanged = true; } private void propertyGrid_PropertyValueChanged(object s, PropertyValueChangedEventArgs e) { _propertyItemChanged = true; } private void tsmiResetAll_Click(object sender, EventArgs e) { if (propertyGrid.SelectedObject is ViewStepControlParameter vscp) { StepControlParameter scp = vscp.Base; scp.Reset(); propertyGrid.Refresh(); _propertyItemChanged = true; } } private void btnOK_Click(object sender, EventArgs e) { try { if (Add()) Hide(); } catch (Exception ex) { ExceptionTools.Show(this, ex); } } private void btnCancel_Click(object sender, EventArgs e) { Hide(); } private void FrmSurfaceInteraction_FormClosing(object sender, FormClosingEventArgs e) { if (e.CloseReason == CloseReason.UserClosing) { e.Cancel = true; Hide(); } } // Methods public bool PrepareForm(string stepName, string notUsed) { _propertyItemChanged = false; _stepControls = null; lvAddedProperties.Items.Clear(); ClearControls(); // _stepName = stepName; // Initialize control parameters tvProperties.Nodes.Find("Reset", true)[0].Tag = new ResetStepControlParameter(); tvProperties.Nodes.Find("Time Incrementation", true)[0].Tag = new TimeIncrementationStepControlParameter(); tvProperties.Nodes.Find("Field", true)[0].Tag = new FieldStepControlParameter(); tvProperties.Nodes.Find("Contact", true)[0].Tag = new ContactStepControlParameter(); tvProperties.ExpandAll(); // StepControls = _controller.GetStep(stepName).StepControls; // to clone // if (_stepControls.Parameters.Count > 0) { ListViewItem item; ViewStepControlParameter view; foreach (var parameter in _stepControls.Parameters) { if (parameter is ResetStepControlParameter rscp) view = new ViewResetStepControlParameter(rscp); else if (parameter is TimeIncrementationStepControlParameter tiscp) view = new ViewTimeIncrementationStepControlParameter(tiscp); else if (parameter is FieldStepControlParameter fscp) view = new ViewFieldStepControlParameter(fscp); else if (parameter is ContactStepControlParameter cscp) view = new ViewContactStepControlParameter(cscp); else throw new NotSupportedException(); // item = new ListViewItem(view.Name); item.Tag = view; lvAddedProperties.Items.Add(item); } // lvAddedProperties.Items[0].Selected = true; lvAddedProperties.Select(); } else _showWarning = true; // _controller.SetSelectByToOff(); // propertyGrid.BuildAutocompleteMenu(_controller.GetAllParameterNames()); dgvData.BuildAutocompleteMenu(_controller.GetAllParameterNames()); // return true; } private void ClearControls() { propertyGrid.SelectedObject = null; dgvData.DataSource = null; // tcProperties.TabPages.Clear(); tcProperties.TabPages.Add(_pages[0]); } public bool Add() { _stepControls = new StepControls(); foreach (ListViewItem item in lvAddedProperties.Items) { _stepControls.AddParameter(((ViewStepControlParameter)(item.Tag)).Base); } // Replace bool applyControls = false; string message = "Customized solution controls are not needed in most nonlinear analyses." + " They should only be used by those users who know what they are doing and" + " are expert in the field."; if (_propertyItemChanged) { if (_showWarning) { if (MessageBoxes.ShowWarningQuestionOKCancel(message) == DialogResult.OK) { applyControls = true; _showWarning = false; } } else applyControls = true; } else return true; // nothing changed // if (applyControls) { _controller.ReplaceStepControlsCommand(_stepName, StepControls); return true; } else return false; } private void SetAllGridViewUnits() { } private void SetGridViewUnit(string columnName, string unit, TypeConverter converter) { DataGridViewColumn col = dgvData.Columns[columnName]; if (col != null) { // Unit if (col.HeaderText != null) col.HeaderText = col.HeaderText.Replace("?", unit); // Alignment col.HeaderCell.Style.Alignment = DataGridViewContentAlignment.BottomCenter; // Converter col.Tag = converter; } } private void SetDataGridViewBinding(object data) { BindingSource binding = new BindingSource(); binding.DataSource = data; dgvData.DataSource = binding; // bind datagridview to binding source - enables adding of new lines binding.ListChanged += Binding_ListChanged; } } }