196 lines
6.2 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using SelfPropelledArtilleryUnit.Drawnings;
using SelfPropelledArtilleryUnit.Entities;
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 SelfPropelledArtilleryUnit;
//SelfPropelledArtilleryUnit
//PropelledArtillery
public partial class FormPropelledArtilleryConfig : Form
{
private void FormPropelledArtilleryConfig_Load(object sender, EventArgs e)
{
InitializeComponent();
panelRed.MouseDown += Panel_MouseDown;
panelGreen.MouseDown += Panel_MouseDown;
panelBlue.MouseDown += Panel_MouseDown;
panelYellow.MouseDown += Panel_MouseDown;
panelWhite.MouseDown += Panel_MouseDown;
panelGray.MouseDown += Panel_MouseDown;
panelBlack.MouseDown += Panel_MouseDown;
panelPurple.MouseDown += Panel_MouseDown;
buttonCancel.Click += (sender, e) => Close();
}
/// <summary>
/// Объект - прорисовка автомобиля
/// </summary>
private DrawningPropelledArtillery? _propelledArtillery;
/// <summary>
/// Событие для передачи объекта
/// </summary>
public event Action<DrawningPropelledArtillery>? PropelledArtilleryDelegate;
/// <summary>
/// Конструктор
/// </summary>
public FormPropelledArtilleryConfig()
{
InitializeComponent();
buttonCancel.Click += (sender, e) =>
{
Close();
};
}
/// <summary>
/// Привязка внешнего метода к событию
/// </summary>
/// <param name="propelledArtilleryDelegate"></param>
public void AddEvent(Action<DrawningPropelledArtillery> propelledArtilleryDelegate)
{
PropelledArtilleryDelegate += propelledArtilleryDelegate;
}
/// <summary>
/// Прорисовка объекта
/// </summary>
private void DrawObject()
{
Bitmap bmp = new(pictureBoxObject.Width, pictureBoxObject.Height);
Graphics gr = Graphics.FromImage(bmp);
_propelledArtillery?.SetPictureSize(pictureBoxObject.Width, pictureBoxObject.Height);
_propelledArtillery?.SetPosition(15, 15);
_propelledArtillery?.DrawTransport(gr);
pictureBoxObject.Image = bmp;
}
/// <summary>
/// Передаем информацию при нажатии на Label
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void LabelObject_MouseDown(object sender, MouseEventArgs e)
{
(sender as Label)?.DoDragDrop((sender as Label)?.Name ?? string.Empty, DragDropEffects.Move | DragDropEffects.Copy);
}
/// <summary>
/// Проверка получаемой информации (ее типа на соответствие требуемому)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void panelObject_DragEnter(object sender, DragEventArgs e)
{
e.Effect = e.Data?.GetDataPresent(DataFormats.Text) ?? false ? DragDropEffects.Copy : DragDropEffects.None;
}
/// <summary>
/// Действия при приеме перетаскиваемой информации
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void panelObject_DragDrop(object sender, DragEventArgs e)
{
switch (e.Data?.GetData(DataFormats.Text)?.ToString())
{
case "labelSimpleObject":
_propelledArtillery = new DrawningPropelledArtillery((int)numericUpDownSpeed.Value, (double)numericUpDownWeight.Value, Color.Aqua);
break;
case "labelModifiedObject":
_propelledArtillery = new DrawningSelfPropelledArtilleryUnit((int)numericUpDownSpeed.Value, (double)numericUpDownWeight.Value, Color.White,
Color.Black, checkBoxTurretCannon.Checked, checkBoxLaunchBattery.Checked);
break;
}
DrawObject();
}
private void labelBodyColor_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(Color)))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void labelBodyColor_DragDrop(object sender, DragEventArgs e)
{
if (_propelledArtillery != null)
{
_propelledArtillery.EntityPropelledArtillery.setBodyColor((Color)e.Data.GetData(typeof(Color)));
DrawObject();
}
}
private void labelAdditionalColor_DragDrop(object sender, DragEventArgs e)
{
if (_propelledArtillery.EntityPropelledArtillery is EntitySelfPropelledArtilleryUnit _selfPropelledArtilleryUnit)
{
_selfPropelledArtilleryUnit.setAdditionalColor((Color)e.Data.GetData(typeof(Color)));
}
DrawObject();
}
private void labelAdditionalColor_DragEnter(object sender, DragEventArgs e)
{
if (_propelledArtillery is DrawningSelfPropelledArtilleryUnit)
{
if (e.Data.GetDataPresent(typeof(Color)))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}
}
/// <summary>
/// Передаем информацию при нажатии на Panel
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Panel_MouseDown(object? sender, MouseEventArgs e)
{
(sender as Panel)?.DoDragDrop((sender as Panel)?.BackColor ?? Color.White, DragDropEffects.Move | DragDropEffects.Copy);
}
/// <summary>
/// Передача объекта
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonAdd_Click(object sender, EventArgs e)
{
if (_propelledArtillery != null)
{
PropelledArtilleryDelegate?.Invoke(_propelledArtillery);
Close();
}
}
private void groupBoxColors_Enter(object sender, EventArgs e)
{
}
}