File: UI\MobileControls\Design\Util\UnsettableComboBox.cs
Project: ndp\fx\src\mit\System\Web\System.Web.Mobile.csproj (System.Web.Mobile)
//------------------------------------------------------------------------------
// <copyright file="UnsettableComboBox.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>                                                                
//------------------------------------------------------------------------------
 
namespace System.Web.UI.Design.MobileControls.Util
{
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Diagnostics;
    using System.Drawing;
    using System.Windows.Forms;
 
    //   Standard combobox with a "Not Set" item as the first item in its dropdown.
    //   It also automatically blanks out the "Not Set" item on losing focus.
    [
        System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand,
        Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)
    ]
    [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")]
    internal class UnsettableComboBox : ComboBox 
    {
        private String notSetText;
        private String notSetCompactText;
 
        internal UnsettableComboBox() 
        {
            notSetText = SR.GetString(SR.UnsettableComboBox_NotSetText);
            notSetCompactText = SR.GetString(SR.UnsettableComboBox_NotSetCompactText);
        }
 
        internal String NotSetText 
        {
            get 
            {
                return notSetText;
            }
            set 
            {
                notSetText = value;
            }
        }
 
        internal String NotSetCompactText 
        {
            get 
            {
                return notSetCompactText;
            }
            set 
            {
                notSetCompactText = value;
            }
        }
 
        public override String Text 
        {
            get 
            {
                // handle DropDown styles in Templating Options dialog
                // if (this.SelectedIndex == 0) || (this.SelectedIndex == -1))
                if (this.SelectedIndex == 0)
                {
                    return String.Empty;
                }
                else
                {
                    return base.Text;
                }
            }
 
            set 
            {
                if (value == notSetCompactText)
                {
                    base.Text = String.Empty;
                }
                else
                {
                    base.Text = value;
                }
            }
        }
 
        internal void AddItem(Object item) 
        {
            EnsureNotSetItem();
            Items.Add(item);
        }
 
        internal void EnsureNotSetItem() 
        {
            if (Items.Count == 0) 
            {
                Items.Add(notSetText);
            }
        }
 
#if UNUSED_CODE
        internal bool IsSet() 
        {
            return SelectedIndex > 0;
        }
#endif
        protected override void OnLostFocus(EventArgs e) 
        {
            base.OnLostFocus(e);
 
            if (SelectedIndex == 0)
            {
                SelectedIndex = -1;
            }
        }
 
        protected override void SetItemsCore(IList values)
        {
            Items.Clear();
            
            if (!DesignMode) 
            {
                Items.Add(notSetText);
            }
            
            // Unfortunately. the interfaces between SetItemsCore and
            // AddItemsCore are mismatched as of 3106.
            ArrayList items = new ArrayList();
            foreach(Object item in values)
            {
                items.Add(item);
            }
            
            base.AddItemsCore(items.ToArray());
        }
    }
}