ADLookups/_ADLookupsUIEvents.ps1

function _ADLookupsUIEvents {
    #region General UI
    $ADLookups.Add_SourceInitialized({
            _OnADLookupsSourceInitialized
        })

    $ADLookups.Add_Loaded({
            _OnADLookupsLoaded
        })

    $ADLookups.Add_Activated({
            $HomeWindow_LoadingLabel.Visibility = 'Hidden'
        })

    $ADLookups.Add_Closing({
            if ($HomeWindow) {
                $_.Cancel = $true
                $ADLookups.hide()
            }
            else {
                $ADLookups.close()
            }
        })
    $ADLookups_AboutMenuItem.Add_Click({
            _ShowAbout
        })

    $ADLookups_ExitMenuItem.Add_Click({
            # exit
            if ($HomeWindow) {
                $ADLookups.hide()
            }
            else {
                $ADLookups.close()
            }
        })

    $ADLookups_UpdateCacheMenuItem.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            _UpdateObjectCache -Force
            $ADLookups.Cursor = $null
        })

    $ADLookups_UpdateSCCMDevicesMenuItem.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            # This should use an API query instead of invoke-command
            _UpdateSCCMDevices -ForceLookup
            $ADLookups.Cursor = $null
        })
    #endregion

    #region Find Tab
    $ADLookups_FindTabQueryTextTextBox.Add_TextChanged({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            _FindTabLookup
            $ADLookups.Cursor = $null
        })

    $ADLookups_FindTabQueryTextTextBox.Add_KeyDown({
            if ($_.Key -eq 'Enter') {
                $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
                _FindTabLookup
                $ADLookups.Cursor = $null
            }
        })

    $ADLookups_FindTabCopyContextMenuItem.Add_Click({
            $selectedCell = $ADLookups_FindTabDataGrid.SelectedCells[0]
            $value = $selectedCell.Item.($selectedCell.Column.Header)
            Set-Clipboard -Value $value
        })
    #endregion

    #region General User Tab
    $ADLookups_UserTabLookupButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            _GeneralUserTabLookup
            $ADLookups.Cursor = $null
        })

    $ADLookups_UserTabSamAccountNameComboBox.Add_KeyDown({
            if ($_.Key -eq 'Enter') {
                $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
                _GeneralUserTabLookup
                $ADLookups.Cursor = $null
            }
        })

    $ADLookups_UserTabCollectionButton.Add_Click({

        })
    #endregion

    #region User's Groups Tab
    $ADLookups_UsersGroupsTabLookupButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            _UserGroupsTabLookup
            $ADLookups.Cursor = $null
        })

    $ADLookups_UsersGroupsTabSamAccountNameComboBox.Add_KeyDown({
            if ($_.Key -eq 'Enter') {
                $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
                _UserGroupsTabLookup
                $ADLookups.Cursor = $null
            }
        })

    $ADLookups_UsersGroupTabCopyContextMenuItem.Add_Click({
            $selectedCell = $ADLookups_UsersGroupTabDataGrid.SelectedCells[0]
            $value = $selectedCell.Item.($selectedCell.Column.Header)
            Set-Clipboard -Value $value
        })
    #endregion

    #region User's Exchange Tab
    $ADLookups_ExchangeTabLookupButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            _UsersExchangeTabLookup
            $ADLookups.Cursor = $null
        })

    $ADLookups_ExchangeTabSamAccountNameComboBox.Add_KeyDown({
            if ($_.Key -eq 'Enter') {
                $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
                _UsersExchangeTabLookup
                $ADLookups.Cursor = $null
            }
        })
    #endregion

    #region Group Tab
    $ADLookups_GroupTabLookupButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            _GroupsTabLookup
            $ADLookups.Cursor = $null
        })

    $ADLookups_GroupTabSamAccountNameComboBox.Add_KeyDown({
            if ($_.Key -eq 'Enter') {
                $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
                _GroupsTabLookup
                $ADLookups.Cursor = $null
            }
        })

    $ADLookups_GroupTabCopyContextMenuItem.Add_Click({
            $selectedCell = $ADLookups_GroupTabMembersDataGrid.SelectedCells[0]
            $value = $selectedCell.Item.($selectedCell.Column.Header)
            Set-Clipboard -Value $value
        })

    $ADLookups_GroupTabExportMembersMenuItem.Add_Click({
            $SaveDialog = New-Object System.Windows.Forms.SaveFileDialog
            $SaveDialog.DefaultExt = '.csv'
            $SaveDialog.InitialDirectory = $ADLookups_OptionsTabObjectCacheTextBox.Text
            $SaveDialog.Filter = 'Comma Delimited | *.csv'
            $SaveDialog.Title = 'Export Group Listing'
            $Output = $SaveDialog.ShowDialog()

            if ($Output -eq 'OK') {
                $PossibleExport | Export-Csv -Path $SaveDialog.FileName -NoTypeInformation
            }
        })

    $ADLookups_GroupTabMembersOfRadioButton.Add_Checked({
            $ADLookups_GroupTabMembersRecursiveCheckBox.IsChecked = $false
            $ADLookups_GroupTabMembersRecursiveCheckBox.IsEnabled = $false
            $Members = @()
            $Members += [pscustomobject]@{
                Refresh = 'Click Lookup to load membership.'
            }
            $ADLookups_GroupTabMembersDataGrid.ItemsSource = $Members
        })

    $ADLookups_GroupTabMembersRadioButton.Add_Checked({
            $ADLookups_GroupTabMembersRecursiveCheckBox.IsEnabled = $true
            $Members = @()
            $Members += [pscustomobject]@{
                Refresh = 'Click Lookup to load membership.'
            }
            $ADLookups_GroupTabMembersDataGrid.ItemsSource = $Members
        })
    #endregion

    #region Computer Tab
    $ADLookups_ComputerTabLookupButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            _ComputerTabLookup
            $ADLookups.Cursor = $null
        })

    $ADLookups_ComputerTabHostNameComboBox.Add_KeyDown({
            if ($_.Key -eq 'Enter') {
                $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
                _ComputerTabLookup
                $ADLookups.Cursor = $null
            }
        })

    $ADLookups_ComputerTabRSOPButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            $RSOP_HostnameComboBox.SelectedItem = $ADLookups_ComputerTabHostNameComboBox.Text
            $RSOP.ShowDialog()
            $ADLookups.Cursor = $null
        })

    $ADLookups_ComputerTabQueryLiveButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            if ($ADLookups_ComputerTabHostNameComboBox.Text) {
                _ComputerTabQuery -Identity $ADLookups_ComputerTabHostNameComboBox.Text
            }
            else {
                $MessageSplat = @{
                    MessageText  = 'Please provide a computer hostname'
                    MessageIcon  = 'Hand'
                    ButtonType   = 'OK'
                    MessageTitle = 'Error'
                }
                _ShowMessageBox @MessageSplat
            }
            $ADLookups.Cursor = $null
        })

    $ADLookups_ComputerTabShowApplicationsButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            if ($ADLookups_ComputerTabHostNameComboBox.Text) {
                _GetInstalledSoftware -Identity $ADLookups_ComputerTabHostNameComboBox.Text | Sort-Object Name | Out-GridView -Title 'Installed Software'
            }
            else {
                $MessageSplat = @{
                    MessageText  = 'Please provide a computer hostname'
                    MessageIcon  = 'Hand'
                    ButtonType   = 'OK'
                    MessageTitle = 'Error'
                }
                _ShowMessageBox @MessageSplat
            }
            $ADLookups.Cursor = $null
        })

    $ADLookups_ComputerTabShowInstalledUpdatesButton.Add_Click({
            $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            if ($ADLookups_ComputerTabHostNameComboBox.Text) {
                _GetInstalledUpdates -Identity $ADLookups_ComputerTabHostNameComboBox.Text | Select-Object Title, Date, Description, Operation | Sort-Object Date -Descending | Out-GridView -Title 'Installed Updates'
            }
            else {
                $MessageSplat = @{
                    MessageText  = 'Please provide a computer hostname'
                    MessageIcon  = 'Hand'
                    ButtonType   = 'OK'
                    MessageTitle = 'Error'
                }
                _ShowMessageBox @MessageSplat
            }
            $ADLookups.Cursor = $null
        })

    $ADLookups_ComputerTabCollectionButton.Add_Click({
        $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
            $Collections = @()
            try {
                $CollectionIDs = _GetSCCMInformationQuerySTT -Route wmi -Connector SMS_FullCollectionMembership -FilterField Name -FilterString $ADLookups_ComputerTabHostNameComboBox.Text
                foreach ($ID in $CollectionIDs) {
                    $Collections += _GetSCCMInformationQuerySTT -Route wmi -Connector sms_collection -FilterField CollectionID -FilterString $ID | Select-Object CollectionID, Name, LimitToCollectionName
                }
            }
            catch {
                $Collections += [pscustomobject]@{
                    Error = 'Error getting collections'
                }
            }
            $ADLookups_ComputerTabCollectionMembershipDataGrid.ItemsSource = $Collections
            $ADLookups.Cursor = $null
        })
    #endregion

    #region Options Tab
    $ADLookups_OptionsTabSelectFolderButton.Add_Click({
            $FolderBrowserDialog = New-Object System.Windows.Forms.FolderBrowserDialog
            $FolderBrowserDialog.RootFolder = 'MyComputer'
            $FolderBrowserDialog.Description = 'Select default storage location'
            $Output = $FolderBrowserDialog.ShowDialog()

            if ($Output -eq 'OK') {
                $ADLookups_OptionsTabObjectCacheTextBox.Text = $FolderBrowserDialog.SelectedPath
            }
        })
    $ADLookups_OptionsTabSaveSettingsButton.Add_Click({
            _SaveSettings -Path "$env:APPDATA\LoganShell\"
        })

    $ADLookups_OptionsTabClearDataButton.Add_Click({
            $PathToClean = $ADLookups_OptionsTabObjectCacheTextBox.Text

            $MessageOutput = _ShowMessageBox -MessageText "Are you sure you want to delete all items in $PathToClean" -MessageIcon Question -ButtonType YesNo -MessageTitle 'Delete all stored files'
            switch ($MessageOutput) {
                'Yes' {
                    $ADLookups.Cursor = [System.Windows.Input.Cursors]::Wait
                    # This excludes the settings file in case the location is still appdata.
                    Get-ChildItem -Path $PathToClean -Recurse -Exclude 'Settings.json' | Remove-Item -Force -Recurse
                    $ADLookups_OptionsTabOutputLabel.Content = 'Items deleted.'
                    $ADLookups.Cursor = $null
                }
                'No' {
                    # Go on about your day
                }
            }
        })
    #endregion
}