# encoding: ascii
# api: powershell
# title: Get-UIInput
# description: This is a flexible multiple-input prompt for Show-UI (it works against the Latest Changeset ‘d7ad095858eb’ right now, so you can just hit the download link on the right)
# version: 0.1
# type: function
# author: Joel Bennett
# license: CC0
# function: Get-UIInput
# x-poshcode-id: 2666
# x-archived: 2015-12-29T02:41:25
# x-published: 2011-05-09T08:19:00
#
#
function Get-UIInput {
      #.Synopsis
      #  Prompt the user for input with a pretty dialog
      #.Parameter PromptText
      #  The text to prompt the user for (an array of one or more strings)
      #.Example
      #  Get-UIInput "First Name:", "Last Name:", "Age:"
      Param([string[]]$PromptText = "Please enter your name:")

      Show-UI -Parameters @(,$PromptText) {
         Param([string[]]$PromptText)

         $global:UIInputWindow = $this
         function global:Get-UIInputOutput {
            $stack = Select-UIElement $UIInputWindow "Wrapper"
            $Output = @{}
            ## Loop through the stack of prompts and get the user's input
            $inputs = $stack.Children
            while($inputs.Count) {
               $label, $value, $inputs = $inputs
               $Output.($label.Content) = $value.Text
            }
            Write-UIOutput $Output
         }
         
         Border -BorderThickness 4 -BorderBrush "#BE8" -Background "#EFC" {
            Grid -Margin 10 -Name "Wrapper" -Columns Auto,150 -Rows (@("Auto") * ($PromptText.Count + 1)) {

               ## Loop through the prompts and create input boxes for them
               for($i=0;$i -lt $PromptText.Count;$i++) {
                  Label   -Grid-Row $i $PromptText[$i]
                  TextBox -Grid-Row $i -Grid-Column 1 -Width 150 -On_KeyDown { 
                     if($_.Key -eq "Return") { 
                        Get-UIInputOutput
                        $UIInputWindow.Close()
                     }
                  }
               }
               Button "Ok" -Grid-Row $PromptText.Count -Grid-Column 1 -Width 60 -On_Click { 
                  Get-UIInputOutput
                  $UIInputWindow.Close()
               }
            }
         }
      } -On_Load { (Select-UIElement $this "Wrapper").Children[1].Focus() }`
      -WindowStyle None -AllowsTransparency `
      -On_PreviewMouseLeftButtonDown { 
         if($_.Source -notmatch ".*\.(TextBox|Button)") 
         {
            $ShowUI.ActiveWindow.DragMove() 
         }
      }
   }
