using System; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Lab.DrawningObjects; using Lab.Entities; using Lab.Generics; using Lab.MovementStrategy; using Lab.Properties; namespace Lab { public partial class FormTankerConfig : Form { DrawTanker? _tanker = null; private event Action EventAddTanker; public FormTankerConfig() { InitializeComponent(); BlackPanel.MouseDown += PanelColor_MouseDown; WhitePanel.MouseDown += PanelColor_MouseDown; PurplePanel.MouseDown += PanelColor_MouseDown; YellowPanel.MouseDown += PanelColor_MouseDown; GreenPanel.MouseDown += PanelColor_MouseDown; RedPanel.MouseDown += PanelColor_MouseDown; BluePanel.MouseDown += PanelColor_MouseDown; GrayPanel.MouseDown += PanelColor_MouseDown; CancelButton.Click += (s, e) => Close(); } public void DrawTanker() { Bitmap bmp = new(TankerDraw.Width, TankerDraw.Height); Graphics g = Graphics.FromImage(bmp); _tanker?.SetPosition(5, 5); if (_tanker is DrawGasolineTanker drawGasolineTanker) drawGasolineTanker.DrawTransport(g); else _tanker?.DrawTransport(g); TankerDraw.Image = bmp; } private void LabelObject_MouseDown(object sender, MouseEventArgs e) { (sender as Label)?.DoDragDrop((sender as Label)?.Name, DragDropEffects.Move | DragDropEffects.Copy); } 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 "BaseLabel": _tanker = new DrawTanker((int)SpeedNumeric.Value, (int)WeightNumeric.Value, Color.White, TankerDraw.Width, TankerDraw.Height); break; case "UpdateLabel": _tanker = new DrawGasolineTanker((int)SpeedNumeric.Value, (int)WeightNumeric.Value, Color.White, Color.Black, BodyKitCheck.Checked, WingCheck.Checked, SportLineCheck.Checked, TankerDraw.Width, TankerDraw.Height); break; } DrawTanker(); } public void AddEvent(Action ev) { if (EventAddTanker == null) { EventAddTanker = ev; } else { EventAddTanker += ev; } } private void ButtonOk_Click(object sender, EventArgs e) { EventAddTanker?.Invoke(_tanker); Close(); } private void PanelColor_MouseDown(object sender, MouseEventArgs e) { (sender as Panel)?.DoDragDrop((sender as Panel)?.BackColor, DragDropEffects.Move | DragDropEffects.Copy); } private void LabelColor_DragEnter(object sender, DragEventArgs e) { if (e.Data?.GetDataPresent(typeof(Color)) ?? false) { e.Effect = DragDropEffects.Copy; } else { e.Effect = DragDropEffects.None; } } private void LabelColor_DragDrop(object sender, DragEventArgs e) { if (_tanker == null) return; ((Label)sender).BackColor = (Color)e.Data.GetData(typeof(Color)); switch (((Label)sender).Name) { case "BaseColorLabel": _tanker.SetBaseColor((Color)e.Data.GetData(typeof(Color))); break; case "AddColorLabel": if (_tanker is DrawGasolineTanker) { (_tanker as DrawGasolineTanker).SetAddColor((Color)e.Data.GetData(typeof(Color))); } break; } DrawTanker(); } } }