using ProjectBulldozer.Drawning; using ProjectBulldozer.Entities; namespace Bulldozer { public partial class FormBulldozerConfig : Form { DrawingTractor? _tractor = null; public event Action? EventAddTractor; public FormBulldozerConfig() { InitializeComponent(); panelBlack.MouseDown += PanelColor_MouseDown; panelPurple.MouseDown += PanelColor_MouseDown; panelGray.MouseDown += PanelColor_MouseDown; panelGreen.MouseDown += PanelColor_MouseDown; panelRed.MouseDown += PanelColor_MouseDown; panelWhite.MouseDown += PanelColor_MouseDown; panelYellow.MouseDown += PanelColor_MouseDown; panelBlue.MouseDown += PanelColor_MouseDown; ButtonCancel.Click += (s, e) => Close(); } private void DrawTractor() { Bitmap bmp = new(pictureBoxObject.Width, pictureBoxObject.Height); Graphics gr = Graphics.FromImage(bmp); _tractor?.SetPosition(pictureBoxObject.Width / 10, pictureBoxObject.Height / 10); _tractor?.DrawTransport(gr); pictureBoxObject.Image = bmp; } private void LabelObject_MouseDown(object sender, MouseEventArgs e) { (sender as Label)?.DoDragDrop((sender as Label)?.Name, DragDropEffects.Move | DragDropEffects.Copy); } private void PanelColor_MouseDown(object sender, MouseEventArgs e) { (sender as Panel)?.DoDragDrop((sender as Panel)?.BackColor, DragDropEffects.Copy | DragDropEffects.Move); } private void PanelObject_DragEnter(object sender, DragEventArgs e) { if (e.Data?.GetDataPresent(DataFormats.Text) ?? false) { e.Effect = DragDropEffects.Copy; } else { e.Effect = DragDropEffects.None; } } private void PanelObject_DragDrop(object sender, DragEventArgs e) { switch (e.Data?.GetData(DataFormats.Text).ToString()) { case "labelSimpleObject": _tractor = new DrawingTractor((int)numericUpDownSpeed.Value, (int)numericUpDownWeight.Value, Color.White, pictureBoxObject.Width, pictureBoxObject.Height); break; case "labelModifiedObject": _tractor = new DrawingBulldozer((int)numericUpDownSpeed.Value, (int)numericUpDownWeight.Value, Color.White, Color.Black, checkBoxThirdWheel.Checked, checkBoxKovsh.Checked, pictureBoxObject.Width, pictureBoxObject.Height); break; } DrawTractor(); } private void PanelColor_DragEnter(object sender, DragEventArgs e) { if (e.Data?.GetDataPresent(typeof(Color)) ?? false) { e.Effect = DragDropEffects.Copy; } else { e.Effect = DragDropEffects.None; } } private void PanelColor_DragDrop(object sender, DragEventArgs e) { if (_tractor == null) { return; } switch (((Label)sender).Name) { case "label_body_color": _tractor?.EntityTractor?.setBodyColor((Color)e.Data.GetData(typeof(Color))); break; case "label_additional_color": if (!(_tractor is DrawingBulldozer)) { return; } (_tractor.EntityTractor as EntityBulldozer)? .setAdditionalColor(color: (Color)e.Data.GetData(typeof(Color))); break; } DrawTractor(); } public void AddEvent(Action ev) { if (EventAddTractor == null) { EventAddTractor = ev; } else { EventAddTractor += ev; } } private void ButtonOk_Click(object sender, EventArgs e) { EventAddTractor?.Invoke(obj: _tractor); Close(); } } }