SelectorAutomationPeer.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / Automation / Peers / SelectorAutomationPeer.cs / 1305600 / SelectorAutomationPeer.cs

                            using System; 
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Security; 
using System.Text;
using System.Windows; 
using System.Windows.Automation.Provider; 
using System.Windows.Controls;
using System.Windows.Controls.Primitives; 
using System.Windows.Interop;
using System.Windows.Media;

using MS.Internal; 
using MS.Win32;
 
namespace System.Windows.Automation.Peers 
{
 
    ///
    public abstract class SelectorAutomationPeer : ItemsControlAutomationPeer, ISelectionProvider
    {
        /// 
        protected SelectorAutomationPeer(Selector owner): base(owner)
        {} 
 
        ///
        override protected AutomationControlType GetAutomationControlTypeCore() 
        {
            return AutomationControlType.List;
        }
 
        ///
        override public object GetPattern(PatternInterface patternInterface) 
        { 
            if(patternInterface == PatternInterface.Selection)
            { 
                return this;
            }

            return base.GetPattern(patternInterface); // ItemsControlAutomationPeer support Scroll pattern 
        }
 
        /// 
        internal override bool IsPropertySupportedByControlForFindItem(int id)
        { 
            return SelectorAutomationPeer.IsPropertySupportedByControlForFindItemInternal(id);
        }

        internal static new bool IsPropertySupportedByControlForFindItemInternal(int id) 
        {
            if (ItemsControlAutomationPeer.IsPropertySupportedByControlForFindItemInternal(id)) 
                return true; 
            else
            { 
                if (SelectionItemPatternIdentifiers.IsSelectedProperty.Id == id)
                    return true;
                else
                    return false; 
            }
        } 
 
        /// 
        /// Support for IsSelectedProperty should come from SelectorAutomationPeer only, 
        /// 
        internal override object GetSupportedPropertyValue(ItemAutomationPeer itemPeer, int propertyId)
        {
            return SelectorAutomationPeer.GetSupportedPropertyValueInternal(itemPeer, propertyId); 
        }
 
        internal static new object GetSupportedPropertyValueInternal(AutomationPeer itemPeer, int propertyId) 
        {
            if (SelectionItemPatternIdentifiers.IsSelectedProperty.Id == propertyId) 
            {
                ISelectionItemProvider selectionItem = itemPeer.GetPattern(PatternInterface.SelectionItem) as ISelectionItemProvider;
                if (selectionItem != null)
                    return selectionItem.IsSelected; 
                else
                    return null; 
            } 
            return ItemsControlAutomationPeer.GetSupportedPropertyValueInternal(itemPeer, propertyId);
        } 

        //--------------------------------------------------------------------
        //
        //  ISelectionProvider 
        //
        //------------------------------------------------------------------- 
 
        #region ISelectionProvider
 
        IRawElementProviderSimple [] ISelectionProvider.GetSelection()
        {
            Selector owner = (Selector)Owner;
 
            int count = owner._selectedItems.Count;
            int itemsCount = (owner as ItemsControl).Items.Count; 
 
            if(count > 0 && itemsCount > 0)
            { 
                List selectedProviders = new List(count);

                for(int i=0; i AutomationInteropProvider.InvalidateLimit)
                { 
                    this.RaiseAutomationEvent(AutomationEvents.SelectionPatternOnInvalidated); 
                }
                else 
                {
                    int i;

                    for (i = 0; i < numAdded; i++) 
                    {
                        SelectorItemAutomationPeer peer = FindOrCreateItemAutomationPeer(e.AddedItems[i]) as SelectorItemAutomationPeer; 
 
                        if (peer != null)
                        { 
                            peer.RaiseAutomationEvent(AutomationEvents.SelectionItemPatternOnElementAddedToSelection);
                        }
                    }
 
                    for (i = 0; i < numRemoved; i++)
                    { 
                        SelectorItemAutomationPeer peer = FindOrCreateItemAutomationPeer(e.RemovedItems[i]) as SelectorItemAutomationPeer; 

                        if (peer != null) 
                        {
                            peer.RaiseAutomationEvent(AutomationEvents.SelectionItemPatternOnElementRemovedFromSelection);
                        }
                    } 
                }
            } 
        } 

        #endregion 

    }
}
 

 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK