mirror of
https://github.com/ChrisTitusTech/winutil.git
synced 2025-05-09 15:52:08 +00:00
105 lines
4.8 KiB
PowerShell
105 lines
4.8 KiB
PowerShell
function Find-TweaksByNameOrDescription {
|
|
<#
|
|
.SYNOPSIS
|
|
Searches through the Tweaks on the Tweaks Tab and hides all entries that do not match the search string
|
|
|
|
.PARAMETER SearchString
|
|
The string to be searched for
|
|
#>
|
|
param(
|
|
[Parameter(Mandatory=$false)]
|
|
[string]$SearchString = ""
|
|
)
|
|
|
|
# Reset the visibility if the search string is empty or the search is cleared
|
|
if ([string]::IsNullOrWhiteSpace($SearchString)) {
|
|
# Show all categories
|
|
$tweakspanel = $sync.Form.FindName("tweakspanel")
|
|
$tweakspanel.Children | ForEach-Object {
|
|
$_.Visibility = [Windows.Visibility]::Visible
|
|
|
|
# Foreach category section, show all items
|
|
if ($_ -is [Windows.Controls.Border]) {
|
|
$_.Visibility = [Windows.Visibility]::Visible
|
|
|
|
# Find ItemsControl
|
|
$dockPanel = $_.Child
|
|
if ($dockPanel -is [Windows.Controls.DockPanel]) {
|
|
$itemsControl = $dockPanel.Children | Where-Object { $_ -is [Windows.Controls.ItemsControl] }
|
|
if ($itemsControl) {
|
|
# Show items in the category
|
|
foreach ($item in $itemsControl.Items) {
|
|
if ($item -is [Windows.Controls.Label]) {
|
|
$item.Visibility = [Windows.Visibility]::Visible
|
|
} elseif ($item -is [Windows.Controls.DockPanel] -or
|
|
$item -is [Windows.Controls.StackPanel]) {
|
|
$item.Visibility = [Windows.Visibility]::Visible
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
# Search for matching tweaks when search string is not null
|
|
$tweakspanel = $sync.Form.FindName("tweakspanel")
|
|
$matchFound = $false
|
|
|
|
$tweakspanel.Children | ForEach-Object {
|
|
$categoryBorder = $_
|
|
$categoryVisible = $false
|
|
|
|
if ($_ -is [Windows.Controls.Border]) {
|
|
# Find the ItemsControl
|
|
$dockPanel = $_.Child
|
|
if ($dockPanel -is [Windows.Controls.DockPanel]) {
|
|
$itemsControl = $dockPanel.Children | Where-Object { $_ -is [Windows.Controls.ItemsControl] }
|
|
if ($itemsControl) {
|
|
$categoryLabel = $null
|
|
|
|
# Process all items in the ItemsControl
|
|
for ($i = 0; $i -lt $itemsControl.Items.Count; $i++) {
|
|
$item = $itemsControl.Items[$i]
|
|
|
|
if ($item -is [Windows.Controls.Label]) {
|
|
$categoryLabel = $item
|
|
$item.Visibility = [Windows.Visibility]::Collapsed
|
|
} elseif ($item -is [Windows.Controls.DockPanel]) {
|
|
$checkbox = $item.Children | Where-Object { $_ -is [Windows.Controls.CheckBox] } | Select-Object -First 1
|
|
$label = $item.Children | Where-Object { $_ -is [Windows.Controls.Label] } | Select-Object -First 1
|
|
|
|
if ($label -and ($label.Content -like "*$SearchString*" -or $label.ToolTip -like "*$SearchString*")) {
|
|
$item.Visibility = [Windows.Visibility]::Visible
|
|
if ($categoryLabel) { $categoryLabel.Visibility = [Windows.Visibility]::Visible }
|
|
$categoryVisible = $true
|
|
} else {
|
|
$item.Visibility = [Windows.Visibility]::Collapsed
|
|
}
|
|
} elseif ($item -is [Windows.Controls.StackPanel]) {
|
|
# StackPanel which contain checkboxes or other elements
|
|
$checkbox = $item.Children | Where-Object { $_ -is [Windows.Controls.CheckBox] } | Select-Object -First 1
|
|
|
|
if ($checkbox -and ($checkbox.Content -like "*$SearchString*" -or $checkbox.ToolTip -like "*$SearchString*")) {
|
|
$item.Visibility = [Windows.Visibility]::Visible
|
|
if ($categoryLabel) { $categoryLabel.Visibility = [Windows.Visibility]::Visible }
|
|
$categoryVisible = $true
|
|
} else {
|
|
$item.Visibility = [Windows.Visibility]::Collapsed
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
# Set the visibility based on if any item matched
|
|
$categoryBorder.Visibility = if ($categoryVisible) { [Windows.Visibility]::Visible } else { [Windows.Visibility]::Collapsed }
|
|
|
|
if ($categoryVisible) {
|
|
$matchFound = $true
|
|
}
|
|
}
|
|
}
|
|
}
|