Nikolaeva Y.A. Lab work 06 #6

Closed
NikolaevaYana wants to merge 3 commits from LabWork06 into LabWork05
13 changed files with 499 additions and 271 deletions

View File

@ -36,5 +36,13 @@ namespace Airbus
{
_airbus?.SetPosition(x, y, width, height);
}
public void DrawningObject()
{
//TODO
}
public string GetInfo() => _airbus?.GetDataForSave();
public static IDrawningObject Create(string data) => new DrawningObjectPlane(data.CreateDrawningPlane());
}
}

View File

@ -10,7 +10,7 @@ namespace Airbus
{
public int Speed { get; private set; } //скорость
public float Weight { get; private set; } //вес
public Color CorpusColor { get; private set; } //цвет корпуса
public Color CorpusColor { get; set; } //цвет корпуса
public float Step => Speed * 100 / Weight; //шаг перемещения самолёта
public EntityAirbus(int speed, float weight, Color corpusColor)
{

View File

@ -10,13 +10,13 @@ namespace Airbus
internal class EntitySuperAirbus: EntityAirbus
{
//Дополнительный цвет
public Color AddColor { get; private set; }
public Color AddColor { get; set; }
//Признак наличия дополнительно пассажирского отсека
public bool AddСompartment { get; private set; }
//Признак наличия доплнительных двигателей
public bool AddEngine { get; private set; }
public bool AddEngine { get; set; }
//Инициализация свойств
public EntitySuperAirbus(int speed, float weight, Color corpusColor, Color addColor, bool addCompartment, bool addEngine) :

View File

@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Airbus
{
//расширение для класса DrawingPlane (класс для сохранения в файл колекций объектов)
internal static class ExtentionPlane
{
//разделитель для записи информации по объекту в файл
private static readonly char _separatorForObject = ':';
//создание объекта из строки
public static DrawningAirbus CreateDrawningPlane(this string info)
{
string[] strs = info.Split(_separatorForObject);
//если простой самолёт
if (strs.Length == 3)
{
return new DrawningAirbus(Convert.ToInt32(strs[0]), Convert.ToInt32(strs[1]), Color.FromName(strs[2]));
}
//если аэробус
if (strs.Length == 6)
{
return new DrawningSuperAirbus(Convert.ToInt32(strs[0]), Convert.ToInt32(strs[1]), Color.FromName(strs[2]),
Color.FromName(strs[3]), Convert.ToBoolean(strs[4]), Convert.ToBoolean(strs[5]));
}
return null;
}
//сохраниние объекта в строку
public static string GetDataForSave(this DrawningAirbus drawingPlane)
{
var plane = drawingPlane.Airbus;
var str = $"{plane.Speed}{_separatorForObject}{plane.Weight}{_separatorForObject}{plane.CorpusColor.Name}";
//если объект не расширеный
if (plane is not EntitySuperAirbus airbus)
{
return str;
}
return $"{str}{_separatorForObject}{airbus.AddColor.Name}{_separatorForObject}" +
$"{airbus.AddEngine}{_separatorForObject}{airbus.AddСompartment}";
}
}
}

View File

@ -45,9 +45,16 @@
this.comboBoxSelectorMap = new System.Windows.Forms.ComboBox();
this.textBoxNewMapName = new System.Windows.Forms.TextBox();
this.pictureBox = new System.Windows.Forms.PictureBox();
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
this.ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.SaveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.LoadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();
this.groupBoxTools.SuspendLayout();
this.groupBox1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
this.menuStrip1.SuspendLayout();
this.SuspendLayout();
//
// groupBoxTools
@ -63,9 +70,9 @@
this.groupBoxTools.Controls.Add(this.buttonUp);
this.groupBoxTools.Controls.Add(this.groupBox1);
this.groupBoxTools.Dock = System.Windows.Forms.DockStyle.Right;
this.groupBoxTools.Location = new System.Drawing.Point(627, 0);
this.groupBoxTools.Location = new System.Drawing.Point(627, 24);
this.groupBoxTools.Name = "groupBoxTools";
this.groupBoxTools.Size = new System.Drawing.Size(200, 534);
this.groupBoxTools.Size = new System.Drawing.Size(200, 547);
this.groupBoxTools.TabIndex = 0;
this.groupBoxTools.TabStop = false;
this.groupBoxTools.Text = "Инструменты";
@ -229,19 +236,63 @@
// pictureBox
//
this.pictureBox.Dock = System.Windows.Forms.DockStyle.Fill;
this.pictureBox.Location = new System.Drawing.Point(0, 0);
this.pictureBox.Location = new System.Drawing.Point(0, 24);
this.pictureBox.Name = "pictureBox";
this.pictureBox.Size = new System.Drawing.Size(627, 534);
this.pictureBox.Size = new System.Drawing.Size(627, 547);
this.pictureBox.TabIndex = 1;
this.pictureBox.TabStop = false;
//
// menuStrip1
//
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.ToolStripMenuItem});
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.Name = "menuStrip1";
this.menuStrip1.Size = new System.Drawing.Size(827, 24);
this.menuStrip1.TabIndex = 2;
this.menuStrip1.Text = "menuStrip1";
//
// ToolStripMenuItem
//
this.ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.SaveToolStripMenuItem,
this.LoadToolStripMenuItem});
this.ToolStripMenuItem.Name = "ToolStripMenuItem";
this.ToolStripMenuItem.Size = new System.Drawing.Size(48, 20);
this.ToolStripMenuItem.Text = "Файл";
//
// SaveToolStripMenuItem
//
this.SaveToolStripMenuItem.Name = "SaveToolStripMenuItem";
this.SaveToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.SaveToolStripMenuItem.Text = "Сохранение";
this.SaveToolStripMenuItem.Click += new System.EventHandler(this.SaveToolStripMenuItem_Click);
//
// LoadToolStripMenuItem
//
this.LoadToolStripMenuItem.Name = "LoadToolStripMenuItem";
this.LoadToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.LoadToolStripMenuItem.Text = "Загрузка";
this.LoadToolStripMenuItem.Click += new System.EventHandler(this.LoadToolStripMenuItem_Click);
//
// openFileDialog
//
this.openFileDialog.FileName = "openFileDialog1";
this.openFileDialog.Filter = "txt file | *.txt";
//
// saveFileDialog
//
this.saveFileDialog.Filter = "txt file | *.txt";
//
// FormMapWithSetPlanes
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(827, 534);
this.ClientSize = new System.Drawing.Size(827, 571);
this.Controls.Add(this.pictureBox);
this.Controls.Add(this.groupBoxTools);
this.Controls.Add(this.menuStrip1);
this.MainMenuStrip = this.menuStrip1;
this.Name = "FormMapWithSetPlanes";
this.Text = "FormMapWithSetPlanes";
this.groupBoxTools.ResumeLayout(false);
@ -249,7 +300,10 @@
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
@ -272,5 +326,11 @@
private Button buttonAddMap;
private Button buttonDeleteMap;
private TextBox textBoxNewMapName;
private MenuStrip menuStrip1;
private ToolStripMenuItem ToolStripMenuItem;
private ToolStripMenuItem SaveToolStripMenuItem;
private ToolStripMenuItem LoadToolStripMenuItem;
private OpenFileDialog openFileDialog;
private SaveFileDialog saveFileDialog;
}
}

View File

@ -24,6 +24,7 @@ namespace Airbus
//объект от коллекции карт
private readonly MapsCollection _mapsCollection;
//конструктор
public FormMapWithSetPlanes()
{
InitializeComponent();
@ -98,6 +99,8 @@ namespace Airbus
ReloadMaps();
}
}
//отрисовка добавленного объекта в хранилище
private void AddPlane(DrawningAirbus plane)
{
if (listBoxMaps.SelectedIndex == -1)
@ -203,6 +206,41 @@ namespace Airbus
pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? String.Empty].MoveObject(dir);
}
//обработка нажатия сохранения
private void SaveToolStripMenuItem_Click(object sender, EventArgs e)
{
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
if (_mapsCollection.SaveData(saveFileDialog.FileName))
{
MessageBox.Show("Сохранение прошло успешно", "Результат",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("Не сохранилось", "Результат",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
//обработка нажатия загрузки
private void LoadToolStripMenuItem_Click(object sender, EventArgs e)
{
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
if (_mapsCollection.LoadData(openFileDialog.FileName))
{
ReloadMaps();
MessageBox.Show("Загрузка данных прошла успешно", "Результат",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("Ошибка загрузки данных", "Результат",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
}

View File

@ -57,4 +57,13 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>132, 17</value>
</metadata>
<metadata name="saveFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>272, 17</value>
</metadata>
</root>

View File

@ -29,35 +29,35 @@
private void InitializeComponent()
{
this.groupBoxConfig = new System.Windows.Forms.GroupBox();
this.labelSpeed = new System.Windows.Forms.Label();
this.labelWeight = new System.Windows.Forms.Label();
this.numericUpDownSpeed = new System.Windows.Forms.NumericUpDown();
this.numericUpDownWeight = new System.Windows.Forms.NumericUpDown();
this.checkBoxAddEngine = new System.Windows.Forms.CheckBox();
this.checkBoxAddСompartment = new System.Windows.Forms.CheckBox();
this.groupBoxColors = new System.Windows.Forms.GroupBox();
this.panelWhite = new System.Windows.Forms.Panel();
this.panelGray = new System.Windows.Forms.Panel();
this.panelBlack = new System.Windows.Forms.Panel();
this.panelPurple = new System.Windows.Forms.Panel();
this.panelYellow = new System.Windows.Forms.Panel();
this.panelBlue = new System.Windows.Forms.Panel();
this.panelGreen = new System.Windows.Forms.Panel();
this.panelRed = new System.Windows.Forms.Panel();
this.labelSimpleObject = new System.Windows.Forms.Label();
this.labelModifiedObject = new System.Windows.Forms.Label();
this.labelSimpleObject = new System.Windows.Forms.Label();
this.groupBoxColors = new System.Windows.Forms.GroupBox();
this.panelRed = new System.Windows.Forms.Panel();
this.panelGreen = new System.Windows.Forms.Panel();
this.panelBlue = new System.Windows.Forms.Panel();
this.panelYellow = new System.Windows.Forms.Panel();
this.panelPurple = new System.Windows.Forms.Panel();
this.panelBlack = new System.Windows.Forms.Panel();
this.panelGray = new System.Windows.Forms.Panel();
this.panelWhite = new System.Windows.Forms.Panel();
this.checkBoxAddСompartment = new System.Windows.Forms.CheckBox();
this.checkBoxAddEngine = new System.Windows.Forms.CheckBox();
this.numericUpDownWeight = new System.Windows.Forms.NumericUpDown();
this.numericUpDownSpeed = new System.Windows.Forms.NumericUpDown();
this.labelWeight = new System.Windows.Forms.Label();
this.labelSpeed = new System.Windows.Forms.Label();
this.pictureBoxObject = new System.Windows.Forms.PictureBox();
this.anelObject = new System.Windows.Forms.Panel();
this.labelBaseColor = new System.Windows.Forms.Label();
this.panelObject = new System.Windows.Forms.Panel();
this.labelAddColor = new System.Windows.Forms.Label();
this.labelBaseColor = new System.Windows.Forms.Label();
this.buttonAddObject = new System.Windows.Forms.Button();
this.buttonCancel = new System.Windows.Forms.Button();
this.groupBoxConfig.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownSpeed)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownWeight)).BeginInit();
this.groupBoxColors.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownWeight)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownSpeed)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBoxObject)).BeginInit();
this.anelObject.SuspendLayout();
this.panelObject.SuspendLayout();
this.SuspendLayout();
//
// groupBoxConfig
@ -78,57 +78,27 @@
this.groupBoxConfig.TabStop = false;
this.groupBoxConfig.Text = "Параметры";
//
// labelSpeed
// labelModifiedObject
//
this.labelSpeed.AutoSize = true;
this.labelSpeed.Location = new System.Drawing.Point(17, 31);
this.labelSpeed.Name = "labelSpeed";
this.labelSpeed.Size = new System.Drawing.Size(62, 15);
this.labelSpeed.TabIndex = 0;
this.labelSpeed.Text = "Скорость:";
this.labelModifiedObject.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.labelModifiedObject.Location = new System.Drawing.Point(500, 142);
this.labelModifiedObject.Name = "labelModifiedObject";
this.labelModifiedObject.Size = new System.Drawing.Size(103, 23);
this.labelModifiedObject.TabIndex = 8;
this.labelModifiedObject.Text = "Продвитнутый";
this.labelModifiedObject.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.labelModifiedObject.MouseDown += new System.Windows.Forms.MouseEventHandler(this.LabelObject_MouseDown);
//
// labelWeight
// labelSimpleObject
//
this.labelWeight.AutoSize = true;
this.labelWeight.Location = new System.Drawing.Point(17, 66);
this.labelWeight.Name = "labelWeight";
this.labelWeight.Size = new System.Drawing.Size(29, 15);
this.labelWeight.TabIndex = 1;
this.labelWeight.Text = "Вес:";
//
// numericUpDownSpeed
//
this.numericUpDownSpeed.Location = new System.Drawing.Point(89, 29);
this.numericUpDownSpeed.Name = "numericUpDownSpeed";
this.numericUpDownSpeed.Size = new System.Drawing.Size(69, 23);
this.numericUpDownSpeed.TabIndex = 2;
//
// numericUpDownWeight
//
this.numericUpDownWeight.Location = new System.Drawing.Point(89, 58);
this.numericUpDownWeight.Name = "numericUpDownWeight";
this.numericUpDownWeight.Size = new System.Drawing.Size(69, 23);
this.numericUpDownWeight.TabIndex = 3;
//
// checkBoxAddEngine
//
this.checkBoxAddEngine.AutoSize = true;
this.checkBoxAddEngine.Location = new System.Drawing.Point(17, 106);
this.checkBoxAddEngine.Name = "checkBoxAddEngine";
this.checkBoxAddEngine.Size = new System.Drawing.Size(281, 19);
this.checkBoxAddEngine.TabIndex = 4;
this.checkBoxAddEngine.Text = "Признак наличия дополнительного двигателя";
this.checkBoxAddEngine.UseVisualStyleBackColor = true;
//
// checkBoxAddСompartment
//
this.checkBoxAddСompartment.AutoSize = true;
this.checkBoxAddСompartment.Location = new System.Drawing.Point(17, 142);
this.checkBoxAddСompartment.Name = "checkBoxAddСompartment";
this.checkBoxAddСompartment.Size = new System.Drawing.Size(351, 19);
this.checkBoxAddСompartment.TabIndex = 5;
this.checkBoxAddСompartment.Text = "Признак наличия дополнительного пассажирского отсека";
this.checkBoxAddСompartment.UseVisualStyleBackColor = true;
this.labelSimpleObject.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.labelSimpleObject.Location = new System.Drawing.Point(386, 142);
this.labelSimpleObject.Name = "labelSimpleObject";
this.labelSimpleObject.Size = new System.Drawing.Size(100, 23);
this.labelSimpleObject.TabIndex = 7;
this.labelSimpleObject.Text = "Простой";
this.labelSimpleObject.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.labelSimpleObject.MouseDown += new System.Windows.Forms.MouseEventHandler(this.LabelObject_MouseDown);
//
// groupBoxColors
//
@ -147,54 +117,14 @@
this.groupBoxColors.TabStop = false;
this.groupBoxColors.Text = "Цвета";
//
// panelWhite
// panelRed
//
this.panelWhite.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.panelWhite.Location = new System.Drawing.Point(6, 22);
this.panelWhite.Name = "panelWhite";
this.panelWhite.Size = new System.Drawing.Size(39, 32);
this.panelWhite.TabIndex = 0;
//
// panelGray
//
this.panelGray.BackColor = System.Drawing.SystemColors.ControlDark;
this.panelGray.Location = new System.Drawing.Point(51, 22);
this.panelGray.Name = "panelGray";
this.panelGray.Size = new System.Drawing.Size(39, 32);
this.panelGray.TabIndex = 1;
//
// panelBlack
//
this.panelBlack.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
this.panelBlack.Location = new System.Drawing.Point(96, 22);
this.panelBlack.Name = "panelBlack";
this.panelBlack.Size = new System.Drawing.Size(39, 32);
this.panelBlack.TabIndex = 2;
//
// panelPurple
//
this.panelPurple.BackColor = System.Drawing.Color.Purple;
this.panelPurple.Location = new System.Drawing.Point(141, 22);
this.panelPurple.Name = "panelPurple";
this.panelPurple.Size = new System.Drawing.Size(39, 32);
this.panelPurple.TabIndex = 3;
//
// panelYellow
//
this.panelYellow.BackColor = System.Drawing.Color.Yellow;
this.panelYellow.Location = new System.Drawing.Point(6, 60);
this.panelYellow.Name = "panelYellow";
this.panelYellow.Size = new System.Drawing.Size(39, 32);
this.panelYellow.TabIndex = 4;
//
// panelBlue
//
this.panelBlue.BackColor = System.Drawing.Color.Blue;
this.panelBlue.Location = new System.Drawing.Point(51, 60);
this.panelBlue.Name = "panelBlue";
this.panelBlue.Size = new System.Drawing.Size(39, 32);
this.panelBlue.TabIndex = 1;
this.panelBlue.Paint += new System.Windows.Forms.PaintEventHandler(this.panel6_Paint);
this.panelRed.BackColor = System.Drawing.Color.Red;
this.panelRed.Location = new System.Drawing.Point(141, 60);
this.panelRed.Name = "panelRed";
this.panelRed.Size = new System.Drawing.Size(39, 32);
this.panelRed.TabIndex = 6;
this.panelRed.MouseDown += new System.Windows.Forms.MouseEventHandler(this.PanelColor_MouseDown);
//
// panelGreen
//
@ -203,68 +133,135 @@
this.panelGreen.Name = "panelGreen";
this.panelGreen.Size = new System.Drawing.Size(39, 32);
this.panelGreen.TabIndex = 5;
this.panelGreen.MouseDown += new System.Windows.Forms.MouseEventHandler(this.PanelColor_MouseDown);
//
// panelRed
// panelBlue
//
this.panelRed.BackColor = System.Drawing.Color.Red;
this.panelRed.Location = new System.Drawing.Point(141, 60);
this.panelRed.Name = "panelRed";
this.panelRed.Size = new System.Drawing.Size(39, 32);
this.panelRed.TabIndex = 6;
this.panelBlue.BackColor = System.Drawing.Color.Blue;
this.panelBlue.Location = new System.Drawing.Point(51, 60);
this.panelBlue.Name = "panelBlue";
this.panelBlue.Size = new System.Drawing.Size(39, 32);
this.panelBlue.TabIndex = 1;
this.panelBlue.MouseDown += new System.Windows.Forms.MouseEventHandler(this.PanelColor_MouseDown);
//
// labelSimpleObject
// panelYellow
//
this.labelSimpleObject.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.labelSimpleObject.Location = new System.Drawing.Point(386, 142);
this.labelSimpleObject.Name = "labelSimpleObject";
this.labelSimpleObject.Size = new System.Drawing.Size(100, 23);
this.labelSimpleObject.TabIndex = 7;
this.labelSimpleObject.Text = "Простой";
this.labelSimpleObject.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.labelSimpleObject.MouseDown += new System.Windows.Forms.MouseEventHandler(this.LabelObject_MouseDown);
this.panelYellow.BackColor = System.Drawing.Color.Yellow;
this.panelYellow.Location = new System.Drawing.Point(6, 60);
this.panelYellow.Name = "panelYellow";
this.panelYellow.Size = new System.Drawing.Size(39, 32);
this.panelYellow.TabIndex = 4;
this.panelYellow.MouseDown += new System.Windows.Forms.MouseEventHandler(this.PanelColor_MouseDown);
//
// labelModifiedObject
// panelPurple
//
this.labelModifiedObject.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.labelModifiedObject.Location = new System.Drawing.Point(500, 142);
this.labelModifiedObject.Name = "labelModifiedObject";
this.labelModifiedObject.Size = new System.Drawing.Size(103, 23);
this.labelModifiedObject.TabIndex = 8;
this.labelModifiedObject.Text = "Продвитнутый";
this.labelModifiedObject.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.labelModifiedObject.MouseDown += new System.Windows.Forms.MouseEventHandler(this.LabelObject_MouseDown);
this.panelPurple.BackColor = System.Drawing.Color.Purple;
this.panelPurple.Location = new System.Drawing.Point(141, 22);
this.panelPurple.Name = "panelPurple";
this.panelPurple.Size = new System.Drawing.Size(39, 32);
this.panelPurple.TabIndex = 3;
this.panelPurple.MouseDown += new System.Windows.Forms.MouseEventHandler(this.PanelColor_MouseDown);
//
// panelBlack
//
this.panelBlack.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
this.panelBlack.Location = new System.Drawing.Point(96, 22);
this.panelBlack.Name = "panelBlack";
this.panelBlack.Size = new System.Drawing.Size(39, 32);
this.panelBlack.TabIndex = 2;
this.panelBlack.MouseDown += new System.Windows.Forms.MouseEventHandler(this.PanelColor_MouseDown);
//
// panelGray
//
this.panelGray.BackColor = System.Drawing.SystemColors.ControlDark;
this.panelGray.Location = new System.Drawing.Point(51, 22);
this.panelGray.Name = "panelGray";
this.panelGray.Size = new System.Drawing.Size(39, 32);
this.panelGray.TabIndex = 1;
this.panelGray.MouseDown += new System.Windows.Forms.MouseEventHandler(this.PanelColor_MouseDown);
//
// panelWhite
//
this.panelWhite.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.panelWhite.Location = new System.Drawing.Point(6, 22);
this.panelWhite.Name = "panelWhite";
this.panelWhite.Size = new System.Drawing.Size(39, 32);
this.panelWhite.TabIndex = 0;
this.panelWhite.MouseDown += new System.Windows.Forms.MouseEventHandler(this.PanelColor_MouseDown);
//
// checkBoxAddСompartment
//
this.checkBoxAddСompartment.AutoSize = true;
this.checkBoxAddСompartment.Location = new System.Drawing.Point(17, 142);
this.checkBoxAddСompartment.Name = "checkBoxAddСompartment";
this.checkBoxAddСompartment.Size = new System.Drawing.Size(351, 19);
this.checkBoxAddСompartment.TabIndex = 5;
this.checkBoxAddСompartment.Text = "Признак наличия дополнительного пассажирского отсека";
this.checkBoxAddСompartment.UseVisualStyleBackColor = true;
//
// checkBoxAddEngine
//
this.checkBoxAddEngine.AutoSize = true;
this.checkBoxAddEngine.Location = new System.Drawing.Point(17, 106);
this.checkBoxAddEngine.Name = "checkBoxAddEngine";
this.checkBoxAddEngine.Size = new System.Drawing.Size(281, 19);
this.checkBoxAddEngine.TabIndex = 4;
this.checkBoxAddEngine.Text = "Признак наличия дополнительного двигателя";
this.checkBoxAddEngine.UseVisualStyleBackColor = true;
//
// numericUpDownWeight
//
this.numericUpDownWeight.Location = new System.Drawing.Point(89, 58);
this.numericUpDownWeight.Name = "numericUpDownWeight";
this.numericUpDownWeight.Size = new System.Drawing.Size(69, 23);
this.numericUpDownWeight.TabIndex = 3;
//
// numericUpDownSpeed
//
this.numericUpDownSpeed.Location = new System.Drawing.Point(89, 29);
this.numericUpDownSpeed.Name = "numericUpDownSpeed";
this.numericUpDownSpeed.Size = new System.Drawing.Size(69, 23);
this.numericUpDownSpeed.TabIndex = 2;
//
// labelWeight
//
this.labelWeight.AutoSize = true;
this.labelWeight.Location = new System.Drawing.Point(17, 66);
this.labelWeight.Name = "labelWeight";
this.labelWeight.Size = new System.Drawing.Size(29, 15);
this.labelWeight.TabIndex = 1;
this.labelWeight.Text = "Вес:";
//
// labelSpeed
//
this.labelSpeed.AutoSize = true;
this.labelSpeed.Location = new System.Drawing.Point(17, 31);
this.labelSpeed.Name = "labelSpeed";
this.labelSpeed.Size = new System.Drawing.Size(62, 15);
this.labelSpeed.TabIndex = 0;
this.labelSpeed.Text = "Скорость:";
//
// pictureBoxObject
//
this.pictureBoxObject.Location = new System.Drawing.Point(17, 41);
this.pictureBoxObject.Location = new System.Drawing.Point(17, 38);
this.pictureBoxObject.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
this.pictureBoxObject.Name = "pictureBoxObject";
this.pictureBoxObject.Size = new System.Drawing.Size(206, 71);
this.pictureBoxObject.Size = new System.Drawing.Size(206, 83);
this.pictureBoxObject.TabIndex = 1;
this.pictureBoxObject.TabStop = false;
//
// anelObject
// panelObject
//
this.anelObject.AllowDrop = true;
this.anelObject.Controls.Add(this.labelAddColor);
this.anelObject.Controls.Add(this.labelBaseColor);
this.anelObject.Controls.Add(this.pictureBoxObject);
this.anelObject.Location = new System.Drawing.Point(673, 2);
this.anelObject.Name = "anelObject";
this.anelObject.Size = new System.Drawing.Size(237, 124);
this.anelObject.TabIndex = 2;
this.anelObject.MouseDown += new System.Windows.Forms.MouseEventHandler(this.PanelColor_MouseDown);
//
// labelBaseColor
//
this.labelBaseColor.AllowDrop = true;
this.labelBaseColor.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.labelBaseColor.Location = new System.Drawing.Point(17, 10);
this.labelBaseColor.Name = "labelBaseColor";
this.labelBaseColor.Size = new System.Drawing.Size(100, 23);
this.labelBaseColor.TabIndex = 8;
this.labelBaseColor.Text = "Цвет";
this.labelBaseColor.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.labelBaseColor.MouseEnter += new System.EventHandler(this.PanelObject_DragEnter);
this.panelObject.AllowDrop = true;
this.panelObject.Controls.Add(this.pictureBoxObject);
this.panelObject.Controls.Add(this.labelAddColor);
this.panelObject.Controls.Add(this.labelBaseColor);
this.panelObject.Location = new System.Drawing.Point(673, 2);
this.panelObject.Name = "panelObject";
this.panelObject.Size = new System.Drawing.Size(237, 124);
this.panelObject.TabIndex = 2;
this.panelObject.DragDrop += new System.Windows.Forms.DragEventHandler(this.PanelObject_DragDrop);
this.panelObject.DragEnter += new System.Windows.Forms.DragEventHandler(this.PanelObject_DragEnter);
//
// labelAddColor
//
@ -276,6 +273,21 @@
this.labelAddColor.TabIndex = 9;
this.labelAddColor.Text = "Доп. цвет";
this.labelAddColor.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.labelAddColor.DragDrop += new System.Windows.Forms.DragEventHandler(this.LabelAddColor_DragDrop);
this.labelAddColor.DragEnter += new System.Windows.Forms.DragEventHandler(this.LabelColor_DragEnter);
//
// labelBaseColor
//
this.labelBaseColor.AllowDrop = true;
this.labelBaseColor.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.labelBaseColor.Location = new System.Drawing.Point(17, 10);
this.labelBaseColor.Name = "labelBaseColor";
this.labelBaseColor.Size = new System.Drawing.Size(100, 23);
this.labelBaseColor.TabIndex = 8;
this.labelBaseColor.Text = "Цвет";
this.labelBaseColor.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.labelBaseColor.DragDrop += new System.Windows.Forms.DragEventHandler(this.LabelBaseColor_DragDrop);
this.labelBaseColor.DragEnter += new System.Windows.Forms.DragEventHandler(this.LabelColor_DragEnter);
//
// buttonAddObject
//
@ -285,6 +297,7 @@
this.buttonAddObject.TabIndex = 3;
this.buttonAddObject.Text = "Добавить";
this.buttonAddObject.UseVisualStyleBackColor = true;
this.buttonAddObject.Click += new System.EventHandler(this.ButtonAddObject_Click);
//
// buttonCancel
//
@ -302,17 +315,17 @@
this.ClientSize = new System.Drawing.Size(933, 184);
this.Controls.Add(this.buttonCancel);
this.Controls.Add(this.buttonAddObject);
this.Controls.Add(this.anelObject);
this.Controls.Add(this.groupBoxConfig);
this.Controls.Add(this.panelObject);
this.Name = "FormPlaneConfig";
this.Text = "Создание объекта";
this.groupBoxConfig.ResumeLayout(false);
this.groupBoxConfig.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownSpeed)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownWeight)).EndInit();
this.groupBoxColors.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.numericUpDownWeight)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownSpeed)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBoxObject)).EndInit();
this.anelObject.ResumeLayout(false);
this.panelObject.ResumeLayout(false);
this.ResumeLayout(false);
}
@ -338,7 +351,7 @@
private Label labelWeight;
private Label labelSpeed;
private PictureBox pictureBoxObject;
private Panel anelObject;
private Panel panelObject;
private Label labelAddColor;
private Label labelBaseColor;
private Button buttonAddObject;

View File

@ -11,11 +11,11 @@ using System.Windows.Forms;
namespace Airbus
{
public partial class FormPlaneConfig : Form
{//переменная-выбранная машина
{//переменная-выбранный самолёт
DrawningAirbus _plane = null;
//событие
private event PlaneDelegate EventAddPlane;
private event Action<DrawningAirbus> EventAddPlane;
//конструктор
public FormPlaneConfig()
@ -29,6 +29,8 @@ namespace Airbus
panelWhite.MouseDown += PanelColor_MouseDown;
panelYellow.MouseDown += PanelColor_MouseDown;
panelBlue.MouseDown += PanelColor_MouseDown;
buttonCancel.Click += (object sender, EventArgs e) => Close();
}
//отрисовка самолёт
@ -41,11 +43,11 @@ namespace Airbus
pictureBoxObject.Image = bmp;
}
//добавление события
public void AddEvent(PlaneDelegate ev)
public void AddEvent(Action<DrawningAirbus> ev)
{
if (EventAddPlane == null)
if(EventAddPlane == null)
{
EventAddPlane = new PlaneDelegate(ev);
EventAddPlane = new Action<DrawningAirbus>(ev);
}
else
{
@ -56,7 +58,6 @@ namespace Airbus
{
(sender as Label).DoDragDrop((sender as Label).Name, DragDropEffects.Move | DragDropEffects.Copy);
}
//проверка получаемой информации (ее типа на соответствие требуемому)
private void PanelObject_DragEnter(object sender, DragEventArgs e)
{
@ -90,13 +91,13 @@ namespace Airbus
//отправляем цвет с панели
private void PanelColor_MouseDown(object sender, MouseEventArgs e)
{
(sender as Control).DoDragDrop((sender as Control).Name, DragDropEffects.Move | DragDropEffects.Copy);
(sender as Control).DoDragDrop((sender as Control).BackColor, DragDropEffects.Move | DragDropEffects.Copy);
}
//проверка получаемой информации (её типа на соответсвие требуемому)
private void LabelBaseColor_DragEnter(object sender, DragEventArgs e)
private void LabelColor_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Text))
if (e.Data.GetDataPresent(typeof(Color)))
{
e.Effect = DragDropEffects.Copy;
}
@ -109,77 +110,23 @@ namespace Airbus
//принимаем основной цвет
private void LabelBaseColor_DragDrop(object sender, DragEventArgs e)
{
switch (e.Data.GetData(DataFormats.Text).ToString())
//проверка на пустоту объекта
if (_plane != null)
{
case "panelRed":
labelBaseColor.BackColor = Color.Red;
break;
case "panelBlack":
labelBaseColor.BackColor = Color.Black;
break;
case "panelGreen":
labelBaseColor.BackColor = Color.Green;
break;
case "panelYellow":
labelBaseColor.BackColor = Color.Yellow;
break;
case "panelBlue":
labelBaseColor.BackColor = Color.Blue;
break;
case "panelPurple":
labelBaseColor.BackColor = Color.Purple;
break;
case "panelGray":
labelBaseColor.BackColor = Color.DarkGray;
break;
case "panelWhite":
labelBaseColor.BackColor = Color.White;
break;
}
}
//проверка получаемой информации (её типа на соответсвие требуемому)
private void LabelAddColor_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Text))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
_plane.Airbus.CorpusColor = (Color)e.Data.GetData(typeof(Color));
DrawPlane();
}
}
//принимаем дополнительный цвет
private void labelAddColor_DragDrop(object sender, DragEventArgs e)
private void LabelAddColor_DragDrop(object sender, DragEventArgs e)
{
switch (e.Data.GetData(DataFormats.Text).ToString())
//проверка на пустоту объекта и правильную сущноть
if (_plane != null && _plane.Airbus is EntitySuperAirbus entityAirbus)
{
case "panelRed":
labelAddColor.BackColor = Color.Red;
break;
case "panelBlack":
labelAddColor.BackColor = Color.Black;
break;
case "panelGreen":
labelAddColor.BackColor = Color.Green;
break;
case "panelYellow":
labelAddColor.BackColor = Color.Yellow;
break;
case "panelBlue":
labelAddColor.BackColor = Color.Blue;
break;
case "panelPurple":
labelAddColor.BackColor = Color.Purple;
break;
case "panelGray":
labelAddColor.BackColor = Color.DarkGray;
break;
case "panelWhite":
labelAddColor.BackColor = Color.White;
break;
entityAirbus.AddColor = (Color)e.Data.GetData(typeof(Color));
DrawPlane();
}
}
@ -189,12 +136,5 @@ namespace Airbus
EventAddPlane?.Invoke(_plane);
Close();
}
//закрытие формы конфигурации
private void ButtonCancel_Click(object sender, EventArgs e)
{
Close();
}
}
}

View File

@ -22,5 +22,8 @@ namespace Airbus
//получение текущей позиции объекта
(float Left, float Right, float Top, float Bottom) GetCurrentPosition();
//получение информации по объекту
string GetInfo();
}
}

View File

@ -82,6 +82,27 @@ namespace Airbus
return new(_pictureWidth, _pictureHeight);
}
//получение данных в виде строки
public string GetData(char separatorType, char separatorData)
{
string data = $"{_map.GetType().Name}{separatorType}";
foreach (var plane in _setPlanes.GetAirbus())
{
data += $"{plane.GetInfo()}{separatorData}";
}
return data;
}
//Загрузка списка из массива строк
public void LoadData(string[] records)
{
foreach (var rec in records)
{
_setPlanes.Insert(DrawningObjectPlane.Create(rec) as T);
}
}
//"взламываем" набор, чтобы все элементы оказались в начале
private void Shaking()

View File

@ -10,11 +10,17 @@ namespace Airbus
internal class MapsCollection
{
//словарь (хранилище) с картами
readonly Dictionary<string, MapWithSetPlanesGeneric<DrawningObjectPlane, AbstractMap>> _mapStorage;
readonly Dictionary<string, MapWithSetPlanesGeneric<IDrawningObject, AbstractMap>> _mapStorage;
//возвращение списка названий карт
public List<string> Keys => _mapStorage.Keys.ToList();
//разделитель для записи информации по элементу словаря в файл
private readonly char separatorDict = '|';
//разделитель для записи коллекции данных в файл
private readonly char separatorData = ';';
//ширина окна отрисовки
private readonly int _pictureWidth;
@ -24,7 +30,7 @@ namespace Airbus
//конструктор
public MapsCollection(int pictureWidth, int pictureHeight)
{
_mapStorage = new Dictionary<string, MapWithSetPlanesGeneric<DrawningObjectPlane, AbstractMap>>();
_mapStorage = new Dictionary<string, MapWithSetPlanesGeneric<IDrawningObject, AbstractMap>>();
_pictureWidth = pictureWidth;
_pictureHeight = pictureHeight;
}
@ -32,23 +38,105 @@ namespace Airbus
//добавление карты
public void AddMap(string name, AbstractMap map)
{
var NewElem = new MapWithSetPlanesGeneric<DrawningObjectPlane, AbstractMap>(
_pictureWidth, _pictureHeight, map);
_mapStorage.Add(name, NewElem);
if (!_mapStorage.ContainsKey(name))
{
_mapStorage.Add(name, new MapWithSetPlanesGeneric<IDrawningObject, AbstractMap>(_pictureWidth, _pictureHeight, map));
}
}
//удаление карты
public void DelMap(string name)
{
_mapStorage.Remove(name);
if (_mapStorage.ContainsKey(name))
{
_mapStorage.Remove(name);
}
}
//Доступ к аэродрому
public MapWithSetPlanesGeneric<DrawningObjectPlane, AbstractMap> this[string ind]
// сохранение информации по автомобилям в хранилище в файл
public bool SaveData(string filename)
{
if (File.Exists(filename))
{
File.Delete(filename);
}
using (StreamWriter sw = new(filename))
{
sw.Write($"MapsCollection{Environment.NewLine}");
foreach (var storage in _mapStorage)
{
sw.Write($"{storage.Key}{separatorDict}{storage.Value.GetData(separatorDict, separatorData)}" +
$"{Environment.NewLine}");
}
}
return true;
}
// загрузка информации по автомобилям на парковках из файла
public bool LoadData(string filename)
{
if (!File.Exists(filename))
{
return false;
}
using (StreamReader sr = new(filename))
{
string str = "";
//если не содержит такую запись или пустой файл
if ((str = sr.ReadLine()) == null || !str.Contains("MapsCollection"))
{
return false;
}
_mapStorage.Clear();
while ((str = sr.ReadLine()) != null)
{
var element = str.Split(separatorDict);
AbstractMap map = null;
switch (element[1])
{
case "SimpleMap":
map = new SimpleMap();
break;
case "DesertMap":
map = new DesertMap();
break;
case "SpaceMap":
map = new SpaceMap();
break;
}
_mapStorage.Add(element[0], new MapWithSetPlanesGeneric<IDrawningObject, AbstractMap>(_pictureWidth, _pictureHeight, map));
_mapStorage[element[0]].LoadData(element[2].Split(separatorData, StringSplitOptions.RemoveEmptyEntries));
}
}
return true;
}
//доступ к аэродрому
public MapWithSetPlanesGeneric<IDrawningObject, AbstractMap> this[string ind]
{
get
{
return _mapStorage[ind];
if (ind != string.Empty)
{
MapWithSetPlanesGeneric<IDrawningObject, AbstractMap> value;
if (_mapStorage.TryGetValue(ind, out value))
{
return value;
}
}
return null;
}
}
}

View File

@ -1,5 +0,0 @@
namespace Airbus
{
//делегат для передачи объекта-самолёта
public delegate void PlaneDelegate(DrawningAirbus plane);
}