#if FRAMEWORK20
using System;
using System.Collections.Generic;
using System.Text;
using DevComponents.AdvTree;
using System.ComponentModel;
using System.Drawing;
namespace DevComponents.DotNetBar
{
    internal class PropertyNodeFactory
    {
        #region Constructors
        /// 
        /// Initializes a new instance of the PropertyNodeFactory class.
        /// 
        /// 
        public PropertyNodeFactory(IPropertyElementStyleProvider styleProvider)
        {
            _StyleProvider = styleProvider;
        }
        #endregion
        #region Internal Implementation
        public PropertyNode CreatePropertyNode(PropertyDescriptor item, object targetComponent, IPropertyGridLocalizer localizer, PropertySettingsCollection propertySettings, bool isMultiObject)
        {
            PropertySettings settings = propertySettings[item, item.Name];
            return CreatePropertyNode(item, targetComponent, localizer, settings, isMultiObject);
        }
        public PropertyNode CreatePropertyNode(PropertyDescriptor item, object targetComponent, IPropertyGridLocalizer localizer, PropertySettings settings, bool isMultiObject)
        {
            PropertyNode node = null;
            if (item.PropertyType == typeof(Color) && (settings == null || settings.ValueEditor == null))
                node = new PropertyNodeColor(item);
            else if (item.PropertyType == typeof(bool) && (settings == null || settings.ValueEditor == null))
                node = new PropertyCheckBoxNode(item);
            else if (settings != null && settings.PropertyNodeType == ePropertyNodeType.RadioButtonList)
                node = new PropertyOptionListNode(item);
            else
                node = new PropertyNode(item);
            node.IsMultiObject = isMultiObject;
            node.NodesIndent = _ChildPropertiesIndent;
            node.ImageAlignment = eCellPartAlignment.FarCenter;
            string name = localizer.GetPropertyName(item.Name);
            if (string.IsNullOrEmpty(name)) name = item.DisplayName;
            node.Text = name;
            node.TargetComponent = targetComponent;
            Cell cell = new Cell();
            cell.Selectable = false;
            cell.TextMarkupEnabled = false;
            node.Cells.Add(cell);
            
            node.PropertySettings = settings;
            return node;
        }
        public Node CreateCategoryNode(string category, IPropertyGridLocalizer localizer)
        {
            PropertyCategoryNode node = new PropertyCategoryNode();
            if (_StyleProvider != null)
                node.Style = _StyleProvider.CategoryStyle;
            string name = localizer.GetCategoryName(category);
            if (string.IsNullOrEmpty(name)) name = category;
            node.Text = name;
            node.Expanded = true;
            node.FullRowBackground = true;
            node.Selectable = true;
            node.CellNavigationEnabled = false;
            return node;
        }
        private int _ChildPropertiesIndent = 9;
        public int ChildPropertiesIndent
        {
            get { return _ChildPropertiesIndent; }
            set
            {
                _ChildPropertiesIndent = value;
            }
        }
        private IPropertyElementStyleProvider _StyleProvider;
        public IPropertyElementStyleProvider StyleProvider
        {
            get { return _StyleProvider; }
            set { _StyleProvider = value; }
        }
        #endregion
    }
}
#endif