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.Forms; using WinFormsApp1; namespace WinFormsApp1 { public partial class FormMapWithSetTraktor : Form { private MapWithSetTraktorGeneric _mapTraktorCollectionGeneric; private readonly Dictionary _mapsDict = new() { {"Простая карта", new SimpleMap() }, {"Поле", new FieldMap() } }; private readonly MapsCollection _mapsCollection; public FormMapWithSetTraktor() { InitializeComponent(); _mapsCollection = new MapsCollection(pictureBox.Width, pictureBox.Height); comboBoxSelectorMap.Items.Clear(); foreach (var item in _mapsDict) { comboBoxSelectorMap.Items.Add(item.Key); } } private void ReloadMaps() { int index = listBoxMaps.SelectedIndex; listBoxMaps.Items.Clear(); for (int i = 0; i < _mapsCollection.Keys.Count; i++) { listBoxMaps.Items.Add(_mapsCollection.Keys[i]); } if (listBoxMaps.Items.Count > 0 && (index == -1 || index >= listBoxMaps.Items.Count)) { listBoxMaps.SelectedIndex = 0; } else if (listBoxMaps.Items.Count > 0 && index > -1 && index < listBoxMaps.Items.Count) { listBoxMaps.SelectedIndex = index; } } private void ComboBoxSelectorMap_SelectedIndexChanged(object sender, EventArgs e) { AbstractMap map = null; switch (comboBoxSelectorMap.Text) { case "Простая карта": map = new SimpleMap(); break; case "Поле": map = new FieldMap(); break; } if (map != null) { _mapTraktorCollectionGeneric = new MapWithSetTraktorGeneric(pictureBox.Width, pictureBox.Height, map); } else { _mapTraktorCollectionGeneric = null; } } private void ButtonAddTraktor_Click(object sender, EventArgs e) { var formBusConfig = new FormTraktorConfig(); formBusConfig.AddEvent(AddTraktor); formBusConfig.Show(); } private void AddTraktor(TractorDraw traktor) { if (listBoxMaps.SelectedIndex == -1) { return; } DrawningObjectTractor boat = new(traktor); if (_mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty] + boat >= 0) { MessageBox.Show("Объект добавлен"); pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet(); } else { MessageBox.Show("Не удалось добавить объект"); } } private void ButtonRemoveTraktor_Click(object sender, EventArgs e) { if (listBoxMaps.SelectedIndex == -1) { return; } if (string.IsNullOrEmpty(maskedTextBoxPosition.Text)) { return; } if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { return; } int pos = Convert.ToInt32(maskedTextBoxPosition.Text); if (_mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty] - pos != null) { MessageBox.Show("Объект удален"); pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet(); } else { MessageBox.Show("Не удалось удалить объект"); } } private void ButtonShowStorage_Click(object sender, EventArgs e) { if (_mapTraktorCollectionGeneric == null) { return; } pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet(); } private void ButtonShowOnMap_Click(object sender, EventArgs e) { if (_mapTraktorCollectionGeneric == null) { return; } pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowOnMap(); } private void ButtonMove_Click(object sender, EventArgs e) { if (_mapTraktorCollectionGeneric == null) { return; } string name = ((Button)sender)?.Name ?? string.Empty; Direction dir = Direction.None; switch (name) { case "buttonUp": dir = Direction.Up; break; case "buttonDown": dir = Direction.Down; break; case "buttonLeft": dir = Direction.Left; break; case "buttonRight": dir = Direction.Right; break; } pictureBox.Image = _mapTraktorCollectionGeneric.MoveObject(dir); } private void buttonAddMap_Click(object sender, EventArgs e) { if (comboBoxSelectorMap.SelectedIndex == -1 || string.IsNullOrEmpty(textBoxNewMapName.Text)) { MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (!_mapsDict.ContainsKey(comboBoxSelectorMap.Text)) { MessageBox.Show("Нет такой карты", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } _mapsCollection.AddMap(textBoxNewMapName.Text, _mapsDict[comboBoxSelectorMap.Text]); ReloadMaps(); } private void listBoxMaps_SelectedIndexChanged(object sender, EventArgs e) { pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet(); } private void buttonDeleteMap_Click(object sender, EventArgs e) { if (listBoxMaps.SelectedIndex == -1) { return; } if (MessageBox.Show($"Удалить карту {listBoxMaps.SelectedItem}?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { _mapsCollection.DelMap(listBoxMaps.SelectedItem?.ToString() ?? string.Empty); ReloadMaps(); } } private void SaveToolStripMenuItem_Click(object sender, EventArgs e) { if (saveFileDialog.ShowDialog() == DialogResult.OK) { if (_mapsCollection.SaveData(saveFileDialog.FileName)) { MessageBox.Show("Сохранение прошло успешно!", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show("Не сохранилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } private void LoadToolStripMenuItem_Click(object sender, EventArgs e) { if (openFileDialog.ShowDialog() == DialogResult.OK) { if (_mapsCollection.LoadData(openFileDialog.FileName)) { MessageBox.Show("Загрузка прошла успешно!", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); ReloadMaps(); } else { MessageBox.Show("Не загрузилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } } }