using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using CaeModel; using CaeGlobals; using System.Windows.Forms; using System.Drawing; using System.ComponentModel; namespace CPSO.Forms { class FrmAmplitude : UserControls.FrmPropertyDataListView, IFormBase { // Variables private string[] _amplitudeNames; private string _amplitudeToEditName; private ViewAmplitude _viewAmplitude; private Controller _controller; private TabPage[] _pages; // Properties public Amplitude Amplitude { get { return _viewAmplitude.GetBase(); } set { var clone = value.DeepClone(); if (clone == null) _viewAmplitude = null; else if (clone is AmplitudeTabular at) _viewAmplitude = new ViewAmplitudeTabular(at); else throw new NotImplementedException(); } } // Constructors public FrmAmplitude(Controller controller) { InitializeComponent(); // _controller = controller; _viewAmplitude = null; // int i = 0; _pages = new TabPage[tcProperties.TabPages.Count]; foreach (TabPage tabPage in tcProperties.TabPages) { tabPage.Paint += TabPage_Paint; _pages[i++] = tabPage; } } private void InitializeComponent() { this.tcProperties.SuspendLayout(); this.tpProperties.SuspendLayout(); this.gbType.SuspendLayout(); this.SuspendLayout(); // // tpDataPoints // this.tpDataPoints.Size = new System.Drawing.Size(302, 217); // // propertyGrid // this.propertyGrid.Location = new System.Drawing.Point(3, 3); this.propertyGrid.Size = new System.Drawing.Size(296, 269); // // FrmAmplitude // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.ClientSize = new System.Drawing.Size(334, 461); this.Name = "FrmAmplitude"; this.Text = "Edit Amplitude"; this.VisibleChanged += new System.EventHandler(this.FrmAmplitude_VisibleChanged); this.tcProperties.ResumeLayout(false); this.tpProperties.ResumeLayout(false); this.gbType.ResumeLayout(false); this.ResumeLayout(false); } // Event handlers private void FrmAmplitude_VisibleChanged(object sender, EventArgs e) { if (Visible) { } else dgvData.HidePlot(); } 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 Binding_ListChanged(object sender, ListChangedEventArgs e) { _propertyItemChanged = true; } // Overrides protected override void OnListViewTypeSelectedIndexChanged() { if (lvTypes.SelectedItems != null && lvTypes.SelectedItems.Count == 1) { // Clear dgvData.DataSource = null; dgvData.Columns.Clear(); tcProperties.TabPages.Clear(); // object itemTag = lvTypes.SelectedItems[0].Tag; if (itemTag is ViewAmplitudeTabular vat) { tcProperties.TabPages.Add(_pages[0]); // properties tcProperties.TabPages.Add(_pages[1]); // data points // SetDataGridViewBinding(vat.DataPoints); // _viewAmplitude = vat; } else throw new NotImplementedException(); // propertyGrid.SelectedObject = lvTypes.SelectedItems[0].Tag; // SetAllGridViewUnits(); // propertyGrid.BuildAutocompleteMenu(_controller.GetAllParameterNames()); dgvData.BuildAutocompleteMenu(_controller.GetAllParameterNames()); } } protected override void OnApply(bool onOkAddNew) { if (propertyGrid.SelectedObject == null) throw new CaeException("No item selected."); // _viewAmplitude = (ViewAmplitude)propertyGrid.SelectedObject; // Check if the name exists CheckName(_amplitudeToEditName, _viewAmplitude.Name, _amplitudeNames, "amplitude"); // Create if (_amplitudeToEditName == null) { _controller.AddAmplitudeCommand(Amplitude); } // Replace else if (_propertyItemChanged) { _controller.ReplaceAmplitudeCommand(_amplitudeToEditName, Amplitude); } } protected override bool OnPrepareForm(string stepName, string amplitudeToEditName) { this.btnOkAddNew.Visible = amplitudeToEditName == null; // _propertyItemChanged = false; _stepName = null; _amplitudeNames = null; _amplitudeToEditName = null; _viewAmplitude = null; lvTypes.Items.Clear(); propertyGrid.SelectedObject = null; // _stepName = stepName; _amplitudeNames = _controller.GetAmplitudeNames(); _amplitudeToEditName = amplitudeToEditName; // if (_amplitudeNames == null) throw new CaeException("The amplitude names must be defined first."); // PopulateListOfAmplitudes(); // if (amplitudeToEditName == null) { lvTypes.Enabled = true; _viewAmplitude = null; if (lvTypes.Items.Count == 1) _preselectIndex = 0; } else { Amplitude = _controller.GetAmplitude(amplitudeToEditName); // to clone // int selectedId; if (_viewAmplitude.GetBase() is AmplitudeTabular) selectedId = 0; else throw new NotSupportedException(); // lvTypes.Items[selectedId].Tag = _viewAmplitude; _preselectIndex = selectedId; } // _controller.SetSelectByToOff(); // return true; } // Methods private void PopulateListOfAmplitudes() { // Populate list view ListViewItem item; // Tabular item = new ListViewItem("Tabular"); ViewAmplitudeTabular vat = new ViewAmplitudeTabular(new AmplitudeTabular(GetAmplitudeName("Tabular"), new double[][] { new double[2] })); item.Tag = vat; lvTypes.Items.Add(item); } private string GetAmplitudeName(string name) { if (name == null || name == "") name = "Amplitude"; name = name.Replace(' ', '_'); name = _amplitudeNames.GetNextNumberedKey(name); // return name; } 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; } private void SetAllGridViewUnits() { string noUnit = "/"; // Amplitude SetGridViewUnit(nameof(AmplitudeDataPoint.Time), _controller.Model.UnitSystem.TimeUnitAbbreviation, _controller.Model.UnitSystem.FrequencyUnitAbbreviation, new StringDoubleConverter()); SetGridViewUnit(nameof(AmplitudeDataPoint.Amplitude), noUnit, null, new StringDoubleConverter()); // dgvData.XColIndex = 0; dgvData.StartPlotAtZero = true; } private void SetGridViewUnit(string columnName, string unit1, string unit2, TypeConverter converter) { DataGridViewColumn col = dgvData.Columns[columnName]; if (col != null) { // Unit if (col.HeaderText != null) { col.HeaderText = col.HeaderText.ReplaceFirst("?", unit1); if (unit2 != null) col.HeaderText = col.HeaderText.ReplaceFirst("?", unit2); } // Alignment col.HeaderCell.Style.Alignment = DataGridViewContentAlignment.BottomCenter; // Width col.Width += 10; // Converter col.Tag = converter; } } } }