public/Select/Select-ISETheme.ps1
function Select-ISETheme { [cmdletbinding()] Param() #======================================================================== # Code Generated By: SAPIEN Technologies, Inc., PowerShell Studio 2014 v4.1.46 # Generated On: 3/18/2014 10:19 AM # Generated By: Jeff Pollock #======================================================================== <# .SYNOPSIS Opens a graphical interface to select and apply a PowerShell ISE theme. .DESCRIPTION This function launches a Windows Forms-based GUI that displays all imported ISE themes stored in the registry. Users can preview and select a theme from a list. Upon selection, the chosen theme is immediately applied to the PowerShell ISE environment using Set-ISETheme. This tool is part of the ISEColorThemeCmdlets module and helps simplify theme management for PowerShell ISE. .EXAMPLE PS C:\> Select-ISETheme Launches the theme selector GUI, allowing the user to choose a theme from a list of available registry-based themes. .NOTES Author: Jeff Pollock GitHub: https://github.com/phriendx/ISEColorTheme.cmdlets Website: https://pxlabs.info #> #---------------------------------------------- #region Application Functions #---------------------------------------------- function OnApplicationLoad { return $true #return true for success or false for failure } function OnApplicationExit { $script:ExitCode = 0 #Set the exit code for the Packager } #endregion Application Functions #---------------------------------------------- # Generated Form Function #---------------------------------------------- function Start-ThemeSelector { #---------------------------------------------- #region Import the Assemblies #---------------------------------------------- [void][reflection.assembly]::Load('mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') [void][reflection.assembly]::Load('System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') [void][reflection.assembly]::Load('System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') [void][reflection.assembly]::Load('System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') [void][reflection.assembly]::Load('System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') [void][reflection.assembly]::Load('System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') [void][reflection.assembly]::Load('System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') [void][reflection.assembly]::Load('System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') [void][reflection.assembly]::Load('System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') #endregion Import Assemblies #---------------------------------------------- #region Generated Form Objects #---------------------------------------------- [System.Windows.Forms.Application]::EnableVisualStyles() $formISEThemeSelector = New-Object 'System.Windows.Forms.Form' $buttonExit = New-Object 'System.Windows.Forms.Button' $buttonSelectTheme = New-Object 'System.Windows.Forms.Button' $listboxThemes = New-Object 'System.Windows.Forms.ListBox' $InitialFormWindowState = New-Object 'System.Windows.Forms.FormWindowState' $formISEThemeSelector.Icon = [Drawing.Icon]::ExtractAssociatedIcon((Get-Command powershell).Path) #endregion Generated Form Objects #---------------------------------------------- # User Generated Script #---------------------------------------------- $buttonSelectTheme_Click={ Set-ISETheme -ThemeName $listboxThemes.SelectedItem $formISEThemeSelector.Close() } $formISEThemeSelector_KeyDown={ if ($_.KeyCode -eq 'Enter') {Write-Output 'Inside';$buttonSelectTheme_Click} } $listboxThemes_KeyDown={ if ($_.KeyCode -eq 'Enter') { Set-ISETheme -ThemeName $listboxThemes.SelectedItem $formISEThemeSelector.Close() } } $buttonExit_Click={$formISEThemeSelector.Close()} $formISEThemeSelector_Load={ #TODO: Initialize Form Controls here $Themes = Get-ImportedISETheme | Select-Object ThemeName $Themes | ForEach-Object { Set-ListBox $listboxThemes $_.ThemeName -Append } } #region Control Helper Functions function Set-ListBox { <# .SYNOPSIS This functions helps you load items into a ListBox or CheckedListBox. .DESCRIPTION Use this function to dynamically load items into the ListBox control. .PARAMETER ListBox The ListBox control you want to add items to. .PARAMETER Items The object or objects you wish to load into the ListBox's Items collection. .PARAMETER DisplayMember Indicates the property to display for the items in this control. .PARAMETER Append Adds the item(s) to the ListBox without clearing the Items collection. .EXAMPLE Set-ListBox $ListBox1 "Red", "White", "Blue" .EXAMPLE Set-ListBox $listBox1 "Red" -Append Set-ListBox $listBox1 "White" -Append Set-ListBox $listBox1 "Blue" -Append .EXAMPLE Set-ListBox $listBox1 (Get-Process) "ProcessName" #> [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions','')] param ( [ValidateNotNull()] [Parameter(Mandatory=$true)] [System.Windows.Forms.ListBox]$ListBox, [ValidateNotNull()] [Parameter(Mandatory=$true)] $Items, [Parameter(Mandatory=$false)] [string]$DisplayMember, [switch]$Append ) if(-not $Append) { $listBox.Items.Clear() } if($Items -is [System.Windows.Forms.ListBox+ObjectCollection]) { $listBox.Items.AddRange($Items) } elseif ($Items -is [Array]) { $listBox.BeginUpdate() foreach($obj in $Items) { $listBox.Items.Add($obj) } $listBox.EndUpdate() } else { $listBox.Items.Add($Items) } $listBox.DisplayMember = $DisplayMember } #endregion # --End User Generated Script-- #---------------------------------------------- #region Generated Events #---------------------------------------------- $Form_StateCorrection_Load= { #Correct the initial state of the form to prevent the .Net maximized form issue $formISEThemeSelector.WindowState = $InitialFormWindowState } $Form_Cleanup_FormClosed= { #Remove all event handlers from the controls try { $formISEThemeSelector.remove_Load($formISEThemeSelector_Load) $formISEThemeSelector.remove_Load($Form_StateCorrection_Load) $formISEThemeSelector.remove_FormClosed($Form_Cleanup_FormClosed) } catch [Exception] {$null } } #endregion Generated Events #---------------------------------------------- #region Generated Form Code #---------------------------------------------- $formISEThemeSelector.SuspendLayout() # # formISEThemeSelector # $formISEThemeSelector.Controls.Add($buttonExit) $formISEThemeSelector.Controls.Add($buttonSelectTheme) $formISEThemeSelector.Controls.Add($listboxThemes) $formISEThemeSelector.ClientSize = '228, 278' $formISEThemeSelector.FormBorderStyle = 'None' $formISEThemeSelector.Name = 'formISEThemeSelector' $formISEThemeSelector.Text = 'Theme Selector' $formISEThemeSelector.add_Load($formISEThemeSelector_Load) $formISEThemeSelector.StartPosition = 'CenterScreen' $formISEThemeSelector.MinimizeBox = $False $formISEThemeSelector.MaximizeBox = $False $formISEThemeSelector.BackColor = $PopupColor $formISEThemeSelector.Add_KeyDown($formISEThemeSelector_KeyDown) # # buttonExit # $buttonExit.Location = '117, 233' $buttonExit.Name = 'buttonExit' $buttonExit.Size = '96, 30' $buttonExit.TabIndex = 2 $buttonExit.Text = 'E&xit' $buttonExit.UseVisualStyleBackColor = $True $buttonExit.add_Click($buttonExit_Click) # # buttonSelectTheme # $buttonSelectTheme.Location = '14, 233' $buttonSelectTheme.Name = 'buttonSelectTheme' $buttonSelectTheme.Size = '96, 30' $buttonSelectTheme.TabIndex = 1 $buttonSelectTheme.Text = '&Select' $buttonSelectTheme.UseVisualStyleBackColor = $True $buttonSelectTheme.add_Click($buttonSelectTheme_Click) # # listboxThemes # $listboxThemes.Font = 'Microsoft Sans Serif, 12pt' $listboxThemes.FormattingEnabled = $True $listboxThemes.ItemHeight = 17 $listboxThemes.Location = '14, 15' $listboxThemes.Name = 'listboxThemes' $listboxThemes.Size = '199, 220' $listboxThemes.TabIndex = 0 $listboxThemes.add_KeyDown($listboxThemes_KeyDown) $formISEThemeSelector.ResumeLayout($false) #endregion Generated Form Code #---------------------------------------------- #Save the initial state of the form $InitialFormWindowState = $formISEThemeSelector.WindowState #Init the OnLoad event to correct the initial state of the form $formISEThemeSelector.add_Load($Form_StateCorrection_Load) #Clean up the control events $formISEThemeSelector.add_FormClosed($Form_Cleanup_FormClosed) #Show the Form return $formISEThemeSelector.ShowDialog() } #End Function #Call OnApplicationLoad to initialize if((OnApplicationLoad) -eq $true) { $BackgroundColor = $psISE.Options.ScriptPaneBackgroundColor IF ($BackgroundColor.A -lt 235) {$BackgroundColor.A = $BackgroundColor.A + 20} IF ($BackgroundColor.R -lt 235) {$BackgroundColor.R = $BackgroundColor.R + 20} IF ($BackgroundColor.G -lt 235) {$BackgroundColor.G = $BackgroundColor.G + 20} IF ($BackgroundColor.B -lt 235) {$BackgroundColor.B = $BackgroundColor.B + 20} $PopupColor = Convert-ARGBToHex "$($BackgroundColor.A),$($BackgroundColor.R),$($BackgroundColor.G),$($BackgroundColor.B)" #Call the form Start-ThemeSelector | Out-Null #Perform cleanup OnApplicationExit } } |