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 @@
+
+
+