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); } } }