public HResult SetProperty(int property, object value)
{
try
{
try
{
if (property < 0)
{
switch ((NiHierarchyProperty)property)
{
case NiHierarchyProperty.FirstChild:
case NiHierarchyProperty.NextSibling:
throw new ArgumentOutOfRangeException("property", NeutralResources.CannotSetProperty);
case NiHierarchyProperty.Parent:
if (value != null && !(value is NiHierarchy))
{
throw new ArgumentOutOfRangeException("value", NeutralResources.ParentMustBeHierarchy);
}
return(ProcessParentChange((NiHierarchy)value));
case NiHierarchyProperty.Image:
case NiHierarchyProperty.OverlayImage:
if (value != null && !(value is IResource))
{
throw new ArgumentOutOfRangeException("value", NeutralResources.InvalidPropertyType);
}
break;
case NiHierarchyProperty.ItemType:
if (value != null && !(value is NiHierarchyType))
{
throw new ArgumentOutOfRangeException("value", NeutralResources.InvalidPropertyType);
}
break;
case NiHierarchyProperty.OwnerType:
if (value != null && !(value is Guid))
{
throw new ArgumentOutOfRangeException("value", NeutralResources.InvalidPropertyType);
}
break;
case NiHierarchyProperty.Name:
if (value != null && !(value is string))
{
throw new ArgumentOutOfRangeException("value", NeutralResources.InvalidPropertyType);
}
string oldName = _name;
_name = (string)value;
if (
_parent != null &&
!String.Equals(_name, oldName, NameComparison)
)
{
_parent.Reposition(this);
}
return(HResult.OK);
case NiHierarchyProperty.SortPriority:
if (value != null && !(value is int))
{
throw new ArgumentOutOfRangeException("value", NeutralResources.InvalidPropertyType);
}
var oldSortPriority = _sortPriority;
_sortPriority = (int?)value;
if (
_parent != null &&
_sortPriority.GetValueOrDefault() != oldSortPriority.GetValueOrDefault()
)
{
_parent.Reposition(this);
}
return(HResult.OK);
default:
throw new ArgumentOutOfRangeException("property", NeutralResources.UnknownProperty);
}
}
if (value == null)
{
_properties.Remove(property);
}
else
{
_properties[property] = value;
}
}
finally
{
_connectionPoint.ForAll(p => p.OnPropertyChanged(this, property));
}
return(HResult.OK);
}
catch (Exception ex)
{
return(ErrorUtil.GetHResult(ex));
}
}