using System;
using System.Windows;
using System.Collections.ObjectModel;
using Patterns;
using System.Collections.Generic;
using System.Linq;
namespace Lab2
{
///
/// Interaction logic for MainWindow.xaml
///
public partial class MainWindow : Window
{
///
/// Коллекция инструментов
///
private ObservableCollection _tools = new();
///
/// Случайный генератор
///
private Random _random = new();
///
/// Список фабрик
///
private List _factoryMethods = new()
{
new ScissorsAndTrimmerFactoryMethod(),
new ScytheAndLawnmowerFactoryMethod(),
new PrototypeFactoryMethod(),
};
///
/// Текущая фабрика
///
private IToolFactory _currentFactory;
///
/// Выбранный фабричный метод
///
private IToolFactoryMethod _selectedMethod;
///
/// Список фабрик
///
public ICollection FactoryMethods => _factoryMethods;
///
/// Выбранный фабричный метод
///
public IToolFactoryMethod SelectedMethod
{
get => _selectedMethod;
set
{
_selectedMethod = value;
_currentFactory = value.CreateFactory();
}
}
///
/// Конструктор
///
public MainWindow()
{
InitializeComponent();
SelectedMethod = _factoryMethods.First();
DataContext = this;
_dataGrid.ItemsSource = _tools;
}
///
/// Проверяет, является ли индекс валидным
///
/// Индекс
/// True, если индекс валиден, иначе - false
private bool IsValidIndex(int parIndex)
{
return _tools.Count > 0 && parIndex >= 0 && parIndex < _tools.Count;
}
///
/// Возвращает выбранный инструмент
///
/// Выбранный инструмент
private Tool? GetSelectedItem()
{
if (!IsValidIndex(_dataGrid.SelectedIndex))
return null;
return _tools[_dataGrid.SelectedIndex];
}
///
/// Генерирует случайный триммер
///
/// Случайный триммер
private Trimmer GenerateTrimmer()
{
return new Trimmer($"Tr{_random.Next(0, 100)}", (Material)_random.Next(0, 3), _random.Next(1, 100), (uint)_random.Next(1, 100));
}
///
/// Генерирует случайную газонокосилку
///
/// Случайная газонокосилка
private Lawnmower GenerateLawnmower()
{
return new Lawnmower($"La{_random.Next(0, 100)}", (Material)_random.Next(0, 3), _random.Next(1, 100), (uint)_random.Next(1, 100), _random.Next(1, 100));
}
///
/// Генерирует случайные ножницы
///
/// Случайные ножницы
private Scissors GenerateScissors()
{
return new Scissors($"Si{_random.Next(0, 100)}", (Material)_random.Next(0, 3), _random.Next(1, 100), (uint)_random.Next(1, 100), _random.Next(1, 100));
}
///
/// Генерирует случайную косу
///
/// Случайная коса
private Scythe GenerateScythe()
{
return new Scythe($"Sc{_random.Next(0, 100)}", (Material)_random.Next(0, 3), _random.Next(1, 100), (uint)_random.Next(1, 100), (BladeType)_random.Next(0, 3));
}
///
/// Обработчик события нажатия на кнопку "Add Manual Tool"
///
private void CreateManualToolButton_Click(object sender, RoutedEventArgs e)
{
var tool = _currentFactory.CreateManualTool();
if (Util.ShowEditForm(tool))
_tools.Add(tool);
}
///
/// Обработчик события нажатия на кнопку "Add Electric Tool"
///
private void CreateElectricToolButton_Click(object sender, RoutedEventArgs e)
{
var tool = _currentFactory.CreateElectricTool();
if (Util.ShowEditForm(tool))
_tools.Add(tool);
}
///
/// Обработчик события нажатия на кнопку "Edit"
///
private void EditSelectedButton_Click(object sender, RoutedEventArgs e)
{
var item = GetSelectedItem();
if (item == null)
return;
Util.ShowEditForm(item);
_dataGrid.Items.Refresh();
}
///
/// Обработчик события нажатия на кнопку "Delete"
///
private void DeleteSelectedButton_Click(object sender, RoutedEventArgs e)
{
var selected = GetSelectedItem();
if (selected == null)
return;
if (!Util.ShowEditForm(selected, true))
return;
_tools.Remove(selected);
}
///
/// Обработчик события нажатия на кнопку "Generate"
///
private void GenerateButton_Click(object sender, RoutedEventArgs e)
{
Tool tool = _random.Next(0, 4) switch
{
0 => GenerateScissors(),
1 => GenerateScythe(),
2 => GenerateTrimmer(),
3 => GenerateLawnmower(),
_ => GenerateScissors(),
};
_tools.Add(tool);
}
}
}