Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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];
        }
Exemple #3
0
        /// <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);
                }
            }
        }