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 Catamaran { /// /// Форма создания объекта /// public partial class FormBoatConfig : Form { /// /// Переменная-выбранная машина /// DrawingBoat _boat = null; /// /// Событие /// private event BoatDelegate EventAddBoat; /// /// Конструктор /// public FormBoatConfig() { 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 += (s, e) => Close(); // TODO buttonCancel.Click with lambda } /// /// Отрисовать машину /// private void DrawCar() { Bitmap bmp = new Bitmap(pictureBoxObject.Width, pictureBoxObject.Height); Graphics gr = Graphics.FromImage(bmp); _boat?.SetPosition(5, 5, pictureBoxObject.Width, pictureBoxObject.Height); _boat?.DrawTransport(gr); pictureBoxObject.Image = bmp; } /// /// Добавление события /// /// public void AddEvent(BoatDelegate ev) { if (EventAddBoat == null) { EventAddBoat = new BoatDelegate(ev); } else { EventAddBoat += ev; } } /// /// Передаем информацию при нажатии на Label /// /// /// 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)) { 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 "labelSimpleObject": _boat = new DrawingBoat((int)numericUpDownSpeed.Value, (int)numericUpDownWeight.Value, Color.White); break; case "labelModifiedObject": _boat = new DrawingCatamaran((int)numericUpDownSpeed.Value, (int)numericUpDownWeight.Value, Color.White, Color.Black, checkBoxFloats.Checked, checkBoxSail.Checked); break; } DrawCar(); } /// /// Отправляем цвет с панели /// /// /// private void PanelColor_MouseDown(object sender, MouseEventArgs e) { (sender as Control).DoDragDrop((sender as Control).BackColor, DragDropEffects.Move | DragDropEffects.Copy); } /// /// Проверка получаемой информации (ее типа на соответствие требуемому) /// /// /// private void LabelBaseColor_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(typeof(Color))) { e.Effect = DragDropEffects.Copy; } else { e.Effect = DragDropEffects.None; } } private void LabelDopColor_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(typeof(Color)) && _boat is DrawingCatamaran) { e.Effect = DragDropEffects.Copy; } else { e.Effect = DragDropEffects.None; } } /// /// Принимаем основной цвет /// /// /// private void LabelBaseColor_DragDrop(object sender, DragEventArgs e) { var color = (Color)e.Data.GetData(typeof(Color)); if (_boat is DrawingCatamaran) { _boat = ((DrawingCatamaran)_boat).Copy(bodyColor: color); } else if (_boat is DrawingBoat) { _boat = _boat.Copy(bodyColor: color); } // TODO Call method from object _boat and set color } /// /// Принимаем дополнительный цвет /// /// /// private void LabelDopColor_DragDrop(object sender, DragEventArgs e) { var color = (Color)e.Data.GetData(typeof(Color)); if (_boat is DrawingCatamaran) { _boat = ((DrawingCatamaran)_boat).Copy(dopColor: color); } // TODO Call method from object _boat if _boat is DrawningSportCar and set dop color } /// /// Добавление машины /// /// /// private void ButtonOk_Click(object sender, EventArgs e) { EventAddBoat?.Invoke(_boat); Close(); } } }