mirror of
https://github.com/ChrisTitusTech/winutil.git
synced 2024-11-14 22:55:52 -06:00
Remove Logic from Invoke-WPFUIElements that is Moved to Invoke-WPFUIApps
This commit is contained in:
parent
f05fece2e5
commit
a839acd949
@ -71,8 +71,6 @@ function Invoke-WPFUIElements {
|
||||
Order = $entryInfo.order
|
||||
Category = $entryInfo.Category
|
||||
Content = $entryInfo.Content
|
||||
Choco = $entryInfo.choco
|
||||
Winget = $entryInfo.winget
|
||||
Panel = if ($entryInfo.Panel) { $entryInfo.Panel } else { "0" }
|
||||
Link = $entryInfo.link
|
||||
Description = $entryInfo.description
|
||||
@ -98,7 +96,6 @@ function Invoke-WPFUIElements {
|
||||
if ($targetGridName -eq "appspanel") {
|
||||
$panelcount = 0
|
||||
$entrycount = $configHashtable.Keys.Count + $organizedData["0"].Keys.Count
|
||||
$maxcount = [Math]::Round($entrycount / $columncount + 0.5)
|
||||
}
|
||||
}
|
||||
|
||||
@ -119,58 +116,6 @@ function Invoke-WPFUIElements {
|
||||
$dockPanelContainer = New-Object Windows.Controls.DockPanel
|
||||
$border.Child = $dockPanelContainer
|
||||
|
||||
# Check if configVariable equals $sync.configs.applications
|
||||
if ($configVariable -eq $sync.configs.applications) {
|
||||
# Create a WrapPanel to hold buttons at the top
|
||||
$wrapPanelTop = New-Object Windows.Controls.WrapPanel
|
||||
$wrapPanelTop.SetResourceReference([Windows.Controls.Control]::BackgroundProperty, "MainBackgroundColor")
|
||||
$wrapPanelTop.HorizontalAlignment = "Left"
|
||||
$wrapPanelTop.VerticalAlignment = "Top"
|
||||
$wrapPanelTop.Orientation = "Horizontal"
|
||||
$wrapPanelTop.Margin = $window.FindResource("TabContentMargin")
|
||||
|
||||
# Create buttons and add them to the WrapPanel with dynamic widths
|
||||
$installButton = New-Object Windows.Controls.Button
|
||||
$installButton.Name = "WPFInstall"
|
||||
$installButton.Content = "Install/Upgrade Selected"
|
||||
$installButton.Margin = New-Object Windows.Thickness(2)
|
||||
$installButton.HorizontalAlignment = "Stretch"
|
||||
$wrapPanelTop.Children.Add($installButton) | Out-Null
|
||||
$sync["WPFInstall"] = $installButton
|
||||
|
||||
$upgradeButton = New-Object Windows.Controls.Button
|
||||
$upgradeButton.Name = "WPFInstallUpgrade"
|
||||
$upgradeButton.Content = "Upgrade All"
|
||||
$upgradeButton.Margin = New-Object Windows.Thickness(2)
|
||||
$upgradeButton.HorizontalAlignment = "Stretch"
|
||||
$wrapPanelTop.Children.Add($upgradeButton) | Out-Null
|
||||
$sync["WPFInstallUpgrade"] = $upgradeButton
|
||||
|
||||
$uninstallButton = New-Object Windows.Controls.Button
|
||||
$uninstallButton.Name = "WPFUninstall"
|
||||
$uninstallButton.Content = "Uninstall Selected"
|
||||
$uninstallButton.Margin = New-Object Windows.Thickness(2)
|
||||
$uninstallButton.HorizontalAlignment = "Stretch"
|
||||
$wrapPanelTop.Children.Add($uninstallButton) | Out-Null
|
||||
$sync["WPFUninstall"] = $uninstallButton
|
||||
|
||||
$selectedLabel = New-Object Windows.Controls.Label
|
||||
$selectedLabel.Name = "WPFSelectedLabel"
|
||||
$selectedLabel.Content = "Selected Apps: 0"
|
||||
$selectedLabel.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "FontSizeHeading")
|
||||
$selectedLabel.SetResourceReference([Windows.Controls.Control]::MarginProperty, "TabContentMargin")
|
||||
$selectedLabel.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "MainForegroundColor")
|
||||
$selectedLabel.HorizontalAlignment = "Center"
|
||||
$selectedLabel.VerticalAlignment = "Center"
|
||||
|
||||
$wrapPanelTop.Children.Add($selectedLabel) | Out-null
|
||||
$sync.$($selectedLabel.Name) = $selectedLabel
|
||||
|
||||
# Dock the WrapPanel at the top of the DockPanel
|
||||
[Windows.Controls.DockPanel]::SetDock($wrapPanelTop, [Windows.Controls.Dock]::Top)
|
||||
$dockPanelContainer.Children.Add($wrapPanelTop) | Out-Null
|
||||
}
|
||||
|
||||
# Create a ScrollViewer to contain the main content (excluding buttons)
|
||||
$scrollViewer = New-Object Windows.Controls.ScrollViewer
|
||||
$scrollViewer.VerticalScrollBarVisibility = 'Auto'
|
||||
@ -218,190 +163,6 @@ function Invoke-WPFUIElements {
|
||||
$entries = $organizedData[$panelKey][$category] | Sort-Object Order, Name
|
||||
foreach ($entryInfo in $entries) {
|
||||
$count++
|
||||
|
||||
if ($configVariable -eq $sync.configs.applications) {
|
||||
# Create the outer Border for the application type
|
||||
$border = New-Object Windows.Controls.Border
|
||||
$border.Name = "wpfappborder" + $entryInfo.Name
|
||||
$border.BorderBrush = [Windows.Media.Brushes]::Gray
|
||||
$border.BorderThickness = 1
|
||||
$border.CornerRadius = 5
|
||||
$border.Padding = New-Object Windows.Thickness(10)
|
||||
$border.HorizontalAlignment = "Stretch"
|
||||
$border.VerticalAlignment = "Top"
|
||||
$border.Margin = New-Object Windows.Thickness(0, 10, 0, 0)
|
||||
$border.SetResourceReference([Windows.Controls.Control]::BackgroundProperty, "AppInstallUnselectedColor")
|
||||
$border.Add_MouseUp({
|
||||
$childCheckbox = ($this.Child.Children | Where-Object {$_.Template.TargetType -eq [System.Windows.Controls.Checkbox]})[0]
|
||||
$childCheckBox.isChecked = -not $childCheckbox.IsChecked
|
||||
})
|
||||
# Create a DockPanel inside the Border
|
||||
$dockPanel = New-Object Windows.Controls.DockPanel
|
||||
$dockPanel.LastChildFill = $true
|
||||
$border.Child = $dockPanel
|
||||
|
||||
# Create the CheckBox, vertically centered
|
||||
$checkBox = New-Object Windows.Controls.CheckBox
|
||||
$checkBox.Name = $entryInfo.Name
|
||||
$checkBox.Background = "Transparent"
|
||||
$checkBox.HorizontalAlignment = "Left"
|
||||
$checkBox.VerticalAlignment = "Center"
|
||||
$checkBox.Margin = New-Object Windows.Thickness(5, 0, 10, 0)
|
||||
$checkbox.Add_Checked({
|
||||
Invoke-WPFSelectedLabelUpdate -type "Add" -checkbox $this
|
||||
$borderElement = $this.Parent.Parent
|
||||
$borderElement.SetResourceReference([Windows.Controls.Control]::BackgroundProperty, "AppInstallSelectedColor")
|
||||
})
|
||||
|
||||
$checkbox.Add_Unchecked({
|
||||
Invoke-WPFSelectedLabelUpdate -type "Remove" -checkbox $this
|
||||
$borderElement = $this.Parent.Parent
|
||||
$borderElement.SetResourceReference([Windows.Controls.Control]::BackgroundProperty, "AppInstallUnselectedColor")
|
||||
})
|
||||
# Create a StackPanel for the image and name
|
||||
$imageAndNamePanel = New-Object Windows.Controls.StackPanel
|
||||
$imageAndNamePanel.Orientation = "Horizontal"
|
||||
$imageAndNamePanel.VerticalAlignment = "Center"
|
||||
|
||||
# Create the Image and set a placeholder
|
||||
$image = New-Object Windows.Controls.Image
|
||||
$image.Name = "wpfapplogo" + $entryInfo.Name
|
||||
$image.Width = 40
|
||||
$image.Height = 40
|
||||
$image.Margin = New-Object Windows.Thickness(0, 0, 10, 0)
|
||||
$image.Source = $noimage # Ensure $noimage is defined in your script
|
||||
|
||||
# Clip the image corners
|
||||
$image.Clip = New-Object Windows.Media.RectangleGeometry
|
||||
$image.Clip.Rect = New-Object Windows.Rect(0, 0, $image.Width, $image.Height)
|
||||
$image.Clip.RadiusX = 5
|
||||
$image.Clip.RadiusY = 5
|
||||
|
||||
$imageAndNamePanel.Children.Add($image) | Out-Null
|
||||
|
||||
# Create the TextBlock for the application name
|
||||
$appName = New-Object Windows.Controls.TextBlock
|
||||
$appName.Text = $entryInfo.Content
|
||||
$appName.FontSize = 16
|
||||
$appName.FontWeight = [Windows.FontWeights]::Bold
|
||||
$appName.VerticalAlignment = "Center"
|
||||
$appName.Margin = New-Object Windows.Thickness(5, 0, 0, 0)
|
||||
$appName.Background = "Transparent"
|
||||
$imageAndNamePanel.Children.Add($appName) | Out-Null
|
||||
|
||||
# Add the image and name panel to the Checkbox
|
||||
$checkBox.Content = $imageAndNamePanel
|
||||
|
||||
# Add the checkbox to the DockPanel
|
||||
[Windows.Controls.DockPanel]::SetDock($checkBox, [Windows.Controls.Dock]::Left)
|
||||
$dockPanel.Children.Add($checkBox) | Out-Null
|
||||
|
||||
# Create the StackPanel for the buttons and dock it to the right
|
||||
$buttonPanel = New-Object Windows.Controls.StackPanel
|
||||
$buttonPanel.Orientation = "Horizontal"
|
||||
$buttonPanel.HorizontalAlignment = "Right"
|
||||
$buttonPanel.VerticalAlignment = "Center"
|
||||
$buttonPanel.Margin = New-Object Windows.Thickness(10, 0, 0, 0)
|
||||
[Windows.Controls.DockPanel]::SetDock($buttonPanel, [Windows.Controls.Dock]::Right)
|
||||
|
||||
# Create the "Install" button
|
||||
$installButton = New-Object Windows.Controls.Button
|
||||
$installButton.Width = 45
|
||||
$installButton.Height = 35
|
||||
$installButton.Margin = New-Object Windows.Thickness(0, 0, 10, 0)
|
||||
|
||||
$installIcon = New-Object Windows.Controls.TextBlock
|
||||
$installIcon.Text = [char]0xE118 # Install Icon
|
||||
$installIcon.FontFamily = "Segoe MDL2 Assets"
|
||||
$installIcon.FontSize = 20
|
||||
$installIcon.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "MainForegroundColor")
|
||||
$installIcon.Background = "Transparent"
|
||||
$installIcon.HorizontalAlignment = "Center"
|
||||
$installIcon.VerticalAlignment = "Center"
|
||||
|
||||
$installButton.Content = $installIcon
|
||||
$buttonPanel.Children.Add($installButton) | Out-Null
|
||||
|
||||
# Add Click event for the "Install" button
|
||||
$installButton.Add_Click({
|
||||
Write-Host "Installing $($entryInfo.Name) ..."
|
||||
})
|
||||
|
||||
# Create the "Uninstall" button
|
||||
$uninstallButton = New-Object Windows.Controls.Button
|
||||
$uninstallButton.Width = 45
|
||||
$uninstallButton.Height = 35
|
||||
|
||||
$uninstallIcon = New-Object Windows.Controls.TextBlock
|
||||
$uninstallIcon.Text = [char]0xE74D # Uninstall Icon
|
||||
$uninstallIcon.FontFamily = "Segoe MDL2 Assets"
|
||||
$uninstallIcon.FontSize = 20
|
||||
$uninstallIcon.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "MainForegroundColor")
|
||||
$uninstallIcon.Background = "Transparent"
|
||||
$uninstallIcon.HorizontalAlignment = "Center"
|
||||
$uninstallIcon.VerticalAlignment = "Center"
|
||||
|
||||
$uninstallButton.Content = $uninstallIcon
|
||||
$buttonPanel.Children.Add($uninstallButton) | Out-Null
|
||||
|
||||
$uninstallButton.Add_Click({
|
||||
Write-Host "Uninstalling $($entryInfo.Name) ..."
|
||||
})
|
||||
|
||||
# Create the "Info" button
|
||||
$infoButton = New-Object Windows.Controls.Button
|
||||
$infoButton.Width = 45
|
||||
$infoButton.Height = 35
|
||||
$infoButton.Margin = New-Object Windows.Thickness(10, 0, 0, 0)
|
||||
|
||||
$infoIcon = New-Object Windows.Controls.TextBlock
|
||||
$infoIcon.Text = [char]0xE946 # Info Icon
|
||||
$infoIcon.FontFamily = "Segoe MDL2 Assets"
|
||||
$infoIcon.FontSize = 20
|
||||
$infoIcon.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "MainForegroundColor")
|
||||
$infoIcon.Background = "Transparent"
|
||||
$infoIcon.HorizontalAlignment = "Center"
|
||||
$infoIcon.VerticalAlignment = "Center"
|
||||
|
||||
$infoButton.Content = $infoIcon
|
||||
$buttonPanel.Children.Add($infoButton) | Out-Null
|
||||
|
||||
$infoButton.Add_Click({
|
||||
Write-Host "Getting info for $($entryInfo.Name) ..."
|
||||
})
|
||||
|
||||
# Add the button panel to the DockPanel
|
||||
$dockPanel.Children.Add($buttonPanel) | Out-Null
|
||||
|
||||
# Add the border to the main items control in the grid
|
||||
$itemsControl.Items.Add($border) | Out-Null
|
||||
|
||||
# Sync the CheckBox, buttons, and info to the sync object for further use
|
||||
$sync[$entryInfo.Name] = $checkBox
|
||||
$sync[$entryInfo.Name + "_InstallButton"] = $installButton
|
||||
$sync[$entryInfo.Name + "_UninstallButton"] = $uninstallButton
|
||||
$sync[$entryInfo.Name + "_InfoButton"] = $infoButton
|
||||
|
||||
$image.Source = $noimage
|
||||
if (-not [string]::IsNullOrEmpty($none)) { # replace $none with $entryInfo.choco to get images, takes a lot longer but works for many packages
|
||||
try {
|
||||
$packageinfo = (choco info $entryInfo.choco --limit-output).Split(' ')[0]
|
||||
$packageinfo = $packageinfo -replace '\|', '.'
|
||||
$iconlink = "https://community.chocolatey.org/content/packageimages/" + $packageinfo
|
||||
$finishediconlink = $iconlink + ".png"
|
||||
$webimage = Invoke-WebRequest -Uri $finishediconlink -Method Head -ErrorAction SilentlyContinue
|
||||
if ($webimage.StatusCode -eq 200) {
|
||||
$image.Source = [Windows.Media.Imaging.BitmapImage]::new([Uri]::new($finishediconlink))
|
||||
} else {
|
||||
# TODO: use UniGetUI's image db as a fallback
|
||||
$image.Source = $noimage
|
||||
}
|
||||
} catch {
|
||||
$image.Source = $noimage
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
# Create the UI elements based on the entry type
|
||||
switch ($entryInfo.Type) {
|
||||
"Toggle" {
|
||||
@ -521,7 +282,8 @@ function Invoke-WPFUIElements {
|
||||
|
||||
# Add the group container to the ItemsControl
|
||||
$itemsControl.Items.Add($groupStackPanel) | Out-Null
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
# Retrieve the existing group container
|
||||
$groupStackPanel = $radioButtonGroups[$entryInfo.GroupName]
|
||||
}
|
||||
@ -579,5 +341,4 @@ function Invoke-WPFUIElements {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user