Initial commit
This commit is contained in:
126
Functions/Load-Templates.ps1
Normal file
126
Functions/Load-Templates.ps1
Normal file
@@ -0,0 +1,126 @@
|
||||
function Load-Templates {
|
||||
|
||||
$flow.SuspendLayout()
|
||||
$flow.Controls.Clear()
|
||||
|
||||
# Lokales Tracking-Objekt
|
||||
$selectionTracker = @{
|
||||
LastSelectedListBox = $null
|
||||
}
|
||||
|
||||
if (-not (Test-Path -Path $($settingsManager.Get("TemplatePath")))) {
|
||||
$statusBar.SetText("Status", "Root-Ordner nicht gefunden: $rootPath")
|
||||
}
|
||||
else {
|
||||
try {
|
||||
$Categories = Get-ChildItem -Path $($settingsManager.Get("TemplatePath")) -Directory -ErrorAction Stop
|
||||
}
|
||||
catch {
|
||||
$statusBar.SetText("Status", "Fehler beim Laden: $($_.Exception.Message)")
|
||||
[System.Windows.Forms.MessageBox]::Show(
|
||||
"Konnte Kategorien nicht laden: $($_.Exception.Message)",
|
||||
"Fehler",
|
||||
[System.Windows.Forms.MessageBoxButtons]::OK,
|
||||
[System.Windows.Forms.MessageBoxIcon]::Error
|
||||
)
|
||||
return
|
||||
}
|
||||
if ($Categories.Count -eq 0) {
|
||||
$labelNoCategories = (
|
||||
[LabelBuilder]::new("Keine Unterordner gefunden.", 24).
|
||||
SetDock('Top').
|
||||
SetTextAlign([System.Drawing.ContentAlignment]::MiddleLeft).
|
||||
SetPadding(5, 0, 0, 0).
|
||||
Build()
|
||||
)
|
||||
$flow.Controls.Add($labelNoCategories)
|
||||
return
|
||||
}
|
||||
else {
|
||||
foreach ($Categorie in $Categories) {
|
||||
|
||||
$GroupBox = (
|
||||
[GroupBoxBuilder]::new($Categorie.Name).
|
||||
#SetAutoSize($true).
|
||||
SetWidth(0).
|
||||
SetHeight(90).
|
||||
SetMargin(4).
|
||||
SetPadding(10).
|
||||
AddTo($flow)
|
||||
)
|
||||
|
||||
$GroupBox.Tag = $Categorie.Name
|
||||
|
||||
$Files = Get-ChildItem -Path $Categorie.FullName -Filter "*.psd1" -File -ErrorAction SilentlyContinue | Sort-Object Name
|
||||
if ($Files.Count -eq 0) {
|
||||
$ListBox = (
|
||||
[ListBoxBuilder]::new().
|
||||
SetDock('Fill'). # Füllt die GroupBox aus
|
||||
AddItem("Keine Templates").
|
||||
AddTo($GroupBox)
|
||||
)
|
||||
}
|
||||
else {
|
||||
|
||||
$ListBox = (
|
||||
[ListBoxBuilder]::new().
|
||||
SetDock('Fill').
|
||||
AddSelectedIndexChangedHandler({
|
||||
param($s, $e)
|
||||
|
||||
if ($null -ne $selectionTracker.LastSelectedListBox -and
|
||||
$selectionTracker.LastSelectedListBox -ne $s) {
|
||||
|
||||
# Deselektiere die vorherige ListBox
|
||||
$selectionTracker.LastSelectedListBox.ClearSelected()
|
||||
}
|
||||
|
||||
# Speichere die aktuelle ListBox
|
||||
$selectionTracker.LastSelectedListBox = $s
|
||||
|
||||
$selectedItem = $s.SelectedItem
|
||||
if ($null -ne $selectedItem -and ($selectedItem -isnot [string])) {
|
||||
$currentGroupBox = $s.Parent
|
||||
$statusBar.SetText("Status", "Ausgewählt: $($selectedItem.FullName) [Kategorie: $($currentGroupBox.Tag)]")
|
||||
Show-Template -Template $([TemplateBuilder]::new($selectedItem.FullName).ResolveDeploymentDataVariables())
|
||||
}
|
||||
}.GetNewClosure()).
|
||||
AddMouseDoubleClickHandler({
|
||||
param($s, $e)
|
||||
$selectedItem = $s.SelectedItem
|
||||
if ($null -ne $selectedItem -and ($selectedItem -isnot [string])) {
|
||||
$fullPath = $selectedItem.FullName
|
||||
if (-not (Test-Path $fullPath)) {
|
||||
[System.Windows.Forms.MessageBox]::Show("Datei nicht gefunden: $fullPath", "Fehler", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
|
||||
return
|
||||
}
|
||||
$newItem = New-Object PSObject -Property @{ BaseName = [System.IO.Path]::GetFileNameWithoutExtension($fullPath); FullName = $fullPath }
|
||||
if (-not ($selectionList.Items | Where-Object { $_.FullName -eq $newItem.FullName })) {
|
||||
$selectionList.Items.Add($newItem) | Out-Null
|
||||
$stateManager.SetState("hasSelection", $true)
|
||||
$stateManager.SetState("isMerged", $false)
|
||||
$stateManager.UpdateAllButtons()
|
||||
$statusBar.SetText("Status", "Zur Auswahl hinzugefügt: $fullPath")
|
||||
}
|
||||
else {
|
||||
$statusBar.SetText("Status", "Datei bereits in der Auswahl")
|
||||
}
|
||||
}
|
||||
})
|
||||
)
|
||||
|
||||
foreach ($file in $files) {
|
||||
$item = New-Object PSObject -Property @{ BaseName = $file.BaseName; FullName = $file.FullName }
|
||||
$ListBox.AddItem($item)
|
||||
$ListBox.AddTo($GroupBox)
|
||||
}
|
||||
}
|
||||
}
|
||||
$flow.ResumeLayout()
|
||||
}
|
||||
}
|
||||
|
||||
$form.Form.Invoke([Action] {
|
||||
$splitPanel.AutoSizeSplitterToPanel1Content()
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user