mirror of
https://github.com/ChrisTitusTech/winutil.git
synced 2026-03-12 17:51:46 +08:00
78 lines
3.3 KiB
PowerShell
78 lines
3.3 KiB
PowerShell
function Reset-WPFCheckBoxes {
|
|
<#
|
|
|
|
.SYNOPSIS
|
|
Set winutil checkboxs to match $sync.selected values.
|
|
Should only need to be run if $sync.selected updated outside of UI (i.e. presets or import)
|
|
|
|
.PARAMETER doToggles
|
|
Whether or not to set UI toggles. WARNING: they will trigger if altered
|
|
|
|
.PARAMETER checkboxfilterpattern
|
|
The Pattern to use when filtering through CheckBoxes, defaults to "**"
|
|
Used to make reset blazingly fast.
|
|
#>
|
|
|
|
param (
|
|
[Parameter(position=0)]
|
|
[bool]$doToggles = $false,
|
|
|
|
[Parameter(position=1)]
|
|
[string]$checkboxfilterpattern = "**"
|
|
)
|
|
|
|
$CheckBoxesToCheck = $sync.selectedApps + $sync.selectedTweaks + $sync.selectedFeatures
|
|
$CheckBoxes = ($sync.GetEnumerator()).where{ $_.Value -is [System.Windows.Controls.CheckBox] -and $_.Name -notlike "WPFToggle*" -and $_.Name -like "$checkboxfilterpattern"}
|
|
Write-Debug "Getting checkboxes to set, number of checkboxes: $($CheckBoxes.Count)"
|
|
|
|
if ($CheckBoxesToCheck -ne "") {
|
|
$debugMsg = "CheckBoxes to Check are: "
|
|
$CheckBoxesToCheck | ForEach-Object { $debugMsg += "$_, " }
|
|
$debugMsg = $debugMsg -replace (',\s*$', '')
|
|
Write-Debug "$debugMsg"
|
|
}
|
|
|
|
foreach ($CheckBox in $CheckBoxes) {
|
|
$checkboxName = $CheckBox.Key
|
|
if (-not $CheckBoxesToCheck) {
|
|
$sync.$checkBoxName.IsChecked = $false
|
|
continue
|
|
}
|
|
|
|
# Check if the checkbox name exists in the flattened JSON hashtable
|
|
if ($CheckBoxesToCheck -contains $checkboxName) {
|
|
# If it exists, set IsChecked to true
|
|
$sync.$checkboxName.IsChecked = $true
|
|
Write-Debug "$checkboxName is checked"
|
|
} else {
|
|
# If it doesn't exist, set IsChecked to false
|
|
$sync.$checkboxName.IsChecked = $false
|
|
Write-Debug "$checkboxName is not checked"
|
|
}
|
|
}
|
|
|
|
# Update Installs tab UI values
|
|
$count = $sync.SelectedApps.Count
|
|
$sync.WPFselectedAppsButton.Content = "Selected Apps: $count"
|
|
# On every change, remove all entries inside the Popup Menu. This is done, so we can keep the alphabetical order even if elements are selected in a random way
|
|
$sync.selectedAppsstackPanel.Children.Clear()
|
|
$sync.selectedApps | Foreach-Object { Add-SelectedAppsMenuItem -name $($sync.configs.applicationsHashtable.$_.Content) -key $_ }
|
|
|
|
if($doToggles) {
|
|
# Restore toggle switch states from imported config.
|
|
# Only act on toggles that are explicitly listed in the import — toggles absent
|
|
# from the export file were not part of the saved config and should keep whatever
|
|
# state the live system already has (set during UI initialisation via Get-WinUtilToggleStatus).
|
|
$importedToggles = $sync.selectedToggles
|
|
$allToggles = $sync.GetEnumerator() | Where-Object { $_.Key -like "WPFToggle*" -and $_.Value -is [System.Windows.Controls.CheckBox] }
|
|
foreach ($toggle in $allToggles) {
|
|
if ($importedToggles -contains $toggle.Key) {
|
|
$sync[$toggle.Key].IsChecked = $true
|
|
Write-Debug "Restoring toggle: $($toggle.Key) = checked"
|
|
}
|
|
# Toggles not present in the import are intentionally left untouched;
|
|
# their current UI state already reflects the real system state.
|
|
}
|
|
}
|
|
}
|