WFControlsLIB.psm1

<#
    My Function
#>


Add-Type -AssemblyName System.Windows.Forms

function form {
    param(
        [string]$sizex,
        [string]$sizey,
        [string]$startposition,
        [bool]$maximizebox,
        [bool]$controlbox,
        [string]$formborderstyle

    )
    $form = New-Object System.Windows.Forms.Form
    $form.Size = New-Object System.Drawing.Point($sizex, $sizey)
    $form.StartPosition = $startposition
    $form.MaximizeBox = $maximizebox
    $form.ControlBox = $controlbox
            if ($formborderstyle -and $formborderstyle -ne "") {
        $form.FormBorderStyle = $formborderstyle
    }

    return $form
}
function button {
    param(
        [string]$text,
        [string]$font,
        [string]$textalign = "MiddleCenter",
        [bool]$autosize,
        [int]$sizex,
        [int]$sizey,
        [int]$x,
        [int]$y,
        [string]$backcolor,
        [string]$flatstyle = "Flat",
        [int]$flatappearance_bordersize,
        [string]$imagepath,
        [string]$imagelayout = "Center",
        [scriptblock]$onclick,
        [bool]$visible = $true
    )
    
    $button = New-Object System.Windows.Forms.Button
    $button.Text = $text
    $button.Font = $font
    $button.TextAlign = $textalign
    $button.AutoSize = $autosize
    $button.Size = New-Object System.Drawing.Size($sizex, $sizey)
    $button.Location = New-Object System.Drawing.Point($x, $y)
    $button.BackColor = $backcolor
    $button.FlatStyle = $flatstyle
    $button.FlatAppearance.BorderSize = $flatappearance_bordersize
    $button.Visible = $visible
  
    if ($imagepath) {
        $image = [System.Drawing.Image]::FromFile($imagepath)
        $button.BackgroundImage = $image
        $button.BackgroundImageLayout = $imagelayout
    }
    
    if($onclick) {
        $button.Add_Click($OnClick)
    }

    return $button
}
function label{
    param(
        [string]$text,
        [string]$font,
        [bool]$autosize,
        [int]$sizex,
        [int]$sizey,
        [int]$x,
        [int]$y,
        [bool]$visible = $true
    )

    $label = New-Object System.Windows.Forms.Label
    $label.Text = $text
    $label.font = $font
    $label.AutoSize = $autosize
    $label.Size = New-Object System.Drawing.Size($sizex, $sizey)
    $label.Location = New-Object System.Drawing.Point($x, $y)
    $label.Visible = $visible

    return $label
}
function textbox {
    param(
        [string]$text,
        [string]$font,
        [string]$textalign,
        [string]$borderstyle,
        [bool]$multiline,
        [int]$sizex,
        [int]$sizey,
        [int]$x,
        [int]$y,
        [bool]$visible = $true
    )

    $textbox = New-Object System.Windows.Forms.TextBox
    $textbox.Text = $text
    $textbox.Font = $font
    $textbox.TextAlign = "Left"
    $textbox.BorderStyle = $borderstyle
    $textbox.Multiline = $multiline
    $textbox.Size = New-Object System.Drawing.Size($sizex, $sizey)
    $textbox.Location = New-Object System.Drawing.Point($x, $y)
    $textbox.Visible = $visible
        if ($borderstyle -and $borderstyle -ne "") {
            $textbox.BorderStyle = [System.Windows.Forms.BorderStyle]::$borderstyle
    }

    return $textbox
}
function checkbox{
    param(
        [int]$x,
        [int]$y,
        [bool]$checked,
        [bool]$visible = $true,
        [scriptblock]$checkedchanged
    )

    $checkbox = New-Object System.Windows.Forms.CheckBox
    $checkbox.Location = New-Object System.Drawing.Point($x, $y)
    $checkbox.Checked = $checked
    $checkbox.Visible = $visible
        if($checkedchanged) {
            $checkbox.Add_CheckedChanged($checkedchanged)
        }

    return $checkbox
}
function combobox{
    param(
        [string]$dropdownstyle,
        [string]$font,
        [int]$sizex,
        [int]$sizey,
        [bool]$autosize,
        [int]$x,
        [int]$y,
        [string[]]$items,
        [string]$flatstyle,
        [string]$defaultselection,
        [bool]$visible = $true
    )
    
    $combobox = New-Object System.Windows.Forms.ComboBox
    $combobox.Font = $font
    $combobox.Size = New-Object System.Drawing.Size($sizex, $sizey)
    $combobox.AutoSize = $autosize
    $combobox.Location = New-Object System.Drawing.Point($x, $y)
    $combobox.Items.AddRange(@($items))
    $combobox.FlatStyle = $flatstyle
    $combobox.DropDownStyle = [System.Windows.Forms.ComboBoxStyle]::$dropdownstyle
    $combobox.Visible = $visible
    $defaultcbindex = $combobox.FindStringExact($defaultselection)
        if($defaultcbindex -ge 0){
            $combobox.SelectedIndex = $defaultcbindex
        }
    
    
    return $combobox
}
function tab{
    param(
        [int]$sizex,
        [int]$sizey,
        [int]$x,
        [int]$y,
        [bool]$visible = $true
    )
    
    $tab = New-Object System.Windows.Forms.TabControl
    $tab.Size = New-Object System.Drawing.Size($sizex, $sizey)
    $tab.Location = New-Object System.Drawing.Point($x, $y)
    $tab.Visible = $visible

    return $tab
}
function tabpage{
    param(
        [string]$text,
        [bool]$visible = $true
    )

    $tabpage = New-Object System.Windows.Forms.TabPage
    $tabpage.Text = $text
    $tabpage.Visible = $visible

    return $tabpage
}
function checkedlistbox{
    param (
        [int]$x,
        [int]$y,
        [int]$sizex,
        [int]$sizey,
        [bool]$autosize = $false,
        [string[]]$items
    )

    $checkedlistbox = New-Object System.Windows.Forms.CheckedListBox
    $checkedlistbox.Location = New-Object System.Drawing.Point($x, $y)
    $checkedlistbox.Size = New-Object System.Drawing.Size($sizex ,$sizey)
    $checkedlistbox.AutoSize = $autosize
        foreach($item in $items){
            $checkedlistbox.items.addrange(@("$item"))
        }

    return $checkedlistbox
}
function tooltip{
    param(
        [System.Windows.Forms.Control]$control,
        [string]$text
    )

    $tooltip = New-Object System.Windows.Forms.Tooltip
    $tooltip.SetToolTip($control, $text)
}
function listbox {
    param(
        [int]$sizex,
        [int]$sizey,
        [int]$x,
        [int]$y,
        [string]$font,
        [int]$itemheight,
        [string[]]$items,
        [hashtable]$controlgroup,
        [int]$selecteditem = 0
    )

    $listbox = New-Object System.Windows.Forms.ListBox
    $listbox.Size = New-Object System.Drawing.Size($sizex, $sizey)
    $listbox.Location = New-Object System.Drawing.Point($x, $y)
    $listbox.Font = $font
    $listbox.ItemHeight = $itemheight
    $listbox.Items.AddRange(@($items))
    $listBox.SelectedIndex = $selecteditem

    $listbox.add_SelectedIndexChanged({
        $selecteditem = $listbox.SelectedItem

        foreach ($control in $controlgroup.Values) {
            $control | ForEach-Object { $_.Visible = $false }
        }

        foreach ($control in $controlgroup[$selecteditem]) {
            $control | ForEach-Object { $_.Visible = $true }
        }
    })

    return $listbox
}