Add-Type -AssemblyName System.Windows.Form
function Main
{
try
{
[xml]$Script_Conf = Get-Content .\Main_Conf.xml -ErrorAction Stop
Write-Host "Конфигурационный файл приложения существует! Запускаю выполнение!" -ForegroundColor Green
$Plane_Pattern_Path = $Script_Conf.config.Plane_Pattern_Path
}
Catch [System.Management.Automation.ItemNotFoundException] {
Write-Host "В папке со скриптом не найден конфигурационный приложения!" -ForegroundColor Red
Write-Host "Переместите конфигурационный файл в папку, где будет запусакться скрипт!" -ForegroundColor Red
Write-Host "Прекращаю работу..." -ForegroundColor Red
return;
}
$Start_Window_syncHash = [hashtable]::Synchronized(@{ })
$Start_Window_Runspace = [runspacefactory]::CreateRunspace()
$Start_Window_Runspace.ApartmentState = "STA"
$Start_Window_Runspace.ThreadOptions = "ReuseThread"
$Start_Window_Runspace.Open()
$Start_Window_Runspace.SessionStateProxy.SetVariable("Start_Window_syncHash", $Start_Window_syncHash)
$Start_Window_Cmd = [PowerShell]::Create().AddScript({
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
param ([xml]$_config,
[string]$_plane_pattern_path)
Class StartModeling: System.Windows.Forms.Button
{
[System.Windows.Forms.Button]$Butt
[void] Init ()
{
$this.Location = [System.Drawing.Point]::new(100, 70)
$this.Size = [System.Drawing.Size]::new(200, 60)
$this.Font = [System.Drawing.Font]::new('Times New Roman', 14, [System.Drawing.FontStyle]::Bold)
$this.Text = 'Начать моделирование'
}
StartModeling ()
{
$this.Init()
}
[void] Check_Config ()
{
}
}
Class ShowMe: System.Windows.Forms.Button
{
[System.Windows.Forms.Button]$Butt
[void] Init ()
{
$this.Size = [System.Drawing.Size]::new(200, 60)
$this.Location = [System.Drawing.Point]::new(100, 250)
$this.Text = 'Автор'
$this.Font = [System.Drawing.Font]::new('Times New Roman', 14, [System.Drawing.FontStyle]::Bold)
$this.Add_Click({
$this.ShowAuthor()
})
}
ShowMe ()
{
$this.Init()
}
[Void] ShowAuthor ()
{
[System.Windows.Forms.MessageBox]::SHow("Автор: Я.Я. Месенгисер", "Автор")
}
}
Class ShowPatterns: System.Windows.Forms.Button
{
[System.Windows.Forms.Button]$Butt
[void] Init ()
{
$this.Size = [System.Drawing.Size]::new(200, 60)
$this.Location = [System.Drawing.Point]::new(100, 160)
$this.Font = [System.Drawing.Font]::new('Times New Roman', 14, [System.Drawing.FontStyle]::Bold)
$this.Text = 'Настроить шаблоны'
}
ShowPatterns ()
{
$this.Init()
}
}
Class MainForm: System.Windows.Forms.Form
{
[StartModeling]$StartModeling
[ShowMe]$ShowAuthor
[ShowPatterns]$ShowPatterns
[System.Windows.Forms.Form]$PatConf
[void] Init ()
{
$this.Size = [System.Drawing.Size]::new(400, 500)
$this.StartModeling = [StartModeling]::new()
$this.ShowAuthor = [ShowMe]::new()
$this.ShowPatterns = [ShowPatterns]::new()
$this.ShowPatterns.Add_Click({
$this.Parent.PatConf.ShowDialog()
})
$this.Controls.Add($this.StartModeling)
$this.Controls.Add($this.ShowAuthor)
$this.Controls.Add($this.ShowPatterns)
}
MainForm ([System.Windows.Forms.Form]$_patConf)
{
$this.Init()
$this.PatConf = $_patConf
}
}
Class CreatePattern: System.Windows.Forms.Button
{
[void] Init ()
{
$this.Location = [System.Drawing.Point]::new(50, 300)
$this.Size = [System.Drawing.Size]::new(250, 30)
$this.TextAlign = [System.Drawing.ContentAlignment]::MiddleCenter
$this.Text = "Создать шаблон"
}
CreatePattern ()
{
$this.Init()
}
}
Class UpdatePattern: System.Windows.Forms.Button
{
[bool]$IsShown
[void] Init ()
{
$this.Location = [System.Drawing.Point]::new(370, 300)
$this.Size = [System.Drawing.Size]::new(250, 30)
$this.TextAlign = [System.Drawing.ContentAlignment]::MiddleCenter
$this.Text = "Просмотр шаблона"
}
UpdatePattern ()
{
$this.Init()
}
ViewPatternConf ([xml]$PatternConf, [System.Windows.Forms.DataGridView]$GetPatterns, [System.Windows.Forms.DataGridView]$UpdatePatterns)
{
$this.ClearPatternWindow($UpdatePatterns)
$Selected = $GetPatterns.SelectedCells.Count
if ($Selected -eq 1)
{
$this.Parent.UpdatePatterns.Visible = $true
$this.Parent.SavePattern.Visible = $true
$this.Parent.DeletePattern.Visible = $true
$PatternNum = $GetPatterns.CurrentCell.RowIndex
$this.UpdateRows([xml]$PatternConf, [System.Windows.Forms.DataGridView]$UpdatePatterns, $PatternNum)
}
if ($Selected -gt 1)
{
[System.Windows.Forms.MessageBox]::Show("Вы не можете выбрать более одного шаблона для редактирования!")
}
}
ClearPatternWindow ([System.Windows.Forms.DataGridView]$UpdatePatterns)
{
$Rows = $UpdatePatterns.Rows.Count
if ($Rows -gt 0)
{
for ($i = 0; $i -le $Rows - 1; $i++)
{
$UpdatePatterns.Rows.RemoveAt(0)
}
}
}
UpdateRows ([xml]$PatternConf, [System.Windows.Forms.DataGridView]$UpdatePatterns, [int]$PatternNum)
{
if ($PatternConf.Patterns.ChildNodes.Count -eq 1)
{
$UpdatePatterns.Rows.Add('Имя шаблона', $PatternConf.Patterns.Pattern.PatternName)
$UpdatePatterns.Rows.Add('Модель', $PatternConf.Patterns.Pattern.Model)
$UpdatePatterns.Rows.Add('Минимальная скорость полета', $PatternConf.Patterns.Pattern.MinSpeed)
$UpdatePatterns.Rows.Add('Максимальная скорость полета', $PatternConf.Patterns.Pattern.MaxSpeed)
$UpdatePatterns.Rows.Add('Максимальный прирост скорости (1 сек)', $PatternConf.Patterns.Pattern.SpeedAdjust)
$UpdatePatterns.Rows.Add('Максимальный сброс скорости (1 сек)', $PatternConf.Patterns.Pattern.SpeedDecrease)
$UpdatePatterns.Rows.Add('Максимальный угол поворота (1 сек)', $PatternConf.Patterns.Pattern.MaxRotAng)
}
if ($PatternConf.Patterns.ChildNodes.Count -gt 1)
{
$UpdatePatterns.Rows.Add('Имя шаблона', $PatternConf.Patterns.Pattern[$PatternNum].PatternName)
$UpdatePatterns.Rows.Add('Модель', $PatternConf.Patterns.Pattern[$PatternNum].Model)
$UpdatePatterns.Rows.Add('Минимальная скорость полета', $PatternConf.Patterns.Pattern[$PatternNum].MinSpeed)
$UpdatePatterns.Rows.Add('Максимальная скорость полета', $PatternConf.Patterns.Pattern[$PatternNum].MaxSpeed)
$UpdatePatterns.Rows.Add('Максимальный прирост скорости (1 сек)', $PatternConf.Patterns.Pattern[$PatternNum].SpeedAdjust)
$UpdatePatterns.Rows.Add('Максимальный сброс скорости (1 сек)', $PatternConf.Patterns.Pattern[$PatternNum].SpeedDecrease)
$UpdatePatterns.Rows.Add('Максимальный угол поворота (1 сек)', $PatternConf.Patterns.Pattern[$PatternNum].MaxRotAng)
}
}
}
Class SavePattern: System.Windows.Forms.Button
{
[void] Init()
{
$this.Location = [System.Drawing.Point]::new(50, 620)
$this.Size = [System.Drawing.Size]::new(250, 30)
$this.TextAlign = [System.Drawing.ContentAlignment]::MiddleCenter
$this.Text = "Сохранить шаблон"
$this.Visible = $false
}
SavePattern ()
{
$this.Init()
}
Request_Answer()
{
[System.Windows.Forms.DialogResult]$User_Answer = [System.Windows.Forms.MessageBox]::Show("Вы уверены ?", "Запрос подтверждения", [System.Windows.Forms.MessageBoxButtons]::YesNoCancel)
}
}
Class DeletePattern: System.Windows.Forms.Button
{
[void] Init ()
{
$this.Location = [System.Drawing.Point]::new(370, 620)
$this.Size = [System.Drawing.Size]::new(250, 30)
$this.TextAlign = [System.Drawing.ContentAlignment]::MiddleCenter
$this.Text = "Удалить шаблон"
$this.Visible = $false
}
DeletePattern ()
{
$this.Init()
}
}
Class GetPatterns: System.Windows.Forms.DataGridView
{
[void] Init()
{
$this.Location = [System.Drawing.Point]::new(50, 50)
$this.Size = [System.Drawing.Size]::new(570, 230)
$this.AllowUserToAddRows = $false
$this.AllowUserToDeleteRows = $false
}
GetPatterns ()
{
$this.Init()
}
}
Class UpdatePatterns: System.Windows.Forms.DataGridView
{
[void] Init()
{
$this.Location = [System.Drawing.Point]::new(50, 360)
$this.Size = [System.Drawing.Size]::new(570, 230)
$this.AllowUserToAddRows = $false
$this.AllowUserToDeleteRows = $false
$this.Visible = $false
}
UpdatePatterns ()
{
$this.Init()
}
}
Class PatternProperties: System.Windows.Forms.DataGridViewColumn
{
[void] Init ()
{
$this.Frozen = $true
$this.DefaultCellStyle.Alignment = [System.Windows.Forms.DataGridViewContentAlignment]::MiddleCenter
$this.CellTemplate = [System.Windows.Forms.DataGridViewTextBoxCell]::new()
$this.HeaderCell.Style.Alignment = [System.Windows.Forms.DataGridViewContentAlignment]::MiddleCenter
}
PatternProperties ()
{
$this.Init()
}
}
Class Main_Window: System.Windows.Forms.Form
{
[CreatePattern]$CreatPattern
[UpdatePattern]$UpdatePattern
[SavePattern]$SavePattern
[DeletePattern]$DeletePattern
[GetPatterns]$GetPatterns
[UpdatePatterns]$UpdatePatterns
[PatternProperties]$PatternProperty
[PatternProperties]$PatternName
[PatternProperties]$PatternHost
[xml]$PatternConf
[void] Init ()
{
$a = $this.PatternConf.Patterns.Pattern.Count
$this.Size = [System.Drawing.Size]::new(700, 800)
$this.BackColor = [System.Drawing.Color]::AliceBlue
$this.Add_load({
try
{
$_path = $_plane_pattern_path
$this.PatternConf = Get-Content $_path -ErrorAction Stop
}
catch [System.Management.Automation.ItemNotFoundException] {
[System.Windows.Forms.MessageBox]::Show("Файл шаблонов отсутствует! Переместите файл с шаблонами в папку, где находится скрипт, и перезапустите скрипт, или создайте шаблоны в интерфейсе!", "Внимание!")
}
if ($this.PatternConf.Patterns.ChildNodes.Count -eq 1)
{
$this.GetPatterns.Rows.Add($this.PatternConf.Patterns.Pattern.PatternName)
}
if ($this.PatternConf.Patterns.ChildNodes.Count -gt 1)
{
for ($i = 0; $i -lt $this.PatternConf.Patterns.Pattern.Count; $i++)
{
$this.GetPatterns.Rows.Add($this.PatternConf.Patterns.Pattern[$i].PatternName)
}
}
})
$this.CreatPattern = [CreatePattern]::new()
$this.Controls.Add($this.CreatPattern)
$this.UpdatePattern = [UpdatePattern]::new()
$this.Controls.Add($this.UpdatePattern)
$this.UpdatePattern.Add_Click({
$this.ViewPatternConf($this.Parent.PatternConf, $this.Parent.GetPatterns, $this.Parent.UpdatePatterns)
})
$this.SavePattern = [SavePattern]::new()
$this.Controls.Add($this.SavePattern)
$this.SavePattern.Add_Click({
$this.Request_Answer()
$this.Parent.UpdatePatterns.Visible = $false
$this.Visible = $false
$this.Parent.DeletePattern.Visible = $false
})
$this.DeletePattern = [DeletePattern]::new()
$this.Controls.Add($this.DeletePattern)
$this.GetPatterns = [GetPatterns]::new()
$this.Controls.Add($this.GetPatterns)
$this.UpdatePatterns = [UpdatePatterns]::new()
$this.Controls.Add($this.UpdatePatterns)
$this.PatternProperty = [PatternProperties]::new()
$this.PatternProperty.Width = 528
$this.PatternProperty.HeaderText = 'Название шаблона'
$this.PatternProperty.DataPropertyName = 'Pattern Property'
$this.PatternProperty.ReadOnly = $true
$this.PatternProperty.Name = 'PatternProperty'
$this.GetPatterns.Columns.Add($this.PatternProperty)
$this.PatternName = [PatternProperties]::new()
$this.PatternName.Width = 352
$this.PatternName.HeaderText = 'Параметр'
$this.PatternName.DataPropertyName = 'Pattern Name'
$this.PatternName.ReadOnly = $true
$this.PatternName.Name = 'Param'
$this.UpdatePatterns.Columns.Add($this.PatternName)
$this.PatternHost = [PatternProperties]::new()
$this.PatternHost.Width = 176
$this.PatternHost.HeaderText = 'Значение'
$this.PatternHost.DataPropertyName = 'Pattern Host'
$this.PatternHost.ReadOnly = $false
$this.PatternHost.Name = 'Host'
$this.UpdatePatterns.Columns.Add($this.PatternHost)
}
Main_Window ()
{
$this.Init()
}
} #::Main_Window
$Start_Window_syncHash.PatternConfigWindow = [Main_Window]::new()
$Start_Window_syncHash.Start_Window = [MainForm]::new($Start_Window_syncHash.PatternConfigWindow)
$Start_Window_syncHash.Start_Window.ShowDialog() | Out-Null
$Start_Window_syncHash.Error = $Error
})
$Start_Window_Cmd.AddArgument($Script_Conf) | Out-Null
$Start_Window_Cmd.AddArgument($Plane_Pattern_Path) | Out-Null
$Start_Window_Cmd.Runspace = $Start_Window_Runspace
$Start_Window_data = $Start_Window_Cmd.BeginInvoke()
Start-Sleep 4
$Start_Window_data
}
Main