#if FRAMEWORK20
using System;
using System.Collections.Generic;
using System.Text;
using DevComponents.AdvTree;
using System.Drawing;
using System.ComponentModel;
namespace DevComponents.DotNetBar
{
    /// 
    /// Represents the option list property node for AdvPropertyGrid.
    /// 
    public class PropertyOptionListNode : PropertyNode
    {
        #region Internal Implementation
        /// 
        /// Initializes a new instance of the PropertyNode class.
        /// 
        /// 
        public PropertyOptionListNode(PropertyDescriptor property)
            : base(property)
        {
        }
        internal override void OnLoaded()
        {
            base.OnLoaded();
            Cell cell = this.EditCell;
            ItemContainer container = new ItemContainer();
            container.LayoutOrientation = eOrientation.Vertical;
            string[] optionsList = GetPopupListContent();
            foreach (string optionText in optionsList)
            {
                CheckBoxItem item = new CheckBoxItem();
                item.CheckBoxStyle = eCheckBoxStyle.RadioButton;
                item.Text = optionText;
                item.TextColor = Color.Black;
                item.VerticalPadding = 0;
                item.CheckSignSize = new Size(11, 11);
                item.CheckedChanging += ItemCheckedChanging;
                container.SubItems.Add(item);
            }
            container.Style = eDotNetBarStyle.Office2007;
            cell.HostedItem = container;
        }
        protected override void Dispose(bool disposing)
        {
            BaseItem container = this.EditCell.HostedItem;
            if (container != null)
            {
                this.EditCell.HostedItem = null;
                foreach (BaseItem item in container.SubItems)
                {
                    CheckBoxItem checkItem = item as CheckBoxItem;
                    if (checkItem != null) checkItem.CheckedChanging -= ItemCheckedChanging;
                }
                container.Dispose();
            }
            base.Dispose(disposing);
        }
        void ItemCheckedChanging(object sender, CheckBoxChangeEventArgs e)
        {
            if (e.EventSource != eEventSource.Code)
            {
                Exception valueException = null;
                object value = GetValueFromString(((CheckBoxItem)sender).Text, out valueException);
                e.Cancel = !ApplyValue(value, valueException);
            }
        }
        protected override void UpdateDisplayedValue(object propertyValue, bool refreshSubProperties)
        {
            base.UpdateDisplayedValue(propertyValue, refreshSubProperties);
            string text = GetPropertyTextValue(propertyValue);
            Cell cell = this.EditCell;
            if (cell.HostedItem == null) return;
            foreach (BaseItem item in cell.HostedItem.SubItems)
            {
                CheckBoxItem checkItem = item as CheckBoxItem;
                if (checkItem != null)
                    checkItem.Checked = checkItem.Text.Equals(text);
            }
        }
        public override void EnterEditorMode(eTreeAction action, bool focusEditor)
        {
        }
        
        #endregion
    }
}
#endif