// </Snippet101>

        // <Snippet102>
        ///--------------------------------------------------------------------
        /// <summary>
        /// Obtains a table items primary row or column header.
        /// </summary>
        /// <param name="tableItem">
        /// The table item of interest.
        /// </param>
        /// <returns>
        /// The table item header.
        /// </returns>
        ///--------------------------------------------------------------------
        private AutomationElement GetTableItemHeader(TableItemPattern tableItem)
        {
            if (tableItem == null)
            {
                throw new ArgumentException("Target element cannot be null.");
            }

            TablePattern tablePattern = GetTablePattern(tableItem.Current.ContainingGrid);

            if (tablePattern == null)
            {
                return(null);
            }

            AutomationElement[] tableHeaders =
                GetPrimaryHeaders(tablePattern);

            if (tableHeaders == null)
            {
                // Indeterminate headers.
                return(null);
            }

            if (tablePattern.Current.RowOrColumnMajor == RowOrColumnMajor.ColumnMajor)
            {
                return(tableHeaders[tableItem.Current.Column]);
            }

            if (tablePattern.Current.RowOrColumnMajor == RowOrColumnMajor.RowMajor)
            {
                return(tableHeaders[tableItem.Current.Row]);
            }

            return(null);
        }
        // </Snippet103>

        // <Snippet104>
        ///--------------------------------------------------------------------
        /// <summary>
        /// Gets the current property values from target.
        /// </summary>
        /// <param name="tableItemPattern">
        /// A TableItemPattern control pattern obtained from
        /// an AutomationElement representing a target control.
        /// </param>
        /// <param name="automationProperty">
        /// The automation property of interest.
        /// </param>
        /// <returns>
        /// An object representing the requested integer property value.
        /// </returns>
        ///--------------------------------------------------------------------
        private object GetTableItemProperties(
            TableItemPattern tableItemPattern,
            AutomationProperty automationProperty)
        {
            if (automationProperty.Id ==
                TableItemPattern.ColumnProperty.Id)
            {
                return(tableItemPattern.Current.Column);
            }
            if (automationProperty.Id ==
                TableItemPattern.RowProperty.Id)
            {
                return(tableItemPattern.Current.Row);
            }
            if (automationProperty.Id ==
                TableItemPattern.ColumnSpanProperty.Id)
            {
                return(tableItemPattern.Current.ColumnSpan);
            }
            if (automationProperty.Id ==
                TableItemPattern.RowSpanProperty.Id)
            {
                return(tableItemPattern.Current.RowSpan);
            }

            return(null);
        }
Beispiel #3
0
        /// <summary>
        /// Gets the ordinal number of the row that contains the cell or item.
        /// </summary>
        /// <param name="item">The UI Automation element.</param>
        /// <returns>
        /// A zero-based ordinal number that identifies the row containing the cell or item
        /// </returns>
        internal static int GetRowIndex(AutomationElement item)
        {
            /* move to next state */
            TableItemPattern pat = (TableItemPattern)CommonUIAPatternHelpers.CheckPatternSupport(TableItemPattern.Pattern, item);

            return(pat.Current.Row);
        }
Beispiel #4
0
        /// <summary>
        /// Gets a UI Automation provider that implements IGridProvider and represents the container of the cell or item
        /// </summary>
        /// <param name="item">The UI Automation element</param>
        /// <returns>
        /// A UI Automation provider that implements the GridPattern and represents the cell or item container
        /// </returns>
        internal static AutomationElement GetContainingGrid(AutomationElement item)
        {
            /* move to next state */
            TableItemPattern pat = (TableItemPattern)CommonUIAPatternHelpers.CheckPatternSupport(TableItemPattern.Pattern, item);

            return(pat.Current.ContainingGrid);
        }
Beispiel #5
0
 /// -------------------------------------------------------------------
 /// <summary>
 /// Get the TableItemPattern on the element
 /// </summary>
 /// -------------------------------------------------------------------
 public TableItemTests(AutomationElement element, TestPriorities priority, string dirResults, bool testEvents, TypeOfControl typeOfControl, IApplicationCommands commands)
     :
     base(element, TestSuite, priority, typeOfControl, TypeOfPattern.TableItem, dirResults, testEvents, commands)
 {
     m_pattern = (TableItemPattern)GetPattern(m_le, m_useCurrent, TableItemPattern.Pattern);
     if (m_pattern == null)
     {
         throw new Exception(Helpers.PatternNotSupported);
     }
 }
Beispiel #6
0
        public static bool TryGetTableItemPattern(this AutomationElement element, out TableItemPattern result)
        {
            if (element.TryGetCurrentPattern(System.Windows.Automation.TableItemPattern.Pattern, out var pattern))
            {
                result = (TableItemPattern)pattern;
                return(true);
            }

            result = null;
            return(false);
        }
        // </SnippetGetTableElement>

        // <Snippet101>
        ///--------------------------------------------------------------------
        /// <summary>
        /// Obtains a TableItemPattern control pattern from an
        /// AutomationElement.
        /// </summary>
        /// <param name="targetControl">
        /// The AutomationElement of interest.
        /// </param>
        /// <returns>
        /// A TableItemPattern object.
        /// </returns>
        ///--------------------------------------------------------------------
        private TableItemPattern GetTableItemPattern(
            AutomationElement targetControl)
        {
            TableItemPattern tableItemPattern = null;

            try
            {
                tableItemPattern =
                    targetControl.GetCurrentPattern(
                        TableItemPattern.Pattern)
                    as TableItemPattern;
            }
            // Object doesn't support the
            // TableItemPattern control pattern
            catch (InvalidOperationException)
            {
                return(null);
            }

            return(tableItemPattern);
        }
        public void TablePatternCachedTest()
        {
            CacheRequest req = new CacheRequest();

            req.Add(TablePattern.Pattern);
            req.Add(TableItemPattern.Pattern);
            req.Add(GridPattern.Pattern);
            req.Add(GridItemPattern.Pattern);
            req.Add(GridPattern.RowCountProperty);
            req.Add(GridPattern.ColumnCountProperty);
            req.Add(GridItemPattern.RowProperty);
            req.Add(GridItemPattern.ColumnProperty);
            req.Add(GridItemPattern.ContainingGridProperty);
            req.Add(TablePattern.RowHeadersProperty);
            req.Add(TablePattern.ColumnHeadersProperty);
            req.Add(TableItemPattern.RowHeaderItemsProperty);
            req.Add(TableItemPattern.ColumnHeaderItemsProperty);
            using (req.Activate())
            {
                AutomationElement itemsView = ExplorerTargetTests.explorerHost.Element.FindFirst(TreeScope.Subtree,
                                                                                                 new PropertyCondition(AutomationElement.ClassNameProperty, "UIItemsView"));
                Assert.IsNotNull(itemsView);

                // TablePattern test
                TablePattern table = (TablePattern)itemsView.GetCachedPattern(TablePattern.Pattern);
                Assert.IsTrue(table.Cached.ColumnCount > 0);
                Assert.IsTrue(table.Cached.RowCount > 0);
                Assert.IsTrue(table.Cached.GetRowHeaders().Length == 0);
                Assert.IsTrue(table.Cached.GetColumnHeaders().Length > 0);

                AutomationElement tableItemElement = table.GetItem(0, 0);
                TableItemPattern  tableItem        = (TableItemPattern)tableItemElement.GetCachedPattern(TableItemPattern.Pattern);
                Assert.AreEqual(tableItem.Cached.Row, 0);
                Assert.AreEqual(tableItem.Cached.Column, 0);
                Assert.AreEqual(tableItem.Cached.ContainingGrid, itemsView);
                Assert.IsTrue(tableItem.Cached.GetColumnHeaderItems().Length == 1);
                Assert.IsTrue(tableItem.Cached.GetRowHeaderItems().Length == 0);
            }
        }
        public void TablePatternTest()
        {
            AutomationElement itemsView = ExplorerTargetTests.explorerHost.Element.FindFirst(TreeScope.Subtree,
                                                                                             new PropertyCondition(AutomationElement.ClassNameProperty, "UIItemsView"));

            Assert.IsNotNull(itemsView);

            // TablePattern test
            TablePattern table = (TablePattern)itemsView.GetCurrentPattern(TablePattern.Pattern);

            Assert.IsTrue(table.Current.ColumnCount > 0);
            Assert.IsTrue(table.Current.RowCount > 0);
            Assert.IsTrue(table.Current.GetRowHeaders().Length == 0);
            Assert.IsTrue(table.Current.GetColumnHeaders().Length > 0);

            AutomationElement tableItemElement = table.GetItem(0, 0);
            TableItemPattern  tableItem        = (TableItemPattern)tableItemElement.GetCurrentPattern(TableItemPattern.Pattern);

            Assert.AreEqual(tableItem.Current.Row, 0);
            Assert.AreEqual(tableItem.Current.Column, 0);
            Assert.AreEqual(tableItem.Current.ContainingGrid, itemsView);
            Assert.IsTrue(tableItem.Current.GetColumnHeaderItems().Length == 1);
            Assert.IsTrue(tableItem.Current.GetRowHeaderItems().Length == 0);
        }
        // </Snippet102>

        // <Snippet103>
        ///--------------------------------------------------------------------
        /// <summary>
        /// Event handler for table item focus change.
        /// Can be used to track traversal of individual table items
        /// within a table.
        /// </summary>
        /// <param name="src">Object that raised the event.</param>
        /// <param name="e">Event arguments.</param>
        ///--------------------------------------------------------------------
        private void OnTableItemFocusChange(
            object src, AutomationFocusChangedEventArgs e)
        {
            // Make sure the element still exists. Elements such as tooltips
            // can disappear before the event is processed.
            AutomationElement sourceElement;

            try
            {
                sourceElement = src as AutomationElement;
            }
            catch (ElementNotAvailableException)
            {
                return;
            }

            // Get a TableItemPattern from the source of the event.
            TableItemPattern tableItemPattern =
                GetTableItemPattern(sourceElement);

            if (tableItemPattern == null)
            {
                return;
            }

            // Get a TablePattern from the container of the current element.
            TablePattern tablePattern =
                GetTablePattern(tableItemPattern.Current.ContainingGrid);

            if (tablePattern == null)
            {
                return;
            }

            AutomationElement tableItem = null;

            try
            {
                tableItem = tablePattern.GetItem(
                    tableItemPattern.Current.Row,
                    tableItemPattern.Current.Column);
            }
            catch (ArgumentOutOfRangeException)
            {
                // If the requested row coordinate is larger than the RowCount
                // or the column coordinate is larger than the ColumnCount.
                // -- OR --
                // If either of the requested row or column coordinates
                // is less than zero.
                // TO DO: error handling.
            }

            // Further event processing can be done at this point.
            // For the purposes of this sample we can just record item properties.
            string controlType =
                tableItem.Current.ControlType.LocalizedControlType;

            AutomationElement[] columnHeaders =
                tableItemPattern.Current.GetColumnHeaderItems();
            AutomationElement[] rowHeaders =
                tableItemPattern.Current.GetRowHeaderItems();
            int itemRow        = tableItemPattern.Current.Row;
            int itemColumn     = tableItemPattern.Current.Column;
            int itemRowSpan    = tableItemPattern.Current.RowSpan;
            int itemColumnSpan = tableItemPattern.Current.ColumnSpan;
        }
Beispiel #11
0
        /// <summary>
        /// Retrieves a collection of UI Automation providers representing all the row headers associated with a table item or cell
        /// </summary>
        /// <param name="control">The UI Automation element</param>
        /// <returns>
        /// A collection of UI Automation providers
        /// </returns>
        internal static AutomationElement[] GetRowHeaderItems(AutomationElement control)
        {
            TableItemPattern pat = (TableItemPattern)CommonUIAPatternHelpers.CheckPatternSupport(TableItemPattern.Pattern, control);

            return(pat.Current.GetRowHeaderItems());
        }
 public TableItemPatternPropertyObject(TableItemPattern pattern)
 {
     this._pattern = pattern;
 }