PIbd-23_Vrazhkin_S_A_Electr.../lab1/FormLocomotivCollection.cs
2023-12-12 13:58:32 +04:00

181 lines
7.7 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.Windows.Forms;
using ElectricLocomotive.Exceptions;
using Serilog;
namespace ElectricLocomotive;
public partial class FormLocomotivCollection : Form {
private readonly LocosGenericStorage _storage;
public FormLocomotivCollection() {
InitializeComponent();
_storage = new(collectionPictureBox.Width, collectionPictureBox.Height);
}
private void ReloadObjects() {
int index = storageListBox.SelectedIndex;
storageListBox.Items.Clear();
for (int i = 0; i < _storage.Keys.Count; i++) {
storageListBox.Items.Add(_storage.Keys[i].Name);
}
if (storageListBox.Items.Count > 0 && (index == -1 || index
>= storageListBox.Items.Count)) {
storageListBox.SelectedIndex = 0;
}
else if (storageListBox.Items.Count > 0 && index > -1 &&
index < storageListBox.Items.Count) {
storageListBox.SelectedIndex = index;
}
}
private void addLocomotiv_Click(object sender, EventArgs e) {
if (storageListBox.SelectedIndex == -1) {
return;
}
var obj = _storage[storageListBox.SelectedItem.ToString() ?? string.Empty];
if (obj == null) {
return;
}
FormLocoConfig form = new();
form.Show();
Action<DrawingLocomotiv>? monorailDelegate = new((m) => {
try {
bool q = obj + m;
MessageBox.Show("Объект добавлен");
Log.Information($"Добавлен объект в коллекцию {storageListBox.SelectedItem.ToString() ?? string.Empty}");
m.ChangePictureBoxSize(collectionPictureBox.Width, collectionPictureBox.Height);
collectionPictureBox.Image = obj.ShowLocos();
}
catch (StorageOverflowException ex) {
Log.Warning($"Коллекция {storageListBox.SelectedItem.ToString() ?? string.Empty} переполнена");
MessageBox.Show(ex.Message);
}
catch (ArgumentException ex) {
Log.Warning($"Добавляемый объект уже существует в коллекции {storageListBox.SelectedItem.ToString() ?? string.Empty}");
MessageBox.Show("Добавляемый объект уже сущесвует в коллекции");
}
});
form.AddEvent(monorailDelegate);
}
private void deleteLoco_Click(object sender, EventArgs e) {
if (storageListBox.SelectedIndex == -1) {
return;
}
var obj = _storage[storageListBox.SelectedItem.ToString() ??
string.Empty];
if (obj == null) {
return;
}
if (MessageBox.Show("Удалить объект?", "Удаление",
MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) {
return;
}
try {
int pos = Convert.ToInt32(locoIndexInput.Text);
var q = obj - pos;
MessageBox.Show("Объект удален");
Log.Information($"Удален объект из коллекции {storageListBox.SelectedItem.ToString() ?? string.Empty} по номеру {pos}");
collectionPictureBox.Image = obj.ShowLocos();
}
catch (LocoNotFoundException ex) {
Log.Warning($"Не получилось удалить объект из коллекции {storageListBox.SelectedItem.ToString() ?? string.Empty}");
MessageBox.Show(ex.Message);
}
catch (FormatException ex) {
Log.Warning($"Было введено не число");
MessageBox.Show("Введите число");
}
}
private void refreshCollection_Click(object sender, EventArgs e) {
if (storageListBox.SelectedIndex == -1) {
return;
}
var obj = _storage[storageListBox.SelectedItem.ToString() ??
string.Empty];
if (obj == null) {
return;
}
collectionPictureBox.Image = obj.ShowLocos();
}
private void storagesListBox_SelectedIndexChanged(object sender, EventArgs e) {
collectionPictureBox.Image =
_storage[storageListBox.SelectedItem?.ToString() ?? string.Empty]?.ShowLocos();
}
private void delStorageButton_Click(object sender, EventArgs e) {
if (storageListBox.SelectedIndex == -1) {
return;
}
if (MessageBox.Show($"Удалить объект{storageListBox.SelectedItem}?", "Удаление", MessageBoxButtons.YesNo,
MessageBoxIcon.Question) == DialogResult.Yes) {
string name = storageListBox.SelectedItem.ToString() ?? string.Empty;
_storage.DelSet(name);
ReloadObjects();
Log.Information($"Удален набор: {name}");
}
}
private void addStorageButton_Click(object sender, EventArgs e) {
if (string.IsNullOrEmpty(storageIndexInput.Text)) {
MessageBox.Show("Не все данные заполнены", "Ошибка",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
_storage.AddSet(storageIndexInput.Text);
ReloadObjects();
Log.Information($"Добавлен набор: {storageIndexInput.Text}");
}
private void SaveToolStripMenuItem_Click(object sender, EventArgs e) {
if (saveFileDialog.ShowDialog() == DialogResult.OK) {
try {
_storage.SaveData(saveFileDialog.FileName);
MessageBox.Show("Сохранение прошло успешно",
"Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
Log.Information($"Файл {saveFileDialog.FileName} успешно сохранен");
}
catch (Exception ex) {
Log.Warning("Не удалось сохранить");
MessageBox.Show($"Не сохранилось: {ex.Message}",
"Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void LoadToolStripMenuItem_Click(object sender, EventArgs e) {
if (loadFileDialog.ShowDialog() == DialogResult.OK) {
try {
_storage.LoadData(loadFileDialog.FileName);
MessageBox.Show("Загрузка прошла успешно",
"Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
Log.Information($"Файл {loadFileDialog.FileName} успешно загружен");
foreach (var collection in _storage.Keys) {
storageListBox.Items.Add(collection);
}
ReloadObjects();
}
catch (Exception ex) {
Log.Warning("Не удалось загрузить");
MessageBox.Show($"Не загрузилось: {ex.Message}",
"Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void CompareLocos(IComparer<DrawingLocomotiv?> comparer) {
if (storageListBox.SelectedIndex == -1) {
return;
}
var obj = _storage[storageListBox.SelectedItem.ToString() ??
string.Empty];
if (obj == null) {
return;
}
obj.Sort(comparer);
collectionPictureBox.Image = obj.ShowLocos();
}
private void ButtonSortByColor_Click(object sender, EventArgs e) => CompareLocos(new LocomotivCompareByType());
private void ButtonSortByType_Click(object sender, EventArgs e) => CompareLocos(new LocomotivCompareByColor());
}