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; namespace WinFormsApp1 { public partial class FormTraktorConfig : Form { TractorDraw _traktor = null; private event TraktorDelegate EventAddTraktor; public FormTraktorConfig() { 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 += (object sender, EventArgs a) => Close(); } private void labelObject_MouseDown(object sender, MouseEventArgs e) { (sender as Label).DoDragDrop((sender as Label).Name, DragDropEffects.Move | DragDropEffects.Copy); } private void DrawTraktor() { Bitmap bmp = new(pictureBoxObject.Width, pictureBoxObject.Height); Graphics gr = Graphics.FromImage(bmp); _traktor?.SetPosition(5, 5, pictureBoxObject.Width, pictureBoxObject.Height); _traktor?.DrawEntity(gr); pictureBoxObject.Image = bmp; } public void AddEvent(TraktorDelegate ev) { if (EventAddTraktor == null) { EventAddTraktor = new TraktorDelegate(ev); } else { EventAddTraktor += ev; } } private void Panel1_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.Text)) { e.Effect = DragDropEffects.Copy; } else { e.Effect = DragDropEffects.None; } } private void Panel1_DragDrop(object sender, DragEventArgs e) { switch (e.Data.GetData(DataFormats.Text).ToString()) { case "labelSimpleObject": _traktor = new TractorDraw((int)numericUpDownSpeed.Value, (int)numericUpDownWeight.Value, labelColor.BackColor); break; case "labelHardObject": _traktor = new MultiTraktorDraw((int)numericUpDownSpeed.Value, (int)numericUpDownWeight.Value, labelColor.BackColor, labelDopColor.BackColor, checkBoxAhead.Checked, checkBoxBehind.Checked); break; } DrawTraktor(); } private void LabelColor_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(typeof(Color))) { e.Effect = DragDropEffects.Copy; } else { e.Effect = DragDropEffects.None; } } private void LabelColor_DragDrop(object sender, DragEventArgs e) { var color = e.Data.GetData(typeof(Color)); if (color != null) { (sender as Label).BackColor = (Color)color; } if (_traktor != null) { _traktor.Tractor.BodyColor = (Color)color; DrawTraktor(); } } private void PanelColor_MouseDown(object sender, MouseEventArgs e) { (sender as Control).DoDragDrop((sender as Control).BackColor, DragDropEffects.Move | DragDropEffects.Copy); } private void LabelDopColor_DragDrop(object sender, DragEventArgs e) { if (_traktor != null && _traktor.Tractor is MultiTraktor entityBulldozer) { entityBulldozer.DopColor = (Color)e.Data.GetData(typeof(Color)); DrawTraktor(); } } private void LabelDopColor_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(typeof(Color))) { e.Effect = DragDropEffects.Copy; } else { e.Effect = DragDropEffects.None; } } private void buttonAdd_Click(object sender, EventArgs e) { EventAddTraktor?.Invoke(_traktor); Close(); } } }