File: Microsoft\Windows\Automation\Peers\RibbonGalleryAutomationPeer.cs
Web Access
Project: src\src\Microsoft.DotNet.Wpf\src\System.Windows.Controls.Ribbon\System.Windows.Controls.Ribbon_dxtfdo3u_wpftmp.csproj (System.Windows.Controls.Ribbon)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
 
 
#region Using declarations
 
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Windows.Automation.Provider;
#if RIBBON_IN_FRAMEWORK
using System.Windows.Controls.Ribbon;
 
#if RIBBON_IN_FRAMEWORK
namespace System.Windows.Automation.Peers
#else
namespace Microsoft.Windows.Automation.Peers
#endif
{
#else
    using Microsoft.Windows.Controls.Ribbon;
#endif
 
    #endregion
 
    public class RibbonGalleryAutomationPeer : ItemsControlAutomationPeer, ISelectionProvider
    {
        #region constructor
 
        public RibbonGalleryAutomationPeer(RibbonGallery owner)
            : base(owner)
        { }
 
        #endregion constructor
 
        #region AutomationPeer overrides
 
        ///
        override public object GetPattern(PatternInterface patternInterface)
        {
            if (patternInterface == PatternInterface.Selection)
            {
                return this;
            }
            return base.GetPattern(patternInterface);
        }
 
        ///
        override protected string GetClassNameCore()
        {
            return "RibbonGallery";
        }
 
        /// <summary>
        ///   Returns help text 
        /// </summary>
        protected override string GetHelpTextCore()
        {
            string helpText = base.GetHelpTextCore();
            if (String.IsNullOrEmpty(helpText))
            {
                RibbonToolTip toolTip = ((RibbonGallery)Owner).ToolTip as RibbonToolTip;
                if (toolTip != null)
                {
                    helpText = toolTip.Description;
                }
            }
 
            return helpText;
        }
 
        ///
        override protected AutomationControlType GetAutomationControlTypeCore()
        {
            return AutomationControlType.List;
        }
 
        ///
        protected override List<AutomationPeer> GetChildrenCore()
        {
            RibbonGallery owner = (RibbonGallery)Owner;
            List<AutomationPeer> children = null;
 
#if IN_RIBBON_GALLERY
            // If this is an InRibbonGallery, then we do not want the filter peer or the
            // RibbonGalleryCategory peers in the tree.  Add only the RibbonGalleryItem peers.
            if (owner.ParentInRibbonGallery != null &&
                owner.ParentInRibbonGallery.IsInInRibbonMode)
            {
                foreach (AutomationPeer categoryPeer in base.GetChildrenCore())
                {
                    foreach (AutomationPeer itemPeer in categoryPeer.GetChildren())
                    {
                        if (children == null)
                        {
                            children = new List<AutomationPeer>();
                        }
 
                        children.Add(itemPeer);
                    }
                }
 
                return children;
            }
#endif
 
            if (!owner.IsGrouping)
            {
                children = base.GetChildrenCore();
            }
            
            if (owner.CanUserFilter)
            {
                UIElement filterHost = null;
                if (owner.FilterPaneContent != null || owner.FilterPaneContentTemplate != null)
                {
                    filterHost = owner.FilterContentPane;
                }
                else
                {
                    filterHost = owner.FilterMenuButton;
                }
 
                if (filterHost != null)
                {
                    if (children == null)
                    {
                        children = new List<AutomationPeer>(1);
                    }
 
                    children.Insert(0, RibbonHelper.CreatePeer(filterHost));
                }
            }
 
            return children;
        }
 
        #endregion AutomationPeer overrides
 
        #region ItemsControlAutomationPeer override
 
        protected override ItemAutomationPeer CreateItemAutomationPeer(object item)
        {
            return new RibbonGalleryCategoryDataAutomationPeer(item, this);
        }
 
        #endregion ItemsControlAutomationPeer override
 
        #region ISelectionProvider Members
 
        /// <summary>
        /// True
        /// </summary>
        bool ISelectionProvider.CanSelectMultiple
        {
            get { return false; }
        }
 
        /// <summary>
        /// return SelectedContainers for SelectedItem
        /// </summary>
        /// <returns></returns>
        IRawElementProviderSimple[] ISelectionProvider.GetSelection()
        {
            List<IRawElementProviderSimple> selectedProviders = new List<IRawElementProviderSimple>();
            Collection<RibbonGalleryItem> selectedContainers = ((RibbonGallery)Owner).SelectedContainers;
            for (int index = 0; index < selectedContainers.Count; index++)
            {
                AutomationPeer peer = UIElementAutomationPeer.FromElement(selectedContainers[index]);
 
                // With alization in effect RibbonGalleryItemDataAP would be exposed to client not the Peer directly associated with UI
                // and Selection must return the relevant peer(RibbonGalleryItemDataAP) stored in EventSource.
                if (peer.EventsSource != null)
                    peer = peer.EventsSource;
                
                if (peer != null)
                {
                    selectedProviders.Add(ProviderFromPeer(peer)); 
                }
            }
 
            if (selectedProviders.Count != 0)
            {
                return selectedProviders.ToArray();
            }
 
            return null;
        }
 
        /// <summary>
        /// False
        /// </summary>
        bool ISelectionProvider.IsSelectionRequired
        {
            get { return false; }
        }
 
        #endregion
    }
}