2023-11-10 08:57:13 +04:00

153 lines
4.9 KiB
C#

using Monorail.DrawningObjects;
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 Monorail
{
public partial class FormMonorailConfig : Form
{
DrawningMonorail? _monorail = null;
private event Action<DrawningMonorail>? EventAddMonorail;
public void AddEvent(Action<DrawningMonorail> ev)
{
if (EventAddMonorail == null)
{
EventAddMonorail = ev;
}
else
{
EventAddMonorail += ev;
}
}
public FormMonorailConfig()
{
InitializeComponent();
blackPanel.MouseDown += PanelColor_MouseDown;
greenPanel.MouseDown += PanelColor_MouseDown;
redPanel.MouseDown += PanelColor_MouseDown;
bluePanel.MouseDown += PanelColor_MouseDown;
greyPanel.MouseDown += PanelColor_MouseDown;
yellowPanel.MouseDown += PanelColor_MouseDown;
purplePanel.MouseDown += PanelColor_MouseDown;
whitePanel.MouseDown += PanelColor_MouseDown;
monorailLabel.MouseDown += LabelObject_MouseDown;
locomotiveLabel.MouseDown += LabelObject_MouseDown;
cancelButton.Click += (s, e) => Close();
}
public void DrawMonorail()
{
Bitmap bmp = new Bitmap(pictureBox.Width, pictureBox.Height);
Graphics gr = Graphics.FromImage(bmp);
_monorail?.SetPosition(5, 5);
_monorail?.DrawTransport(gr);
pictureBox.Image = bmp;
}
private void PanelColor_MouseDown(object sender, MouseEventArgs e)
{
(sender as Panel)?.DoDragDrop((sender as Panel)?.BackColor,
DragDropEffects.Move | DragDropEffects.Copy);
}
private void allowPanel_DragDrop(object sender, DragEventArgs e)
{
switch (e.Data?.GetData(DataFormats.Text).ToString())
{
case "monorailLabel":
_monorail = new DrawningMonorail((int)numericSpeed.Value,
(int)numericWeight.Value, Color.White, Color.Silver, Color.Black, pictureBox.Width,
pictureBox.Height);
break;
case "locomotiveLabel":
_monorail = new DrawningLocomotive((int)numericSpeed.Value,
(int)numericWeight.Value, Color.White, Color.Silver, Color.Black, pictureBox.Width,
pictureBox.Height, 4, Color.Silver, checkSecondCabine.Checked, checkMagniteRail.Checked);
break;
}
colorLabel.BackColor = Color.Empty;
addColorLabel.BackColor = Color.Empty;
DrawMonorail();
}
private void allowPanel_DragEnter(object sender, DragEventArgs e)
{
if (e.Data?.GetDataPresent(DataFormats.Text) ?? false)
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void addButton_Click(object sender, EventArgs e)
{
EventAddMonorail?.Invoke(_monorail);
Close();
}
private void LabelObject_MouseDown(object sender, MouseEventArgs e)
{
(sender as Label)?.DoDragDrop((sender as Label)?.Name, DragDropEffects.Move | DragDropEffects.Copy);
}
private void colorLabel_DragDrop(object sender, DragEventArgs e)
{
if (_monorail == null)
return;
colorLabel.BackColor = (Color)e.Data.GetData(typeof(Color));
_monorail.ChangeColor(colorLabel.BackColor);
DrawMonorail();
}
private void colorLabel_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(Color)))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void addColorLabel_DragDrop(object sender, DragEventArgs e)
{
if ((_monorail == null) || (_monorail is DrawningLocomotive == false))
return;
addColorLabel.BackColor = (Color)e.Data.GetData(typeof(Color));
((DrawningLocomotive)_monorail).ChangeAddColor(addColorLabel.BackColor);
DrawMonorail();
}
private void addColorLabel_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(Color)))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}
}
}