private void treeUiPath_SelectedItemChanged()

in Tools/UIRecorder/UIRecorder/MainWindow.xaml.cs [606:687]


        private void treeUiPath_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        {
            if (SelectChangedSource == UiSelectChangedSource.TreeViewItemSelected)
            {
                return;
            }

            var selectedItem = treeUiPath.SelectedItem as UiTreeNode;
            if (selectedItem == null)
            {
                return;
            }

            if (SelectChangedSource != UiSelectChangedSource.ComboBoxSelected)
                SelectChangedSource = UiSelectChangedSource.TreeViewItemSelected;

            RecordedUiTask leafUiTask = selectedItem.UiTask;

            if (leafUiTask == null)
            {
                if (treeUiPath.Items != null && treeUiPath.Items.Count > 0)
                {
                    var x = (TreeViewItem)treeUiPath.ItemContainerGenerator.ContainerFromItem(treeUiPath.Items[0]);
                    if (x != null)
                    {
                        TreeViewItem tvi = UiTreeNode2TreeViewItem(x, UiTreeNode.s_uiTreeNodes.First(), selectedItem);
                        if (tvi != null)
                        {
                            // sync xpath with last selected tree view leaf if a parent node is selected 
                            // and the selected parent has more than 1 expanded leaf children
                            leafUiTask = GetExpandedLeafNode(tvi, selectedItem, selectedTreeViewItem);
                            {
                                leafUiTask = GetExpandedLeafNode(tvi, selectedItem, null);
                                selectedTreeViewItem = leafUiTask;
                            }
                        }
                    }
                }
            }

            if (leafUiTask == null)
            {
                if (SelectChangedSource != UiSelectChangedSource.ComboBoxSelected)
                    SelectChangedSource = UiSelectChangedSource.SelectChangeFinished;

                return;
            }
            else
            {
                selectedTreeViewItem = leafUiTask;
            }

            if (leafUiTask != comboBoxRecordedUi.SelectedItem)
            {
                comboBoxRecordedUi.SelectedItem = leafUiTask;
            }

            int childCount = selectedItem.Items.Count;
            if (childCount > 0)
            {
                treeUiPath.ContextMenu = treeUiPath.Resources["UiNode"] as System.Windows.Controls.ContextMenu;
            }
            else
            {
                treeUiPath.ContextMenu = treeUiPath.Resources["LeafNode"] as System.Windows.Controls.ContextMenu;
            }

            int nNodeCount = 1;
            var pParent = selectedItem.Parent;
            while (pParent != null)
            {
                nNodeCount++;
                pParent = pParent.Parent;
            }

            HighlightPath(nNodeCount, true);

            if (SelectChangedSource != UiSelectChangedSource.ComboBoxSelected)
                SelectChangedSource = UiSelectChangedSource.SelectChangeFinished;

            AppInsights.LogEvent("treeUiPath_SelectedItemChanged");
        }