PIbd-21_MalafeevL.S._Cruise.../Cruiser/FormCruiserCollection.cs

272 lines
11 KiB
C#
Raw Permalink 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 System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Reflection.Metadata.Ecma335;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Cruiser.Drawing;
using Cruiser.Generics;
using Cruiser.MovementStrategy;
using Cruiser.Exceptions;
using Microsoft.Extensions.Logging;
using System.Xml.Linq;
namespace Cruiser
{
/// <summary>
/// Форма для работы с набором объектов класса DrawingCruiser
/// </summary>
public partial class FormCruiserCollection : Form
{
/// <summary>
/// Набор объектов
/// </summary>
private readonly CruisersGenericStorage _storage;
/// <summary>
/// Логер
/// </summary>
private readonly ILogger _logger;
/// <summary>
/// Конструктор
/// </summary>
public FormCruiserCollection(ILogger<FormCruiserCollection> logger)
{
InitializeComponent();
_storage = new CruisersGenericStorage(pictureBoxCollection.Width, pictureBoxCollection.Height);
_logger = logger;
}
/// <summary>
/// Заполнение listBoxObjects
/// </summary>
private void ReloadObjects()
{
int index = listBoxStorages.SelectedIndex;
listBoxStorages.Items.Clear();
for (int i = 0; i < _storage.Keys.Count; i++)
{
listBoxStorages.Items.Add(_storage.Keys[i]);
}
if (listBoxStorages.Items.Count > 0 && (index == -1 || index >= listBoxStorages.Items.Count))
{
listBoxStorages.SelectedIndex = 0;
}
else if (listBoxStorages.Items.Count > 0 && index > -1 && index < listBoxStorages.Items.Count)
{
listBoxStorages.SelectedIndex = index;
}
}
/// <summary>
/// Добавление набора в коллекцию
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonAddObject_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBoxStorageName.Text))
{
_logger.LogWarning($"Обновление набора не удалось (не все данные заполнены)");
MessageBox.Show("Придумайте имя набору", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
_storage.AddSet(textBoxStorageName.Text);
ReloadObjects();
_logger.LogInformation($"Добавлен набор:{textBoxStorageName.Text}");
}
/// <summary>
/// Удаление набора
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonDelObject_Click(object sender, EventArgs e)
{
if (listBoxStorages.SelectedIndex == -1)
{
_logger.LogWarning($"Удаление набора не удалось (индекс вне границ)");
return;
}
if (MessageBox.Show($"Удалить объект{listBoxStorages.SelectedItem}?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
string name = listBoxStorages.SelectedItem.ToString() ?? string.Empty; //добавил для удаления повторяющегося кода
_storage.DelSet(name);
ReloadObjects();
_logger.LogInformation($"Удален набор: {name}");
}
}
/// <summary>
/// Выбор набора
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ListBoxObjects_SelectedIndexChanged(object sender,
EventArgs e)
{
pictureBoxCollection.Image = _storage[listBoxStorages.SelectedItem?.ToString() ?? string.Empty]?.ShowCruiser();
}
/// <summary>
/// Добавление объекта в набор
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void AddCruiser(DrawingCruiser cruiser)
{
if (listBoxStorages.SelectedIndex == -1)
{
_logger.LogWarning($"Добавление круизера не удалось (индекс вне границ)");
return;
}
var obj = _storage[listBoxStorages.SelectedItem.ToString() ?? string.Empty];
if (obj == null)
{
_logger.LogWarning($"Добавление круизера не удалось (нет хранилища)");
return;
}
try
{
if ((obj + cruiser))
{
MessageBox.Show("Объект добавлен");
_logger.LogInformation($"Добавление круизера успешно {listBoxStorages.SelectedItem.ToString()}");
pictureBoxCollection.Image = obj.ShowCruiser();
}
else
{
MessageBox.Show("Не удалось добавить объект");
}
}
catch (ApplicationException ex)
{
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// Удаление объекта из набора
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonRemoveCar_Click(object sender, EventArgs e)
{
if (listBoxStorages.SelectedIndex == -1)
{
_logger.LogWarning($"Удаление круизера не удалось (индекс вне границ)");
return;
}
var obj = _storage[listBoxStorages.SelectedItem.ToString() ?? string.Empty];
if (obj == null)
{
_logger.LogWarning($"Удаление круизера не удалось (нет хранилища)");
return;
}
if (MessageBox.Show("Удалить объект?", "Удаление",
MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
{
_logger.LogWarning($"Удаление круизера не удалось (выбран вариант 'Нет')");
return;
}
int pos = Convert.ToInt32(textBoxNumber.Text);
try
{
if (obj - pos != null)
{
_logger.LogInformation($"Удаление круизера успешно {listBoxStorages.SelectedItem.ToString()} {pos}");
MessageBox.Show("Объект удален");
pictureBoxCollection.Image = obj.ShowCruiser();
}
else
{
_logger.LogWarning($"Удаление круизера не удалось(обьект не найден)");
MessageBox.Show("Не удалось удалить объект");
}
}
catch (CruiserNotFoundException ex)
{
_logger.LogWarning($"Удаление круизера не удалось {ex.Message}");
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// Обновление рисунка по набору
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonRefreshCollection_Click(object sender, EventArgs e)
{
if (listBoxStorages.SelectedIndex == -1)
{
_logger.LogWarning($"Обновление объектов не удалось (индекс вне границ)");
return;
}
var obj = _storage[listBoxStorages.SelectedItem.ToString() ??
string.Empty];
if (obj == null)
{
_logger.LogWarning($"Обновление объектов не удалось (нет хранилища)");
return;
}
_logger.LogInformation($"Обновление объектов успешно");
pictureBoxCollection.Image = obj.ShowCruiser();
}
/// <summary>
/// Добавление объекта
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonAddCruiser_Click(object sender, EventArgs e)
{
var formCruiserConfig = new FormCruiserConfig();
formCruiserConfig.Show();
formCruiserConfig.AddEvent(AddCruiser);
}
/// <summary>
/// Обработка нажатия "Сохранение"
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SaveToolStripMenuItem_Click(object sender, EventArgs e)
{
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
_storage.SaveData(saveFileDialog.FileName);
_logger.LogInformation($"Cохранение в файл успешно");
MessageBox.Show("Сохранение прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
} catch (Exception ex)
{
_logger.LogWarning($"Сохранение не удалось {ex.Message}");
MessageBox.Show("Не сохранилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
/// <summary>
/// Обработка нажатия "Загрузка"
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void LoadToolStripMenuItem_Click(object sender, EventArgs e)
{
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
_storage.LoadData(openFileDialog.FileName);
_logger.LogInformation($"Загрузка из файла успешна");
MessageBox.Show("Загрузка прошла успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
ReloadObjects();
} catch (Exception ex)
{
MessageBox.Show("Не загрузилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
_logger.LogWarning($"Загрузка не удалась {ex.Message}");
}
}
}
}
}