Component-oriented-programming/LibraryWinFormsApp/FormBook.cs

178 lines
4.3 KiB
C#

using DocumentFormat.OpenXml.Office2010.Excel;
using Library_var_4_lab_1;
using LibraryContracts.StorageContracts;
using LibraryDatabase.Models;
using LibraryDatabase.Storages;
using LibraryDataModels.Dtos;
using LibraryDataModels.Views;
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.Controls.Primitives;
using System.Windows.Forms;
using static LibraryUtils.ImageConverter.ImageConverter;
namespace LibraryWinFormsApp
{
public partial class FormBook : Form
{
public int _id { get; set; } = -1;
private string _cover { get; set; } = string.Empty;
private BookView? _book = null;
private IBookStorage _bookStorage;
private IAuthorStorage _authorStorage;
public FormBook(IBookStorage bookStorage, IAuthorStorage authorStorage)
{
InitializeComponent();
_bookStorage = bookStorage;
_authorStorage = authorStorage;
}
private void FormBook_Load(object sender, EventArgs e)
{
LoadData();
}
private void LoadData()
{
try
{
releaseDateField.Template = @"^([1-9]|[12][0-9]|3[01]) (января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря) [0-9]{4}$";
var authors = _authorStorage.GetFullList();
if (authors != null)
{
foreach (var author in authors)
{
authorField.Input(author.Name);
}
}
if (_id != -1)
{
_book = _bookStorage.GetElement(new BookDto()
{
Id = _id,
});
if (_book != null)
{
_cover = _book.BookCover;
nameField.Text = _book.Name;
releaseDateField.Date = _book.ReleaseDate;
authorField.SelectedItem = _book.Author;
try
{
pictureBox.Image = StringToImage(_cover);
}
catch
{
return;
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void FormBook_FormClosing(object sender, FormClosingEventArgs e)
{
try
{
bool Changed = false;
if (_book == null)
{
if (!string.IsNullOrEmpty(_cover))
Changed = true;
if (!string.IsNullOrEmpty(nameField.Text))
Changed = true;
if (!string.IsNullOrEmpty(releaseDateField.Text))
Changed = true;
if (!string.IsNullOrEmpty(authorField.Text))
Changed = true;
}
else
{
if (_cover != _book.BookCover)
Changed = true;
if (nameField.Text != _book.Name)
Changed = true;
if (releaseDateField.Date != _book.ReleaseDate)
Changed = true;
if (authorField.SelectedItem != _book.Author)
Changed = true;
}
if (Changed)
{
DialogResult dialogResult = MessageBox.Show("Изменения не были сохранены. Всё равно выйти?", "Внимание!", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.No)
{
e.Cancel = true;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void saveButton_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrEmpty(_cover))
{
throw new Exception("Выберите обложку");
}
var book = new BookDto()
{
Name = nameField.Text,
BookCover = _cover,
Author = authorField.SelectedItem,
ReleaseDate = releaseDateField.Date,
};
if (_id != -1)
{
book.Id = _id;
_book = _bookStorage.Update(book);
}
else
{
_book = _bookStorage.Insert(book);
}
_id = _book?.Id ?? -1;
_cover = _book?.BookCover ?? string.Empty;
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void changeCoverButton_Click(object sender, EventArgs e)
{
var dialog = new OpenFileDialog();
dialog.Title = "Выберите изображение";
dialog.Filter = "Изображения|*.jpg;*.jpeg;*.png;*.bmp";
if (dialog.ShowDialog() == DialogResult.OK)
{
var image_new = new Bitmap(dialog.FileName);
pictureBox.Image = image_new;
_cover = ImageToString(image_new);
}
dialog.Dispose();
}
}
}