201 lines
5.7 KiB
C#
201 lines
5.7 KiB
C#
using System;
|
|
using System.Windows;
|
|
using System.Collections.ObjectModel;
|
|
using Patterns;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace Lab2
|
|
{
|
|
/// <summary>
|
|
/// Interaction logic for MainWindow.xaml
|
|
/// </summary>
|
|
public partial class MainWindow : Window
|
|
{
|
|
/// <summary>
|
|
/// Коллекция инструментов
|
|
/// </summary>
|
|
private ObservableCollection<Tool> _tools = new();
|
|
|
|
/// <summary>
|
|
/// Случайный генератор
|
|
/// </summary>
|
|
private Random _random = new();
|
|
|
|
/// <summary>
|
|
/// Список фабрик
|
|
/// </summary>
|
|
private List<IToolFactoryMethod> _factoryMethods = new()
|
|
{
|
|
new ScissorsAndTrimmerFactoryMethod(),
|
|
new ScytheAndLawnmowerFactoryMethod(),
|
|
new PrototypeFactoryMethod(),
|
|
};
|
|
|
|
/// <summary>
|
|
/// Текущая фабрика
|
|
/// </summary>
|
|
private IToolFactory _currentFactory;
|
|
|
|
/// <summary>
|
|
/// Выбранный фабричный метод
|
|
/// </summary>
|
|
private IToolFactoryMethod _selectedMethod;
|
|
|
|
/// <summary>
|
|
/// Список фабрик
|
|
/// </summary>
|
|
public ICollection<IToolFactoryMethod> FactoryMethods => _factoryMethods;
|
|
|
|
/// <summary>
|
|
/// Выбранный фабричный метод
|
|
/// </summary>
|
|
public IToolFactoryMethod SelectedMethod
|
|
{
|
|
get => _selectedMethod;
|
|
set
|
|
{
|
|
_selectedMethod = value;
|
|
_currentFactory = value.CreateFactory();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Конструктор
|
|
/// </summary>
|
|
public MainWindow()
|
|
{
|
|
InitializeComponent();
|
|
|
|
SelectedMethod = _factoryMethods.First();
|
|
|
|
DataContext = this;
|
|
_dataGrid.ItemsSource = _tools;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Проверяет, является ли индекс валидным
|
|
/// </summary>
|
|
/// <param name="parIndex"> Индекс </param>
|
|
/// <returns> True, если индекс валиден, иначе - false </returns>
|
|
private bool IsValidIndex(int parIndex)
|
|
{
|
|
return _tools.Count > 0 && parIndex >= 0 && parIndex < _tools.Count;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Возвращает выбранный инструмент
|
|
/// </summary>
|
|
/// <returns> Выбранный инструмент </returns>
|
|
private Tool? GetSelectedItem()
|
|
{
|
|
if (!IsValidIndex(_dataGrid.SelectedIndex))
|
|
return null;
|
|
|
|
return _tools[_dataGrid.SelectedIndex];
|
|
}
|
|
|
|
/// <summary>
|
|
/// Генерирует случайный триммер
|
|
/// </summary>
|
|
/// <returns>Случайный триммер</returns>
|
|
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));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Генерирует случайную газонокосилку
|
|
/// </summary>
|
|
/// <returns>Случайная газонокосилка</returns>
|
|
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));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Генерирует случайные ножницы
|
|
/// </summary>
|
|
/// <returns>Случайные ножницы</returns>
|
|
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));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Генерирует случайную косу
|
|
/// </summary>
|
|
/// <returns>Случайная коса</returns>
|
|
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));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Обработчик события нажатия на кнопку "Add Manual Tool"
|
|
/// </summary>
|
|
private void CreateManualToolButton_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
var tool = _currentFactory.CreateManualTool();
|
|
if (Util.ShowEditForm(tool))
|
|
_tools.Add(tool);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Обработчик события нажатия на кнопку "Add Electric Tool"
|
|
/// </summary>
|
|
private void CreateElectricToolButton_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
var tool = _currentFactory.CreateElectricTool();
|
|
if (Util.ShowEditForm(tool))
|
|
_tools.Add(tool);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Обработчик события нажатия на кнопку "Edit"
|
|
/// </summary>
|
|
private void EditSelectedButton_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
var item = GetSelectedItem();
|
|
if (item == null)
|
|
return;
|
|
|
|
Util.ShowEditForm(item);
|
|
|
|
_dataGrid.Items.Refresh();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Обработчик события нажатия на кнопку "Delete"
|
|
/// </summary>
|
|
private void DeleteSelectedButton_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
var selected = GetSelectedItem();
|
|
if (selected == null)
|
|
return;
|
|
|
|
if (!Util.ShowEditForm(selected, true))
|
|
return;
|
|
|
|
_tools.Remove(selected);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Обработчик события нажатия на кнопку "Generate"
|
|
/// </summary>
|
|
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);
|
|
}
|
|
}
|
|
}
|