using System; using System.Collections.Generic; using System.Windows.Automation.Peers; using System.Windows.Automation.Provider; using System.Windows.Controls; using EGC = ExtendedGrid.Microsoft.Windows.Controls; namespace ExtendedGrid.Microsoft.Windows.Controls { /// /// AutomationPeer for DataGridColumnHeader /// public sealed class DataGridColumnHeaderAutomationPeer : ButtonBaseAutomationPeer, IInvokeProvider, IScrollItemProvider, ITransformProvider { #region Constructors /// /// AutomationPeer for DataGridColumnHeader /// /// DataGridColumnHeader public DataGridColumnHeaderAutomationPeer(EGC.DataGridColumnHeader owner) : base(owner) { } #endregion #region AutomationPeer Overrides /// /// Gets the control type for the element that is associated with the UI Automation peer. /// /// The control type. protected override AutomationControlType GetAutomationControlTypeCore() { return AutomationControlType.HeaderItem; } /// /// Called by GetClassName that gets a human readable name that, in addition to AutomationControlType, /// differentiates the control represented by this AutomationPeer. /// /// The string that contains the name. protected override string GetClassNameCore() { return Owner.GetType().Name; } /// /// Gets the control pattern that is associated with the specified System.Windows.Automation.Peers.PatternInterface. /// /// A value from the System.Windows.Automation.Peers.PatternInterface enumeration. /// The object that supports the specified pattern, or null if unsupported. public override object GetPattern(PatternInterface patternInterface) { switch (patternInterface) { case PatternInterface.Invoke: { if (this.OwningHeader.Column != null && this.OwningHeader.Column.CanUserSort) { return this; } break; } case PatternInterface.ScrollItem: { return this; } case PatternInterface.Transform: { if (this.OwningHeader.Column != null && this.OwningHeader.Column.DataGridOwner.CanUserResizeColumns) { return this; } break; } } return base.GetPattern(patternInterface); } /// /// Gets a value that specifies whether the element is a content element. /// /// true if the element is a content element; otherwise false protected override bool IsContentElementCore() { return false; } #endregion #region IInvokeProvider void IInvokeProvider.Invoke() { this.OwningHeader.Invoke(); } #endregion #region IScrollItemProvider void IScrollItemProvider.ScrollIntoView() { if (this.OwningHeader.Column != null) { EGC.DataGrid dataGrid = this.OwningHeader.Column.DataGridOwner; if (dataGrid != null) { dataGrid.ScrollIntoView(null, this.OwningHeader.Column); } } } #endregion #region ITransformProvider bool ITransformProvider.CanMove { get { return false; } } bool ITransformProvider.CanResize { get { return this.OwningHeader.Column != null && this.OwningHeader.Column.DataGridOwner.CanUserResizeColumns; } } bool ITransformProvider.CanRotate { get { return false; } } void ITransformProvider.Move(double x, double y) { throw new InvalidOperationException(); } void ITransformProvider.Resize(double width, double height) { if (this.OwningHeader.Column != null && this.OwningHeader.Column.DataGridOwner.CanUserResizeColumns) { this.OwningHeader.Column.Width = new EGC.DataGridLength(width); } else { throw new InvalidOperationException(); } } void ITransformProvider.Rotate(double degrees) { throw new InvalidOperationException(); } #endregion #region Properties private EGC.DataGridColumnHeader OwningHeader { get { return (EGC.DataGridColumnHeader)Owner; } } #endregion } }