File: winforms\Managed\System\WinForms\DataGridViewEditingControl.cs
Project: ndp\fx\src\System.Windows.Forms.csproj (System.Windows.Forms)
//------------------------------------------------------------------------------
// <copyright file="DataGridViewEditingControl.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>                                                                
//------------------------------------------------------------------------------
 
namespace System.Windows.Forms
{
    using System;
    using System.Diagnostics;
    using System.Diagnostics.CodeAnalysis;
    using System.Security.Permissions;
 
    /// <include file='doc\DataGridViewEditingControl.uex' path='docs/doc[@for="IDataGridViewEditingControl"]/*' />
    public interface IDataGridViewEditingControl
    {
        /// <include file='doc\DataGridViewEditingControl.uex' path='docs/doc[@for="IDataGridViewEditingControl.EditingControlDataGridView"]/*' />
        DataGridView EditingControlDataGridView
        {
            get;
            set;
        }
 
        /// <include file='doc\DataGridViewEditingControl.uex' path='docs/doc[@for="IDataGridViewEditingControl.EditingControlFormattedValue"]/*' />
        [SuppressMessage("Microsoft.Naming", "CA1721:PropertyNamesShouldNotMatchGetMethods")]
        object EditingControlFormattedValue
        {
            get;
            set;
        }
 
        /// <include file='doc\DataGridViewEditingControl.uex' path='docs/doc[@for="IDataGridViewEditingControl.EditingControlRowIndex"]/*' />
        int EditingControlRowIndex
        {
            get;
            set;
        }
 
        /// <include file='doc\DataGridViewEditingControl.uex' path='docs/doc[@for="IDataGridViewEditingControl.EditingControlValueChanged"]/*' />
        bool EditingControlValueChanged
        {
            get;
            set;
        }
 
        /// <include file='doc\DataGridViewEditingControl.uex' path='docs/doc[@for="IDataGridViewEditingControl.EditingPanelCursor"]/*' />
        Cursor EditingPanelCursor
        {
            get;
        }
 
        /// <include file='doc\DataGridViewEditingControl.uex' path='docs/doc[@for="IDataGridViewEditingControl.RepositionEditingControlOnValueChange"]/*' />
        bool RepositionEditingControlOnValueChange
        {
            get;
        }
 
        /// <include file='doc\DataGridViewEditingControl.uex' path='docs/doc[@for="IDataGridViewEditingControl.ApplyCellStyleToEditingControl"]/*' />
        void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle);
 
        /// <include file='doc\DataGridViewEditingControl.uex' path='docs/doc[@for="IDataGridViewEditingControl.EditingControlWantsInputKey"]/*' />
        bool EditingControlWantsInputKey(Keys keyData, bool dataGridViewWantsInputKey);
 
        /// <include file='doc\DataGridViewEditingControl.uex' path='docs/doc[@for="IDataGridViewEditingControl.GetEditingControlFormattedValue"]/*' />
        [SuppressMessage("Microsoft.Naming", "CA1721:PropertyNamesShouldNotMatchGetMethods")]
        object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context);
 
        /// <include file='doc\DataGridViewEditingControl.uex' path='docs/doc[@for="IDataGridViewEditingControl.PrepareEditingControlForEdit"]/*' />
        void PrepareEditingControlForEdit(bool selectAll);
    }
 
    /// <include file='doc\DataGridViewEditingControl.uex' path='docs/doc[@for="DataGridViewEditingControlAccessibleObject"]/*' />
    /// <devdoc>
    ///    Implements a custom AccessibleObject that fixes editing control's accessibility ancestor chain.
    /// </devdoc>
    [System.Runtime.InteropServices.ComVisible(true)]
    internal class DataGridViewEditingControlAccessibleObject : Control.ControlAccessibleObject
    {
        public DataGridViewEditingControlAccessibleObject(Control ownerControl) : base(ownerControl)
        {
            Debug.Assert(ownerControl is IDataGridViewEditingControl, "ownerControl must implement IDataGridViewEditingControl");
        }
 
        internal override bool IsIAccessibleExSupported()
        {
            if (AccessibilityImprovements.Level3)
            {
                return true;
            }
 
            return base.IsIAccessibleExSupported();
        }
 
        public override AccessibleObject Parent
        {
            [SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
            get
            {
                return (Owner as IDataGridViewEditingControl)?.EditingControlDataGridView?.CurrentCell?.AccessibilityObject;
            }
        }
 
        internal override bool IsPatternSupported(int patternId)
        {
            if (AccessibilityImprovements.Level3 && patternId == NativeMethods.UIA_ExpandCollapsePatternId)
            {
                ComboBox ownerComboBoxControl = Owner as ComboBox;
                if (ownerComboBoxControl != null)
                {
                    return ownerComboBoxControl.DropDownStyle != ComboBoxStyle.Simple;
                }
            }
 
            return base.IsPatternSupported(patternId);
        }
 
        internal override object GetPropertyValue(int propertyID)
        {
            if (AccessibilityImprovements.Level3 && propertyID == NativeMethods.UIA_IsExpandCollapsePatternAvailablePropertyId)
            {
                return IsPatternSupported(NativeMethods.UIA_ExpandCollapsePatternId);
            }
 
            return base.GetPropertyValue(propertyID);
        }
 
        internal override UnsafeNativeMethods.ExpandCollapseState ExpandCollapseState
        {
            get
            {
                ComboBox ownerComboBoxControl = Owner as ComboBox;
                if (ownerComboBoxControl != null)
                {
                    return ownerComboBoxControl.DroppedDown == true ? UnsafeNativeMethods.ExpandCollapseState.Expanded : UnsafeNativeMethods.ExpandCollapseState.Collapsed;
                }
 
                return base.ExpandCollapseState;
            }
        }
    }
}