PIbd-11_Tarasov_V.D._Simple/ProjectMonorail/FormMonorailCollection.cs
2024-04-22 13:33:00 +04:00

288 lines
11 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Microsoft.Extensions.Logging;
using ProjectMonorail.Scripts.Monorail.CollectionGenericObjects;
using ProjectMonorail.Scripts.Monorail.Drawnings;
namespace ProjectMonorail
{
/// <summary>
/// Форма работы с компанией и ее коллекцией
/// </summary>
public partial class FormMonorailCollection : Form
{
/// <summary>
/// Логер
/// </summary>
private readonly ILogger _logger;
/// <summary>
/// Хранилище коллекций
/// </summary>
private readonly StorageCollection<DrawingMonorail> _storageCollection;
/// <summary>
/// Компания
/// </summary>
private AbstractCompany? _company = null;
/// <summary>
/// Конструктор
/// </summary>
public FormMonorailCollection(ILogger<FormMonorailCollection> logger)
{
InitializeComponent();
_storageCollection = new StorageCollection<DrawingMonorail>();
_logger = logger;
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ComboBoxSelectorCompany_SelectedIndexChanged(object sender, EventArgs e)
{
switch (comboBoxSelectorCompany.Text)
{
case "Хранилище":
_company = new DepotSharingService(pictureBox.Width, pictureBox.Height, new MassiveGenericObjects<DrawingMonorail>());
break;
}
}
private void ButtonAddMonorail_Click(object sender, EventArgs e)
{
FormMonorailConfig form = new FormMonorailConfig();
form.Show();
form.AddEventListener_Monorail(SetMonorail);
}
private void SetMonorail(DrawingMonorail monorail)
{
try
{
if (monorail == null || _company == null) return;
if (_company + monorail != -1)
{
MessageBox.Show("Объект добавлен");
pictureBox.Image = _company.Show();
}
}
catch (Exception ex)
{
MessageBox.Show("Не удалось добавить объект");
_logger.LogError("Ошибка {Message}", ex.Message);
}
}
private void buttonRemoveMonorail_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrEmpty(maskedTextBox.Text) || _company == null) throw new Exception("Входные дынне пустые");
if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return;
int position = Convert.ToInt32(maskedTextBox.Text);
if (_company - position != null)
{
MessageBox.Show("Объект удален");
pictureBox.Image = _company.Show();
}
}
catch(Exception ex)
{
MessageBox.Show("Не удалось удалить объект");
_logger.LogError("Ошибка {Message}", ex.Message);
}
}
private void ButtonGoToCheck_Click(object sender, EventArgs e)
{
if (_company == null) return;
DrawingMonorail? monorail = null;
int coutner = 100;
while (monorail == null && coutner-- > 0)
{
monorail = _company.GetRandomObject();
}
if (monorail == null) return;
FormMonorail form = new FormMonorail()
{
SetMonorail = monorail
};
form.ShowDialog();
}
private void ButtonRefresh_Click(object sender, EventArgs e)
{
if (_company == null) return;
pictureBox.Image = _company.Show();
}
/// <summary>
/// Обновление списка в listBoxCollection
/// </summary>
private void RerfreshListBoxItems()
{
listBoxCollection.Items.Clear();
for (int i = 0; i < _storageCollection.Keys?.Count; ++i)
{
string? colName = _storageCollection.Keys?[i];
if (!string.IsNullOrEmpty(colName))
{
listBoxCollection.Items.Add(colName);
}
}
}
/// <summary>
/// Добавление коллекции
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonCollectionAdd_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrEmpty(textBoxCollectionName.Text) || (!radioButtonList.Checked && !radioButtonMassive.Checked))
{
MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
CollectionType collectionType = CollectionType.None;
if (radioButtonMassive.Checked)
{
collectionType = CollectionType.Massive;
}
else if (radioButtonList.Checked)
{
collectionType = CollectionType.List;
}
_storageCollection.AddCollection(textBoxCollectionName.Text,
collectionType);
RerfreshListBoxItems();
}
catch (Exception ex)
{
_logger.LogError("Ошибка {Message}", ex.Message);
}
}
/// <summary>
/// Удаление коллекции
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonCollectionDelete_Click(object sender, EventArgs e)
{
try {
// TODO прописать логику удаления элемента из коллекции
// нужно убедиться, что есть выбранная коллекция
// спросить у пользователя через MessageBox, что он подтверждает, что хочет удалить запись
// удалить и обновить ListBox
if (listBoxCollection.SelectedItem == null || listBoxCollection.SelectedIndex < 0)
{
MessageBox.Show("Коллекция для удаления не выбрана");
return;
}
if (MessageBox.Show("Удалить коллекцию?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return;
_storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString());
RerfreshListBoxItems();
}
catch (Exception ex)
{
_logger.LogError("Ошибка {Message}", ex.Message);
}
}
/// <summary>
/// Создание компании
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonCreateCompany_Click(object sender, EventArgs e)
{
try
{
if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItem == null)
{
MessageBox.Show("Коллекция не выбрана");
return;
}
ICollectionGenericObjects<DrawingMonorail>? collection =
_storageCollection[listBoxCollection.SelectedItem.ToString() ?? string.Empty];
if (collection == null)
{
MessageBox.Show("Коллекция не проинициализирована");
return;
}
switch (comboBoxSelectorCompany.Text)
{
case "Хранилище":
_company = new DepotSharingService(pictureBox.Width, pictureBox.Height, collection);
break;
}
panelCompanyTools.Enabled = true;
RerfreshListBoxItems();
}
catch (Exception ex)
{
_logger.LogError("Ошибка {Message}", ex.Message);
}
}
/// <summary>
/// Обработка нажатия "Сохранения"
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SaveToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
_storageCollection.SaveData(saveFileDialog.FileName);
MessageBox.Show("Сохранение прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
_logger.LogInformation("Сохранение прошло успешно в файл {filename}", saveFileDialog.FileName);
}
}
catch (Exception ex)
{
MessageBox.Show("Не сохранилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
_logger.LogError("Ошибка {Message}", ex.Message);
}
}
/// <summary>
/// Обработка нажатия "Загрузки"
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void LoadToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
_storageCollection.LoadData(openFileDialog.FileName);
MessageBox.Show("Загрузка прошла успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
RerfreshListBoxItems();
_logger.LogInformation("Загрузка успешна завершена");
}
}
catch(Exception ex)
{
MessageBox.Show("Не загрузилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
_logger.LogError("Ошибка {Message}", ex.Message);
}
}
}
}