Ejemplo n.º 1
0
        private bool HandleObjectNameChanged(object oldValue, object newValue, GridItem changedItem)
        {
            // See if what we changed is the name of the selected object.
            if (ReferenceEquals(changedItem.PropertyDescriptor, TypeDescriptor.GetProperties(pgProperties.SelectedObject)["Name"]))
            {
                // Yes, get old and new value.
                var oldName = oldValue as string;
                var newName = newValue as string;

                // Adjust manager layout, this will throw as necessary.
                tvData.BeginUpdate();
                try
                {
                    if (pgProperties.SelectedObject is IFactory)
                    {
                        FactoryManager.Rename(oldName, newName);
                    }
                    else if (pgProperties.SelectedObject is ItemPool)
                    {
                        ItemPoolManager.Rename(oldName, newName);
                    }
                    else if (pgProperties.SelectedObject is AttributePool)
                    {
                        AttributePoolManager.Rename(oldName, newName);
                    }
                }
                catch (ArgumentException ex)
                {
                    // Revert to old name.
                    if (pgProperties.SelectedObject is IFactory)
                    {
                        ((IFactory)pgProperties.SelectedObject).Name = oldName;
                    }
                    else if (pgProperties.SelectedObject is ItemPool)
                    {
                        ((ItemPool)pgProperties.SelectedObject).Name = oldName;
                    }
                    else if (pgProperties.SelectedObject is AttributePool)
                    {
                        ((AttributePool)pgProperties.SelectedObject).Name = oldName;
                    }

                    // Tell the user why.
                    MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return(false);
                }
                finally
                {
                    // Stop updating the tree.
                    tvData.EndUpdate();
                }

                if (pgProperties.SelectedObject is IFactory)
                {
                    SelectFactory((IFactory)pgProperties.SelectedObject);
                }
                else if (pgProperties.SelectedObject is ItemPool)
                {
                    SelectItemPool((ItemPool)pgProperties.SelectedObject);
                }
                else if (pgProperties.SelectedObject is AttributePool)
                {
                    SelectAttributePool((AttributePool)pgProperties.SelectedObject);
                }

                SelectProperty("Name");
            }
            else
            {
                // Rescan for issues related to this property.
                if (changedItem.PropertyDescriptor != null &&
                    changedItem.PropertyDescriptor.Attributes[typeof(TriggersFullValidationAttribute)] == null)
                {
                    if (pgProperties.SelectedObject is IFactory)
                    {
                        ScanForIssues((IFactory)pgProperties.SelectedObject);
                    }
                    else if (pgProperties.SelectedObject is ItemPool)
                    {
                        ScanForIssues((ItemPool)pgProperties.SelectedObject);
                    }

                    // Done, avoid the full rescan.
                    return(true);
                }
            }

            // Do a full scan when we come here.
            ScanForIssues();
            return(true);
        }