/// <summary> /// Returns new row to use in list from object's data. /// </summary> /// <param name="obj"></param> /// <returns></returns> private DataGridViewRow GetRowFromObject(DataObject obj) { var row = new DataGridViewRow(); row.CreateCells(this.LstObjects); row.Cells[0].Value = obj.Name; var i = 1; foreach (var fieldDef in obj.Type.Fields.Values.OrderBy(a => a.Offset)) { var field = obj.Fields[fieldDef.Name]; switch (fieldDef.VarType) { case DataVarType.Color: row.Cells[i].Value = ((uint)field.Value).ToString("X8"); break; default: row.Cells[i].Value = field.Value; break; } //row.Cells[i].ToolTipText = fieldDef.VarType.ToString(); i++; } return(row); }
/// <summary> /// Called when the Add Object button is clicked, adds an object /// with default values to list and file. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void BtnAddObject_Click(object sender, EventArgs e) { var listName = this.CboList.Text; var list = _openFile.Lists[listName]; var type = list.Type; var name = "NewObject"; for (var i = 1; ; ++i) { if (!list.Objects.Any(a => a.Name == name + i)) { name = name + i; break; } } var obj = DataObject.New(name, type); var row = this.GetRowFromObject(obj); this.LstObjects.Rows.Add(row); list.Objects.Add(obj); this.LstObjects.ClearSelection(); this.LstObjects.CurrentCell = this.LstObjects[0, this.LstObjects.RowCount - 1]; }
/// <summary> /// Called to validate the value of a cell, cancels editing if /// a value that was entered was invalid, such as an empty object /// name or a non-numeric string for an integer field. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void LstObjects_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { if (!_editingCell) { return; } var row = this.LstObjects.Rows[e.RowIndex]; var col = this.LstObjects.Columns[e.ColumnIndex]; var cell = this.LstObjects.Rows[e.RowIndex].Cells[e.ColumnIndex]; var listName = this.CboList.Text; var objName = row.Cells[0].Value.ToString(); var list = _openFile.Lists[listName]; var obj = list.Objects.FirstOrDefault(a => a.Name == objName); if (obj == null) { MessageBox.Show($"Object '{objName}' was not found, something went wrong here. Please report.", this.Title, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } _validatedObj = obj; var newValue = e.FormattedValue.ToString(); var fieldName = col.Name; if (fieldName == "_ObjName") { if (newValue == "") { e.Cancel = true; this.LstObjects.CancelEdit(); this.LstObjects.EndEdit(); MessageBox.Show($"Object Name can't be empty.", this.Title, MessageBoxButtons.OK, MessageBoxIcon.Error); } else if (list.Objects.Any(a => a.Name == newValue)) { e.Cancel = true; this.LstObjects.CancelEdit(); this.LstObjects.EndEdit(); MessageBox.Show($"Object names must be unique.", this.Title, MessageBoxButtons.OK, MessageBoxIcon.Error); } } else { var field = obj.Fields[fieldName]; if (!field.ValidateStringValue(newValue)) { e.Cancel = true; this.LstObjects.CancelEdit(); this.LstObjects.EndEdit(); MessageBox.Show($"Invalid '{field.VarType}' value.", this.Title, MessageBoxButtons.OK, MessageBoxIcon.Error); } } }