109 lines
3.2 KiB
C#
109 lines
3.2 KiB
C#
using System;
|
||
using System.Globalization;
|
||
using System.Windows;
|
||
|
||
namespace Lab2
|
||
{
|
||
/// <summary>
|
||
/// Interaction logic for CreateLawnmower.xaml
|
||
/// </summary>
|
||
public partial class CreateLawnmower : Window
|
||
{
|
||
/// <summary>
|
||
/// Определяет, сохранять ли изменения
|
||
/// </summary>
|
||
private bool _save;
|
||
/// <summary>
|
||
/// Доступность полей формы
|
||
/// </summary>
|
||
private readonly bool _readOnly;
|
||
/// <summary>
|
||
/// Газонокосилка для редактирования
|
||
/// </summary>
|
||
private Lawnmower _lawnmower;
|
||
|
||
/// <summary>
|
||
/// Конструктор
|
||
/// </summary>
|
||
/// <param name="parLawnmower">Газонокосилка для редактирования</param>
|
||
/// <param name="parReadOnly">Доступность полей формы</param>
|
||
/// <exception cref="ArgumentNullException">Выбрасывается, когда газонокосилка равна null</exception>
|
||
public CreateLawnmower(Lawnmower parLawnmower, bool parReadOnly = false)
|
||
{
|
||
if (parLawnmower == null)
|
||
throw new ArgumentNullException(nameof(parLawnmower));
|
||
|
||
InitializeComponent();
|
||
|
||
_materialComboBox.ItemsSource = Enum.GetValues(typeof(Material));
|
||
|
||
_lawnmower = parLawnmower;
|
||
_readOnly = parReadOnly;
|
||
DataContext = _lawnmower;
|
||
|
||
Title = $"Lawnmower {_lawnmower.Id}";
|
||
|
||
SetEnabled(!_readOnly);
|
||
|
||
if (_readOnly)
|
||
_saveButton.Content = "Ok";
|
||
}
|
||
|
||
/// <summary>
|
||
/// Устанавливает доступность полей формы
|
||
/// </summary>
|
||
/// <param name="parEnabled">Доступность</param>
|
||
private void SetEnabled(bool parEnabled)
|
||
{
|
||
_nameTextBox.IsEnabled = parEnabled;
|
||
_materialComboBox.IsEnabled = parEnabled;
|
||
_weightTextBox.IsEnabled = parEnabled;
|
||
_powerTextBox.IsEnabled = parEnabled;
|
||
_fuelСapacityTextBox.IsEnabled = parEnabled;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Синхронизирует данные с полей формы
|
||
/// </summary>
|
||
private void SyncData()
|
||
{
|
||
_lawnmower.Name = _nameTextBox.Text;
|
||
_lawnmower.Material = (Material)_materialComboBox.SelectedItem;
|
||
_lawnmower.Weight = Convert.ToDouble(_weightTextBox.Text, CultureInfo.CurrentCulture);
|
||
_lawnmower.Power = Convert.ToUInt32(_powerTextBox.Text);
|
||
_lawnmower.FuelCapacity = (float)Convert.ToDouble(_fuelСapacityTextBox.Text, CultureInfo.CurrentCulture);
|
||
}
|
||
|
||
/// <summary>
|
||
/// Обработчик нажатия на кнопку "Save"
|
||
/// </summary>
|
||
private void SaveButton_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
_save = true;
|
||
|
||
Close();
|
||
}
|
||
|
||
/// <summary>
|
||
/// Обработчик события закрытия окна
|
||
/// </summary>
|
||
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
||
{
|
||
if (!_save)
|
||
return;
|
||
|
||
try
|
||
{
|
||
if (!_readOnly)
|
||
SyncData();
|
||
DialogResult = true;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageBox.Show(ex.Message);
|
||
e.Cancel = true;
|
||
}
|
||
}
|
||
}
|
||
}
|