internal DataGridGroupItemAutomationPeer GetOrCreateGroupItemPeer(object group) { DataGridGroupItemAutomationPeer peer = null; if (group != null) { if (_groupItemPeers.ContainsKey(group)) { peer = _groupItemPeers[group]; } else { peer = new DataGridGroupItemAutomationPeer(group as CollectionViewGroup, this.OwningDataGrid); _groupItemPeers.Add(group, peer); } DataGridRowGroupHeaderAutomationPeer rghPeer = peer.OwningRowGroupHeaderPeer; if (rghPeer != null) { rghPeer.EventsSource = peer; } } return(peer); }
internal void PopulateGroupItemPeers() { Dictionary <object, DataGridGroupItemAutomationPeer> oldChildren = new Dictionary <object, DataGridGroupItemAutomationPeer>(_groupItemPeers); _groupItemPeers.Clear(); if (this.OwningDataGrid.DataConnection.CollectionView != null && this.OwningDataGrid.DataConnection.CollectionView.CanGroup && this.OwningDataGrid.DataConnection.CollectionView.Groups != null && this.OwningDataGrid.DataConnection.CollectionView.Groups.Count > 0) { List <object> groups = new List <object>(this.OwningDataGrid.DataConnection.CollectionView.Groups); while (groups.Count > 0) { CollectionViewGroup cvGroup = groups[0] as CollectionViewGroup; groups.RemoveAt(0); if (cvGroup != null) { // Add the group's peer to the collection DataGridGroupItemAutomationPeer peer = null; if (oldChildren.ContainsKey(cvGroup)) { peer = oldChildren[cvGroup] as DataGridGroupItemAutomationPeer; } else { peer = new DataGridGroupItemAutomationPeer(cvGroup, this.OwningDataGrid); } if (peer != null) { DataGridRowGroupHeaderAutomationPeer rghPeer = peer.OwningRowGroupHeaderPeer; if (rghPeer != null) { rghPeer.EventsSource = peer; } } // This guards against the addition of duplicate items if (!_groupItemPeers.ContainsKey(cvGroup)) { _groupItemPeers.Add(cvGroup, peer); } // Look for any sub groups if (!cvGroup.IsBottomLevel) { int position = 0; foreach (object subGroup in cvGroup.Items) { groups.Insert(position, subGroup); position++; } } } } } }
public void DataGridGroupItem_ISelectionProvider() { PagedCollectionView customers = CreateGroupedCustomerCollectionView(); DataGrid dataGrid = new DataGrid(); Assert.IsNotNull(dataGrid); isLoaded = false; dataGrid.Width = 350; dataGrid.Height = 250; dataGrid.Loaded += new RoutedEventHandler(dataGrid_Loaded); dataGrid.AutoGenerateColumns = true; dataGrid.ItemsSource = customers; TestPanel.Children.Add(dataGrid); EnqueueConditional(delegate { return isLoaded; }); this.EnqueueYieldThread(); AutomationPeer peer; ISelectionProvider selector = null; TestPeer testPeer = new TestPeer(dataGrid); EnqueueCallback(delegate { CollectionViewGroup group = customers.Groups[1] as CollectionViewGroup; Assert.IsNotNull(group, "PagedCollectionView did not return CollectionViewGroup"); peer = new DataGridGroupItemAutomationPeer(group, dataGrid); Assert.IsNotNull(peer); selector = peer.GetPattern(PatternInterface.Selection) as ISelectionProvider; Assert.IsNotNull(selector); Assert.AreEqual(0, selector.GetSelection().Length, "There should not be any selected items within this group"); // Select an item within group 1 peer = new DataGridItemAutomationPeer(customers[3], dataGrid); Assert.IsNotNull(peer); ISelectionItemProvider selectionItem = peer.GetPattern(PatternInterface.SelectionItem) as ISelectionItemProvider; Assert.IsNotNull(selectionItem); selectionItem.AddToSelection(); }); this.EnqueueYieldThread(); EnqueueCallback(delegate { Assert.IsNotNull(selector); Assert.AreEqual(1, selector.GetSelection().Length, "There should be a single selected item within this group"); peer = testPeer.GetPeerFromProvider(selector.GetSelection()[0]); Assert.AreEqual(typeof(DataGridRow).Name, peer.GetClassName(), "GetSelection did not return DataGridRow"); }); this.EnqueueYieldThread(); EnqueueTestComplete(); }
public void DataGridGroupItem_IScrollItemProvider() { PagedCollectionView customers = CreateGroupedCustomerCollectionView(); DataGrid dataGrid = new DataGrid(); Assert.IsNotNull(dataGrid); isLoaded = false; dataGrid.Width = 350; dataGrid.Height = 250; dataGrid.Loaded += new RoutedEventHandler(dataGrid_Loaded); dataGrid.AutoGenerateColumns = true; dataGrid.ItemsSource = customers; TestPanel.Children.Add(dataGrid); EnqueueConditional(delegate { return isLoaded; }); this.EnqueueYieldThread(); AutomationPeer peer; IScrollItemProvider scrollItem; CollectionViewGroup group = null; int index = customers.Groups.Count; for (int i = 0; i < customers.Groups.Count; i++) { EnqueueCallback(delegate { index--; group = customers.Groups[index] as CollectionViewGroup; Assert.IsNotNull(group, "PagedCollectionView did not return CollectionViewGroup"); peer = new DataGridGroupItemAutomationPeer(group, dataGrid); Assert.IsNotNull(peer); scrollItem = peer.GetPattern(PatternInterface.ScrollItem) as IScrollItemProvider; Assert.IsNotNull(scrollItem); scrollItem.ScrollIntoView(); }); this.EnqueueYieldThread(); EnqueueCallback(delegate { int groupSlot = -1; foreach (int slot in dataGrid.RowGroupHeadersTable.GetIndexes()) { DataGridRowGroupInfo info = dataGrid.RowGroupHeadersTable.GetValueAt(slot); if (info.CollectionViewGroup == group) { groupSlot = slot; break; } } Assert.AreNotEqual(-1, groupSlot, "CollectionViewGroup was not found in DataGrid"); Assert.IsTrue(dataGrid.IsSlotVisible(groupSlot), "GroupItem not scrolled into view"); }); } EnqueueTestComplete(); }
public void DataGridGroupItem_IGridProvider() { PagedCollectionView customers = CreateGroupedCustomerCollectionView(); DataGrid dataGrid = new DataGrid(); Assert.IsNotNull(dataGrid); isLoaded = false; dataGrid.Width = 350; dataGrid.Height = 250; dataGrid.Loaded += new RoutedEventHandler(dataGrid_Loaded); dataGrid.AutoGenerateColumns = true; dataGrid.ItemsSource = customers; TestPeer testPeer = new TestPeer(dataGrid); Assert.IsNotNull(testPeer); TestPanel.Children.Add(dataGrid); EnqueueConditional(delegate { return isLoaded; }); this.EnqueueYieldThread(); IGridProvider gridProvider = null; IRawElementProviderSimple item = null; EnqueueCallback(delegate { CollectionViewGroup group = customers.Groups[1] as CollectionViewGroup; Assert.IsNotNull(group, "PagedCollectionView did not return CollectionViewGroup"); AutomationPeer peer = new DataGridGroupItemAutomationPeer(group, dataGrid); Assert.IsNotNull(peer); gridProvider = peer.GetPattern(PatternInterface.Grid) as IGridProvider; Assert.IsNotNull(gridProvider); Assert.AreEqual(7, gridProvider.RowCount, "Incorrect RowCount value"); Assert.AreEqual(dataGrid.Columns.Count, gridProvider.ColumnCount, "Incorrect ColumnCount value"); item = gridProvider.GetItem(5, 2); Assert.IsNotNull(item, "GetItem returned null for valid cell"); AutomationPeer itemPeer = testPeer.GetPeerFromProvider(item); Assert.AreEqual(typeof(DataGridCell).Name, itemPeer.GetClassName(), "GetItem did not return DataGridCell"); item = gridProvider.GetItem(100, 100); Assert.IsNull(item, "GetItem returned object for invalid cell"); }); this.EnqueueYieldThread(); this.EnqueueCallback(delegate { // Collapse the group and check that GetItem still works dataGrid.CollapseRowGroup(customers.Groups[1] as CollectionViewGroup, true); }); this.EnqueueYieldThread(); this.EnqueueCallback(delegate { Assert.IsNotNull(gridProvider); item = gridProvider.GetItem(5, 2); Assert.IsNotNull(item, "GetItem returned null for valid cell"); AutomationPeer itemPeer = testPeer.GetPeerFromProvider(item); Assert.AreEqual(typeof(DataGridCell).Name, itemPeer.GetClassName(), "GetItem did not return DataGridCell"); }); EnqueueTestComplete(); }
public void DataGridGroupItem_IExpandCollapseProvider() { PagedCollectionView customers = CreateGroupedCustomerCollectionView(); DataGrid dataGrid = new DataGrid(); Assert.IsNotNull(dataGrid); isLoaded = false; dataGrid.Width = 350; dataGrid.Height = 250; dataGrid.Loaded += new RoutedEventHandler(dataGrid_Loaded); dataGrid.AutoGenerateColumns = true; dataGrid.ItemsSource = customers; CollectionViewGroup group = null; IExpandCollapseProvider expandCollapseProvider = null; TestPeer testPeer = new TestPeer(dataGrid); Assert.IsNotNull(testPeer); TestPanel.Children.Add(dataGrid); EnqueueConditional(delegate { return isLoaded; }); this.EnqueueYieldThread(); EnqueueCallback(delegate { group = customers.Groups[1] as CollectionViewGroup; Assert.IsNotNull(group, "PagedCollectionView did not return CollectionViewGroup"); AutomationPeer peer = new DataGridGroupItemAutomationPeer(group, dataGrid); Assert.IsNotNull(peer); expandCollapseProvider = peer.GetPattern(PatternInterface.ExpandCollapse) as IExpandCollapseProvider; Assert.IsNotNull(expandCollapseProvider); Assert.AreEqual(Visibility.Visible, dataGrid.RowGroupInfoFromCollectionViewGroup(group).Visibility, "Group should be expanded"); Assert.AreEqual(ExpandCollapseState.Expanded, expandCollapseProvider.ExpandCollapseState, "Group should be expanded"); expandCollapseProvider.Collapse(); }); this.EnqueueYieldThread(); EnqueueCallback(delegate { Assert.IsNotNull(expandCollapseProvider); Assert.AreEqual(Visibility.Collapsed, dataGrid.RowGroupInfoFromCollectionViewGroup(group).Visibility, "Group should be collapsed"); Assert.AreEqual(ExpandCollapseState.Collapsed, expandCollapseProvider.ExpandCollapseState, "Group should be collapsed"); expandCollapseProvider.Expand(); }); this.EnqueueYieldThread(); EnqueueCallback(delegate { Assert.IsNotNull(expandCollapseProvider); Assert.AreEqual(Visibility.Visible, dataGrid.RowGroupInfoFromCollectionViewGroup(group).Visibility, "Group should be expanded"); Assert.AreEqual(ExpandCollapseState.Expanded, expandCollapseProvider.ExpandCollapseState, "Group should be expanded"); }); EnqueueTestComplete(); }
public void DataGridGroupItem_AutomationPeer() { PagedCollectionView customers = CreateGroupedCustomerCollectionView(); DataGrid dataGrid = new DataGrid(); Assert.IsNotNull(dataGrid); isLoaded = false; dataGrid.Width = 350; dataGrid.Height = 250; dataGrid.Loaded += new RoutedEventHandler(dataGrid_Loaded); dataGrid.AutoGenerateColumns = true; dataGrid.ItemsSource = customers; TestPanel.Children.Add(dataGrid); EnqueueConditional(delegate { return isLoaded; }); this.EnqueueYieldThread(); EnqueueCallback(delegate { CollectionViewGroup group = customers.Groups[0] as CollectionViewGroup; Assert.IsNotNull(group, "PagedCollectionView did not return CollectionViewGroup"); AutomationPeer peer = new DataGridGroupItemAutomationPeer(group, dataGrid); Assert.IsNotNull(peer); Assert.AreEqual(AutomationControlType.Group, peer.GetAutomationControlType(), "Incorrect ControlType value"); Assert.AreEqual(true, peer.IsContentElement(), "Incorrect IsContentElement value"); Assert.AreEqual(true, peer.IsControlElement(), "Incorrect IsControlElement value"); Assert.AreEqual(false, peer.IsKeyboardFocusable(), "Incorrect IsKeyBoardFocusable value"); Assert.AreEqual(group.Name, peer.GetName(), "Incorrect Name value"); Assert.IsNotNull(peer.GetChildren(), "GetChildren should never return null"); }); EnqueueTestComplete(); }
internal void PopulateGroupItemPeers() { Dictionary<object, DataGridGroupItemAutomationPeer> oldChildren = new Dictionary<object, DataGridGroupItemAutomationPeer>(_groupItemPeers); _groupItemPeers.Clear(); if (this.OwningDataGrid.DataConnection.CollectionView != null && this.OwningDataGrid.DataConnection.CollectionView.CanGroup && this.OwningDataGrid.DataConnection.CollectionView.Groups != null && this.OwningDataGrid.DataConnection.CollectionView.Groups.Count > 0) { List<object> groups = new List<object>(this.OwningDataGrid.DataConnection.CollectionView.Groups); while (groups.Count > 0) { CollectionViewGroup cvGroup = groups[0] as CollectionViewGroup; groups.RemoveAt(0); if (cvGroup != null) { // Add the group's peer to the collection DataGridGroupItemAutomationPeer peer = null; if (oldChildren.ContainsKey(cvGroup)) { peer = oldChildren[cvGroup] as DataGridGroupItemAutomationPeer; } else { peer = new DataGridGroupItemAutomationPeer(cvGroup, this.OwningDataGrid); } if (peer != null) { DataGridRowGroupHeaderAutomationPeer rghPeer = peer.OwningRowGroupHeaderPeer; if (rghPeer != null) { rghPeer.EventsSource = peer; } } // This guards against the addition of duplicate items if (!_groupItemPeers.ContainsKey(cvGroup)) { _groupItemPeers.Add(cvGroup, peer); } // Look for any sub groups if (!cvGroup.IsBottomLevel) { int position = 0; foreach (object subGroup in cvGroup.Items) { groups.Insert(position, subGroup); position++; } } } } } }
internal DataGridGroupItemAutomationPeer GetOrCreateGroupItemPeer(object group) { DataGridGroupItemAutomationPeer peer = null; if (group != null) { if (_groupItemPeers.ContainsKey(group)) { peer = _groupItemPeers[group]; } else { peer = new DataGridGroupItemAutomationPeer(group as CollectionViewGroup, this.OwningDataGrid); _groupItemPeers.Add(group, peer); } DataGridRowGroupHeaderAutomationPeer rghPeer = peer.OwningRowGroupHeaderPeer; if (rghPeer != null) { rghPeer.EventsSource = peer; } } return peer; }