2024-12-14 11:21:47 +04:00
|
|
|
|
using laba3.Core;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
using System.Data;
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
|
|
|
|
using static laba3.Core.Menu;
|
|
|
|
|
|
|
|
|
|
namespace ProgLab1.GUI
|
|
|
|
|
{
|
|
|
|
|
public partial class MenuForm : Form
|
|
|
|
|
{
|
|
|
|
|
public MenuForm(Menu consoleMenu)
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
2024-12-14 13:32:15 +04:00
|
|
|
|
this.Text = "Меню";
|
2024-12-14 11:21:47 +04:00
|
|
|
|
this.Width = 800;
|
|
|
|
|
this.Height = 600;
|
|
|
|
|
AddMenu(consoleMenu);
|
2024-12-22 11:40:58 +04:00
|
|
|
|
this.FormClosing += new FormClosingEventHandler((object sender, FormClosingEventArgs e) => { e.Cancel = !Dialogs.Exit(); });
|
2024-12-14 12:09:33 +04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public MenuForm(Menu consoleMenu, Action onAny)
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
2024-12-14 13:32:15 +04:00
|
|
|
|
this.Text = "Меню";
|
2024-12-14 12:09:33 +04:00
|
|
|
|
this.Width = 800;
|
|
|
|
|
this.Height = 600;
|
|
|
|
|
AddMenu(consoleMenu, onAny);
|
2024-12-22 11:40:58 +04:00
|
|
|
|
this.FormClosing += new FormClosingEventHandler((object sender, FormClosingEventArgs e) => { e.Cancel = !Dialogs.Exit(); });
|
2024-12-14 12:09:33 +04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SwitchToForm(Form form)
|
|
|
|
|
{
|
|
|
|
|
form.Show();
|
|
|
|
|
this.Hide();
|
2024-12-14 11:21:47 +04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Adds menu to GUI
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="consoleMenu">TUI menu</param>
|
|
|
|
|
private void AddMenu(Menu consoleMenu)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
FlowLayoutPanel buttonPanel = new FlowLayoutPanel
|
|
|
|
|
{
|
|
|
|
|
Dock = DockStyle.Fill, // Растягиваем на всю форму
|
|
|
|
|
FlowDirection = FlowDirection.TopDown, // Кнопки располагаются сверху вниз
|
|
|
|
|
WrapContents = false // Запрет переноса
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Label menuLabel = new Label
|
|
|
|
|
{
|
|
|
|
|
Text = consoleMenu.GetTitle(), // Текст заголовка
|
|
|
|
|
Font = new System.Drawing.Font("Arial", 16, System.Drawing.FontStyle.Bold), // Стиль шрифта
|
|
|
|
|
TextAlign = System.Drawing.ContentAlignment.MiddleCenter, // Выравнивание текста по центру
|
|
|
|
|
Dock = DockStyle.Top, // Заголовок сверху
|
|
|
|
|
Height = 40 // Высота заголовка
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
buttonPanel.Controls.Add(menuLabel);
|
|
|
|
|
|
|
|
|
|
foreach (MenuOption option in consoleMenu.GetOptions())
|
|
|
|
|
{
|
|
|
|
|
Button button = new Button
|
|
|
|
|
{
|
|
|
|
|
Text = option.Name,
|
|
|
|
|
Width = buttonPanel.Width - 10,
|
|
|
|
|
Height = 40,
|
|
|
|
|
Margin = new Padding(5),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Связываем обработчик с OnSelect из консольного меню
|
|
|
|
|
button.Click += (sender, e) => option.Action();
|
|
|
|
|
|
|
|
|
|
buttonPanel.Controls.Add(button);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.Controls.Add(buttonPanel);
|
|
|
|
|
}
|
2024-12-14 12:09:33 +04:00
|
|
|
|
|
|
|
|
|
private void AddMenu(Menu consoleMenu, Action onAny)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
FlowLayoutPanel buttonPanel = new FlowLayoutPanel
|
|
|
|
|
{
|
|
|
|
|
Dock = DockStyle.Fill, // Растягиваем на всю форму
|
|
|
|
|
FlowDirection = FlowDirection.TopDown, // Кнопки располагаются сверху вниз
|
|
|
|
|
WrapContents = false // Запрет переноса
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Label menuLabel = new Label
|
|
|
|
|
{
|
|
|
|
|
Text = consoleMenu.GetTitle(), // Текст заголовка
|
|
|
|
|
Font = new System.Drawing.Font("Arial", 16, System.Drawing.FontStyle.Bold), // Стиль шрифта
|
|
|
|
|
TextAlign = System.Drawing.ContentAlignment.MiddleCenter, // Выравнивание текста по центру
|
|
|
|
|
Dock = DockStyle.Top, // Заголовок сверху
|
|
|
|
|
Height = 40 // Высота заголовка
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
buttonPanel.Controls.Add(menuLabel);
|
|
|
|
|
|
|
|
|
|
foreach (MenuOption option in consoleMenu.GetOptions())
|
|
|
|
|
{
|
|
|
|
|
Button button = new Button
|
|
|
|
|
{
|
|
|
|
|
Text = option.Name,
|
|
|
|
|
Width = buttonPanel.Width - 10,
|
|
|
|
|
Height = 40,
|
|
|
|
|
Margin = new Padding(5),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Связываем обработчик с OnSelect из консольного меню
|
|
|
|
|
button.Click += (sender, e) => option.Action();
|
|
|
|
|
button.Click += (sender, e) => onAny();
|
|
|
|
|
|
|
|
|
|
buttonPanel.Controls.Add(button);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.Controls.Add(buttonPanel);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void FormClosingHandler(object sender, FormClosingEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
// Предотвращаем закрытие окна
|
|
|
|
|
DialogResult result = MessageBox.Show("Вы уверены, что хотите закрыть окно?", "Подтверждение", MessageBoxButtons.YesNo);
|
|
|
|
|
|
|
|
|
|
if (result == DialogResult.No)
|
|
|
|
|
{
|
|
|
|
|
e.Cancel = true; // Отменяем закрытие окна
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
e.Cancel = false; // Разрешаем закрытие окна
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-12-14 11:21:47 +04:00
|
|
|
|
}
|
|
|
|
|
}
|