/// <summary>
        /// Callback for enumerating property names and values.
        /// </summary>
        /// <param name="key"> The object instance to retrieve the properties for. </param>
        /// <returns> An enumerable list of ExpandableObjectProperty instances. </returns>
        private IEnumerable <ExpandableObjectProperty> EnumerateProperties(object key)
        {
            var obj = key as Jurassic.Library.ObjectInstance;

            if (obj == null)
            {
                throw new InvalidOperationException("Can only enumerate ObjectInstances.");
            }
            foreach (var property in obj.Properties)
            {
                object value     = (property.Attributes & ~PropertyAttributes.FullAccess) == 0 ? property.Value : obj[property.Name];
                Color  color     = Colors.Black;
                string valueText = Jurassic.TypeConverter.ToString(value);
                if (value is string)
                {
                    // Make sure the string isn't too long.
                    if (valueText.Length > 100)
                    {
                        valueText = valueText.Substring(0, 100) + "...";
                    }
                    valueText = Jurassic.Library.StringInstance.Quote(valueText);
                }
                else if (property.Value == null || value == Jurassic.Undefined.Value)
                {
                    color = Colors.Gray;
                }
                var result = new ExpandableObjectProperty(property.Name, valueText, value as Jurassic.Library.ObjectInstance);
                result.Color = color;
                yield return(result);
            }
        }
 /// <summary>
 /// Callback for enumerating property names and values.
 /// </summary>
 /// <param name="key"> The object instance to retrieve the properties for. </param>
 /// <returns> An enumerable list of ExpandableObjectProperty instances. </returns>
 private IEnumerable<ExpandableObjectProperty> EnumerateProperties(object key)
 {
     var obj = key as Jurassic.Library.ObjectInstance;
     if (obj == null)
         throw new InvalidOperationException("Can only enumerate ObjectInstances.");
     foreach (var property in obj.Properties)
     {
         object value = (property.Attributes & ~PropertyAttributes.FullAccess) == 0 ? property.Value : obj[property.Name];
         Color color = Colors.Black;
         string valueText = Jurassic.TypeConverter.ToString(value);
         if (value is string)
         {
             // Make sure the string isn't too long.
             if (valueText.Length > 100)
                 valueText = valueText.Substring(0, 100) + "...";
             valueText = Jurassic.Library.StringInstance.Quote(valueText);
         }
         else if (property.Value == null || value == Jurassic.Undefined.Value)
             color = Colors.Gray;
         var result = new ExpandableObjectProperty(property.Name, valueText, value as Jurassic.Library.ObjectInstance);
         result.Color = color;
         yield return result;
     }
 }