diff --git a/config/appnavigation.json b/config/appnavigation.json index dd2f17ac..6e1f792d 100644 --- a/config/appnavigation.json +++ b/config/appnavigation.json @@ -1,16 +1,30 @@ { + "WPFToggleView": { + "Content": ["Expanded View", "Compact View"], + "Category": "____Actions", + "Type": "ToggleButton", + "Order": "1", + "Description": "Toggle between a list and a compact grid like view" + }, + "WPFSelectedFilter": { + "Content": ["Show Selected", "Show All"], + "Category": "____Actions", + "Type": "ToggleButton", + "Order": "2", + "Description": "Toggle between showing all or only the selected applications" + }, "WPFGetInstalled": { "Content": "Get Installed", "Category": "____Actions", "Type": "Button", - "Order": "1", + "Order": "3", "Description": "Show installed applications" }, "WPFClearInstallSelection": { "Content": "Clear Selection", "Category": "____Actions", "Type": "Button", - "Order": "2", + "Order": "4", "Description": "Clear the selection of applications" }, "WingetRadioButton": { diff --git a/functions/public/Invoke-WPFUIApps.ps1 b/functions/public/Invoke-WPFUIApps.ps1 index 4dc9ea39..2f919c22 100644 --- a/functions/public/Invoke-WPFUIApps.ps1 +++ b/functions/public/Invoke-WPFUIApps.ps1 @@ -11,15 +11,15 @@ function Set-CategoryVisibility { $isChecked = $sync.CompactView } - # If all the Categories are affected, update the Checked state of the ToggleButtons. + # If all the Categories are affected, update the Checked state of the ToggleButtons. # Otherwise, the state is not synced when toggling between the display modes - if ($category -eq "*"){ + if ($category -eq "*") { $items = $ItemsControl.Items | Where-Object {($_.Tag -like "CategoryWrapPanel_*")} $ItemsControl.Items | Where-Object {($_.Tag -eq "CategoryToggleButton")} | Foreach-Object { $_.Visibility = [Windows.Visibility]::Visible; $_.IsChecked = $isChecked } } else { $items = $ItemsControl.Items | Where-Object {($_.Tag -eq "CategoryWrapPanel_$Category")} } - + $elementVisibility = if ($isChecked -eq $true) {[Windows.Visibility]::Visible} else {[Windows.Visibility]::Collapsed} $items | ForEach-Object { $_.Visibility = $elementVisibility @@ -39,8 +39,8 @@ function Find-AppsByNameOrDescription { if ([string]::IsNullOrWhiteSpace($SearchString)) { Set-CategoryVisibility -Category "*" -ItemsControl $ItemsControl -automaticVisibility - - + + $ItemsControl.Items | ForEach-Object { if ($_.Tag -like "CategoryWrapPanel_*") { # If CompactView is enabled, show all Apps when the search bar is empty @@ -75,7 +75,7 @@ function Find-AppsByNameOrDescription { } } } - } + } } } @@ -96,7 +96,7 @@ function Show-OnlyCheckedApps { $sync.Buttons | Where-Object {$_.Name -like "ShowSelectedAppsButton"} | ForEach-Object { $_.Content = "Show All" } - + $ItemsControl.Items | Foreach-Object { # Search for App Container and set them to visible if ($_.Tag -like "CategoryWrapPanel_*") { @@ -220,7 +220,7 @@ function Invoke-WPFUIApps { $this.Content = "Expanded View" } else { $this.Content = "Compact View" - } + } }) $null = $wrapPanelTop.Children.Add($compactViewButton) [Windows.Controls.DockPanel]::SetDock($wrapPanelTop, [Windows.Controls.Dock]::Top) @@ -260,7 +260,7 @@ function Invoke-WPFUIApps { [string]$Category, $ItemsControl ) - + $toggleButton = New-Object Windows.Controls.Primitives.ToggleButton $toggleButton.Content = "$Category" $toggleButton.Tag = "CategoryToggleButton" @@ -351,7 +351,7 @@ function Invoke-WPFUIApps { $checkBox.HorizontalAlignment = "Left" $checkBox.VerticalAlignment = "Center" $checkBox.SetResourceReference([Windows.Controls.Control]::MarginProperty, "AppTileMargins") - $checkBox.SetResourceReference([Windows.Controls.Control]::StyleProperty, "CollapsedCheckBoxStyle") + $checkBox.SetResourceReference([Windows.Controls.Control]::StyleProperty, "CollapsedCheckBoxStyle") $checkbox.Add_Checked({ Invoke-WPFSelectedLabelUpdate -type "Add" -checkbox $this $borderElement = $this.Parent.Parent diff --git a/functions/public/Invoke-WPFUIElements.ps1 b/functions/public/Invoke-WPFUIElements.ps1 index 488effc7..0ab278a8 100644 --- a/functions/public/Invoke-WPFUIElements.ps1 +++ b/functions/public/Invoke-WPFUIElements.ps1 @@ -30,6 +30,7 @@ function Invoke-WPFUIElements { $borderstyle = $window.FindResource("BorderStyle") $HoverTextBlockStyle = $window.FindResource("HoverTextBlockStyle") $ColorfulToggleSwitchStyle = $window.FindResource("ColorfulToggleSwitchStyle") + $ToggleButtonStyle = $window.FindResource("ToggleButtonStyle") if (!$borderstyle -or !$HoverTextBlockStyle -or !$ColorfulToggleSwitchStyle) { throw "Failed to retrieve Styles using 'FindResource' from main window element." @@ -187,40 +188,48 @@ function Invoke-WPFUIElements { $sync[$entryInfo.Name].IsChecked = Get-WinUtilToggleStatus $sync[$entryInfo.Name].Name $sync[$entryInfo.Name].Add_Click({ - [System.Object]$Sender = $args[0] - Invoke-WPFToggle $Sender.name - }) + [System.Object]$Sender = $args[0] + Invoke-WPFToggle $Sender.name + }) } "ToggleButton" { - $toggleButton = New-Object Windows.Controls.ToggleButton + # Determine contentOn and contentOff based on the Content property + if ($entryInfo.Content -is [array]) { + # If Content is an array, use its elements + write-host "Content is an array" + write-host $entryInfo.Content + $contentOn = if ($entryInfo.Content.Count -ge 1) { $entryInfo.Content[0] } else { "" } + $contentOff = if ($entryInfo.Content.Count -ge 2) { $entryInfo.Content[1] } else { $contentOn } + } else { + # If Content is a single value, use it for both states + $contentOn = $entryInfo.Content + $contentOff = $entryInfo.Content + } + + $toggleButton = New-Object Windows.Controls.Primitives.ToggleButton $toggleButton.Name = $entryInfo.Name + $toggleButton.Content = $contentOff + $toggleButton.ToolTip = $entryInfo.Description $toggleButton.HorizontalAlignment = "Left" - $toggleButton.SetResourceReference([Windows.Controls.Control]::HeightProperty, "TabButtonHeight") - $toggleButton.SetResourceReference([Windows.Controls.Control]::WidthProperty, "TabButtonWidth") - $toggleButton.SetResourceReference([Windows.Controls.Control]::BackgroundProperty, "ButtonInstallBackgroundColor") - $toggleButton.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "MainForegroundColor") - $toggleButton.FontWeight = [Windows.FontWeights]::Bold + $toggleButton.Style = $ToggleButtonStyle - $textBlock = New-Object Windows.Controls.TextBlock - $textBlock.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "TabButtonFontSize") - $textBlock.Background = [Windows.Media.Brushes]::Transparent - $textBlock.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "ButtonInstallForegroundColor") - - $underline = New-Object Windows.Documents.Underline - $underline.Inlines.Add($entryInfo.Name -replace "(.).*", "$1") - - $run = New-Object Windows.Documents.Run - $run.Text = $entryInfo.Name -replace "^.", "" - - $textBlock.Inlines.Add($underline) - $textBlock.Inlines.Add($run) - - $toggleButton.Content = $textBlock + $toggleButton.Tag = @{ + contentOn = $contentOn + contentOff = $contentOff + } $itemsControl.Items.Add($toggleButton) | Out-Null $sync[$entryInfo.Name] = $toggleButton + + $sync[$entryInfo.Name].Add_Checked({ + $this.Content = $this.Tag.contentOn + }) + + $sync[$entryInfo.Name].Add_Unchecked({ + $this.Content = $this.Tag.contentOff + }) } "Combobox" { diff --git a/scripts/main.ps1 b/scripts/main.ps1 index bac53ec9..754c53ca 100644 --- a/scripts/main.ps1 +++ b/scripts/main.ps1 @@ -216,8 +216,8 @@ function Update-AppTileProperties { $sync.Form.Resources.AppTileMargins = [Windows.Thickness]5 $sync.Form.Resources.AppTileBorderThickness = [Windows.Thickness]1 } -} -# We need to update the app tile properties when the form is resized because to fill a WrapPanel update the width of the elemenmt manually (afaik) +} +# We need to update the app tile properties when the form is resized because to fill a WrapPanel update the width of the elemenmt manually (afaik) $sync.Form.Add_SizeChanged({ Update-AppTileProperties }) diff --git a/xaml/inputXML.xaml b/xaml/inputXML.xaml index 7b942aec..d6305494 100644 --- a/xaml/inputXML.xaml +++ b/xaml/inputXML.xaml @@ -210,9 +210,9 @@ - @@ -337,6 +337,64 @@ + + +