145 lines
4.5 KiB
C#
Raw Permalink Normal View History

2023-11-14 23:39:34 +04:00
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<DrawTanker> 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<DrawTanker> 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();
}
}
}