public SearchWindow()

in Accessibility/FindText/FindTextClient/SearchWindow.cs [164:522]


        public SearchWindow()
        {
            // Specify the target applications.
            _wpfTarget =
                Application.StartupPath + "\\FindText.exe";
            _w32Target = "WordPad.exe";

            // Initialize search direction. 
            // Search direction buttons are enabled or disabled based on this value.
            _searchBackward = false;

            // Layout the client controls.
            try
            {
                // Specs for Window.
                double clientHeight = 600;
                double clientWidth = 550;

                // Specs for TextBox.
                var maxSearchLines = 1;
                var maxSearchLength = 25;

                // Specs for Buttons.
                double buttonWidth = 140;

                // Instantiate the client window and set location and size.
                _clientWindow = new Window
                {
                    Height = clientHeight,
                    Width = clientWidth,
                    Left = SystemParameters.WorkArea.Location.X + 50,
                    Top = SystemParameters.WorkArea.Location.Y + 50,
                    Title = "Find Text",
                    WindowStyle = WindowStyle.ToolWindow
                };

                // Create a dock panel to hold all controls.
                _clientDockPanel = new DockPanel
                {
                    Margin = new Thickness(10),
                    LastChildFill = true
                };

                // Add the start target buttons.
                _startWpfTargetButton = new Button
                {
                    Width = buttonWidth,
                    Content = "Start _FlowDocument (WPF)",
                    Tag = TargetApplication.FlowDocument
                };
                _startWpfTargetButton.Click +=
                    StartTargetApplication_Click;
                _startW32TargetButton = new Button
                {
                    Width = buttonWidth,
                    Content = "Start _WordPad (Win32)",
                    Tag = TargetApplication.WordPad
                };
                _startW32TargetButton.Click +=
                    StartTargetApplication_Click;
                DockPanel.SetDock(_startWpfTargetButton, Dock.Top);
                DockPanel.SetDock(_startW32TargetButton, Dock.Top);
                _clientDockPanel.Children.Add(_startWpfTargetButton);
                _clientDockPanel.Children.Add(_startW32TargetButton);

                // Add the find text control button.
                _findEditButton = new Button
                {
                    Width = buttonWidth,
                    Content = "_Find text provider"
                };
                _findEditButton.Click +=
                    FindTextProvider_Click;
                _findEditButton.Visibility = Visibility.Collapsed;
                DockPanel.SetDock(_findEditButton, Dock.Top);
                _clientDockPanel.Children.Add(_findEditButton);

                // Add the target status label.
                _targetResult = new Label
                {
                    Content = "",
                    BorderThickness = new Thickness(1),
                    BorderBrush = Brushes.Black,
                    HorizontalAlignment = HorizontalAlignment.Center,
                    Margin = new Thickness(0, 0, 0, 10),
                    Visibility = Visibility.Hidden
                };
                DockPanel.SetDock(_targetResult, Dock.Top);
                _clientDockPanel.Children.Add(_targetResult);

                // Add the client control layout grid.
                _infoGrid = new Grid
                {
                    HorizontalAlignment = HorizontalAlignment.Center,
                    VerticalAlignment = VerticalAlignment.Top,
                    ShowGridLines = false,
                    Visibility = Visibility.Collapsed,
                    MinWidth = 400
                };
                // Define the columns.
                var colDef1 = new ColumnDefinition();
                var colDef2 = new ColumnDefinition();
                _infoGrid.ColumnDefinitions.Add(colDef1);
                _infoGrid.ColumnDefinitions.Add(colDef2);
                // Define the rows.
                var rowDef1 = new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)};
                var rowDef2 = new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)};
                var rowDef3 = new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)};
                var rowDef4 = new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)};
                var rowDef5 = new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)};
                var rowDef6 = new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)};
                var rowDef7 = new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)};
                var rowDef8 = new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)};
                var rowDef9 = new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)};
                var rowDef10 = new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)};
                var rowDef11 = new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)};
                _infoGrid.RowDefinitions.Add(rowDef1);
                _infoGrid.RowDefinitions.Add(rowDef2);
                _infoGrid.RowDefinitions.Add(rowDef3);
                _infoGrid.RowDefinitions.Add(rowDef4);
                _infoGrid.RowDefinitions.Add(rowDef5);
                _infoGrid.RowDefinitions.Add(rowDef6);
                _infoGrid.RowDefinitions.Add(rowDef7);
                _infoGrid.RowDefinitions.Add(rowDef8);
                _infoGrid.RowDefinitions.Add(rowDef9);
                _infoGrid.RowDefinitions.Add(rowDef10);
                _infoGrid.RowDefinitions.Add(rowDef11);

                // Define the content of the cells.
                // Row 1 - Search string details.
                _searchString = new TextBox
                {
                    Name = "SearchString",
                    MaxLines = maxSearchLines,
                    MaxLength = maxSearchLength,
                    Width = 200
                };
                //searchString.Height = 25;
                _searchString.TextChanged +=
                    SearchString_Change;
                _searchString.IsEnabled = false;
                Grid.SetRow(_searchString, 0);
                Grid.SetColumn(_searchString, 1);
                var searchLabel = new Label
                {
                    Target = _searchString,
                    Content = "_Search for: ",
                    VerticalAlignment = VerticalAlignment.Center
                };
                Grid.SetRow(searchLabel, 0);
                Grid.SetColumn(searchLabel, 0);
                _infoGrid.Children.Add(searchLabel);
                _infoGrid.Children.Add(_searchString);

                // Row 2 - Search direction buttons.
                _searchBackwardButton = new Button
                {
                    Width = buttonWidth,
                    Content = "Search _Backward",
                    Tag = TraversalDirection.Backward
                };
                //searchBackwardButton.Height = buttonHeight;
                _searchBackwardButton.Click +=
                    SearchDirection_Click;
                _searchBackwardButton.Margin = new Thickness(0, 0, 0, 10);
                _searchBackwardButton.IsEnabled = false;
                Grid.SetRow(_searchBackwardButton, 1);
                Grid.SetColumn(_searchBackwardButton, 0);
                _searchForwardButton = new Button
                {
                    Width = buttonWidth,
                    Content = "Search _Forward",
                    Tag = TraversalDirection.Forward
                };
                //searchForwardButton.Height = buttonHeight;
                _searchForwardButton.Click +=
                    SearchDirection_Click;
                _searchForwardButton.Margin = new Thickness(0, 0, 0, 10);
                _searchForwardButton.IsEnabled = false;
                Grid.SetRow(_searchForwardButton, 1);
                Grid.SetColumn(_searchForwardButton, 1);
                _infoGrid.Children.Add(_searchBackwardButton);
                _infoGrid.Children.Add(_searchForwardButton);

                // Row 3 - Target selection.
                _targetSelectionLabel = new Label
                {
                    Target = _targetSelection,
                    Content = "Currently selected:"
                };
                Grid.SetRow(_targetSelectionLabel, 2);
                Grid.SetColumn(_targetSelectionLabel, 0);
                Grid.SetColumnSpan(_targetSelectionLabel, 2);
                _infoGrid.Children.Add(_targetSelectionLabel);
                // Row 4.
                _targetSelection = new TextBox
                {
                    TextWrapping = TextWrapping.Wrap,
                    MaxWidth = 400,
                    Height = 100,
                    VerticalScrollBarVisibility = ScrollBarVisibility.Auto,
                    IsReadOnly = true,
                    Margin = new Thickness(0, 0, 0, 0)
                };
                Grid.SetRow(_targetSelection, 3);
                Grid.SetColumn(_targetSelection, 0);
                Grid.SetColumnSpan(_targetSelection, 2);
                _infoGrid.Children.Add(_targetSelection);

                // Row 5 - Target selection attributes.
                _targetSelectionAttributeLabel = new Label
                {
                    Target = _targetSelection,
                    Content = "Attribute values: "
                };
                Grid.SetRow(_targetSelectionAttributeLabel, 4);
                Grid.SetColumn(_targetSelectionAttributeLabel, 0);
                Grid.SetColumnSpan(_targetSelectionAttributeLabel, 2);
                _infoGrid.Children.Add(_targetSelectionAttributeLabel);
                // Row 6.
                _targetSelectionAttributes = new TextBox
                {
                    TextWrapping = TextWrapping.Wrap,
                    MaxWidth = 400,
                    Height = 100,
                    VerticalScrollBarVisibility = ScrollBarVisibility.Auto,
                    IsReadOnly = true,
                    Margin = new Thickness(0, 0, 0, 10)
                };
                Grid.SetRow(_targetSelectionAttributes, 5);
                Grid.SetColumn(_targetSelectionAttributes, 0);
                Grid.SetColumnSpan(_targetSelectionAttributes, 2);
                _infoGrid.Children.Add(_targetSelectionAttributes);

                // Row 7 - Navigate target details.
                _navigateTarget = new ComboBox {Width = buttonWidth};
                _navigateTarget.Items.Add(TextUnit.Character);
                _navigateTarget.Items.Add(TextUnit.Format);
                _navigateTarget.Items.Add(TextUnit.Word);
                _navigateTarget.Items.Add(TextUnit.Line);
                _navigateTarget.Items.Add(TextUnit.Paragraph);
                _navigateTarget.Items.Add(TextUnit.Page);
                _navigateTarget.SelectedIndex = 0;
                _navigateTarget.SelectionChanged +=
                    NavigationUnit_Change;
                Grid.SetRow(_navigateTarget, 6);
                Grid.SetColumn(_navigateTarget, 1);
                var navigateLabel = new Label
                {
                    Target = _navigateTarget,
                    Content = "_Navigate target by text unit of: ",
                    VerticalAlignment = VerticalAlignment.Center
                };
                Grid.SetRow(navigateLabel, 6);
                Grid.SetColumn(navigateLabel, 0);
                _infoGrid.Children.Add(navigateLabel);
                _infoGrid.Children.Add(_navigateTarget);

                // Row 8 - Navigate target direction buttons.
                var navigateBackwardButton = new Button
                {
                    Width = buttonWidth,
                    Content = "_Backward",
                    Tag = TraversalDirection.Backward
                };
                navigateBackwardButton.Click += Navigate_Click;
                navigateBackwardButton.Margin = new Thickness(0, 0, 0, 10);
                Grid.SetRow(navigateBackwardButton, 7);
                Grid.SetColumn(navigateBackwardButton, 0);
                var navigateForwardButton = new Button
                {
                    Width = buttonWidth,
                    Content = "_Forward",
                    Tag = TraversalDirection.Forward
                };
                navigateForwardButton.Click += Navigate_Click;
                navigateForwardButton.Margin = new Thickness(0, 0, 0, 10);
                Grid.SetRow(navigateForwardButton, 7);
                Grid.SetColumn(navigateForwardButton, 1);
                _infoGrid.Children.Add(navigateBackwardButton);
                _infoGrid.Children.Add(navigateForwardButton);

                // Row 9 - Expand the target selection controls.
                _expandHighlight = new ComboBox {Width = buttonWidth};
                _expandHighlight.Items.Add("");
                _expandHighlight.Items.Add("None");
                _expandHighlight.Items.Add(TextUnit.Character);
                _expandHighlight.Items.Add(TextUnit.Format);
                _expandHighlight.Items.Add(TextUnit.Word);
                _expandHighlight.Items.Add(TextUnit.Line);
                _expandHighlight.Items.Add(TextUnit.Paragraph);
                _expandHighlight.Items.Add(TextUnit.Page);
                _expandHighlight.Items.Add(TextUnit.Document);
                _expandHighlight.SelectedIndex = 0;
                _expandHighlight.SelectionChanged +=
                    ExpandToTextUnit_Change;
                _expandHighlight.Margin = new Thickness(0, 0, 0, 10);
                Grid.SetRow(_expandHighlight, 8);
                Grid.SetColumn(_expandHighlight, 1);
                var expandLabel = new Label
                {
                    Target = _expandHighlight,
                    Content = "_Expand selection to text unit of: ",
                    VerticalAlignment = VerticalAlignment.Center,
                    Margin = new Thickness(0, 0, 0, 10)
                };
                Grid.SetRow(expandLabel, 8);
                Grid.SetColumn(expandLabel, 0);
                _infoGrid.Children.Add(expandLabel);
                _infoGrid.Children.Add(_expandHighlight);

                // Row 10 - target selection details such as child elements 
                //         and enclosing unit.
                _targetSelectionDetails = new TextBox
                {
                    Height = 100,
                    VerticalScrollBarVisibility = ScrollBarVisibility.Auto,
                    IsReadOnly = true
                };
                Grid.SetRow(_targetSelectionDetails, 9);
                Grid.SetColumn(_targetSelectionDetails, 0);
                Grid.SetColumnSpan(_targetSelectionDetails, 2);
                _infoGrid.Children.Add(_targetSelectionDetails);

                // Row 11 - get the child elements and the enclosing unit 
                //         of the target selection.
                var getChildren = new Button
                {
                    Width = buttonWidth,
                    Content = "Get children of selection"
                };
                getChildren.Click += GetChildren_Click;
                Grid.SetRow(getChildren, 10);
                Grid.SetColumn(getChildren, 0);
                var getEnclosingElement = new Button
                {
                    Width = buttonWidth,
                    Content = "Get enclosing element"
                };
                getEnclosingElement.Click += GetEnclosingElement_Click;
                Grid.SetRow(getEnclosingElement, 10);
                Grid.SetColumn(getEnclosingElement, 1);
                _infoGrid.Children.Add(getChildren);
                _infoGrid.Children.Add(getEnclosingElement);

                // Add the grid to the dock panel.
                DockPanel.SetDock(_infoGrid, Dock.Top);
                _clientDockPanel.Children.Add(_infoGrid);

                // Add the dock panel to the window.
                _clientWindow.Content = _clientDockPanel;
                _clientWindow.Show();
            }
                // Do we successfully create the client app?
            catch (InvalidOperationException)
            {
                // TODO: error handling.
            }
        }