diff --git a/ProjectPlane/ProjectPlane/CollectionGenericObjects/AbstractCompany.cs b/ProjectPlane/ProjectPlane/CollectionGenericObjects/AbstractCompany.cs index 2cd7b96..9365d11 100644 --- a/ProjectPlane/ProjectPlane/CollectionGenericObjects/AbstractCompany.cs +++ b/ProjectPlane/ProjectPlane/CollectionGenericObjects/AbstractCompany.cs @@ -49,7 +49,7 @@ namespace ProjectPlane.CollectionGenericObjects _pictureWidth = picWidth; _pictureHeight = picHeight; _collection = collection; - _collection.SetMaxCount = GetMaxCount; + _collection.MaxCount = GetMaxCount; } /// diff --git a/ProjectPlane/ProjectPlane/CollectionGenericObjects/PlaneDockingService.cs b/ProjectPlane/ProjectPlane/CollectionGenericObjects/CruiserDockingService.cs similarity index 100% rename from ProjectPlane/ProjectPlane/CollectionGenericObjects/PlaneDockingService.cs rename to ProjectPlane/ProjectPlane/CollectionGenericObjects/CruiserDockingService.cs diff --git a/ProjectPlane/ProjectPlane/CollectionGenericObjects/ICollectionGenericObjects.cs b/ProjectPlane/ProjectPlane/CollectionGenericObjects/ICollectionGenericObjects.cs index 82b3e06..bccde16 100644 --- a/ProjectPlane/ProjectPlane/CollectionGenericObjects/ICollectionGenericObjects.cs +++ b/ProjectPlane/ProjectPlane/CollectionGenericObjects/ICollectionGenericObjects.cs @@ -15,7 +15,7 @@ /// /// Установка максимального количества элементов /// - int SetMaxCount { set; } + int MaxCount { get; set; } /// /// Добавление объекта в коллекцию @@ -45,6 +45,17 @@ /// Позиция /// Объект T? Get(int position); + + /// + /// Получение типа коллекции + /// + CollectionType GetCollectionType { get; } + /// + /// Получение объектов коллекции по одному + /// + /// Поэлементый вывод элементов коллекции + IEnumerable GetItems(); + } } diff --git a/ProjectPlane/ProjectPlane/CollectionGenericObjects/ListGenericObjects.cs b/ProjectPlane/ProjectPlane/CollectionGenericObjects/ListGenericObjects.cs index 1a5be04..495465b 100644 --- a/ProjectPlane/ProjectPlane/CollectionGenericObjects/ListGenericObjects.cs +++ b/ProjectPlane/ProjectPlane/CollectionGenericObjects/ListGenericObjects.cs @@ -16,7 +16,20 @@ /// private int _maxCount; public int Count => _collection.Count; - public int SetMaxCount { set { if (value > 0) { _maxCount = value; } } } + public int MaxCount + { + get => _maxCount; + set + { + if (value > 0) + { + _maxCount = value; + } + } + } + + public CollectionType GetCollectionType => CollectionType.List; + /// /// Конструктор /// @@ -61,5 +74,13 @@ _collection.RemoveAt(position); return obj; } + + public IEnumerable GetItems() + { + for (int i = 0; i < _collection.Count; ++i) + { + yield return _collection[i]; + } + } } } diff --git a/ProjectPlane/ProjectPlane/CollectionGenericObjects/MassiveGenericObjects.cs b/ProjectPlane/ProjectPlane/CollectionGenericObjects/MassiveGenericObjects.cs index 9c641a5..392e63c 100644 --- a/ProjectPlane/ProjectPlane/CollectionGenericObjects/MassiveGenericObjects.cs +++ b/ProjectPlane/ProjectPlane/CollectionGenericObjects/MassiveGenericObjects.cs @@ -14,8 +14,12 @@ namespace ProjectPlane.CollectionGenericObjects /// private T?[] _collection; public int Count => _collection.Length; - public int SetMaxCount + public int MaxCount { + get + { + return _collection.Length; + } set { if (value > 0) @@ -32,6 +36,8 @@ namespace ProjectPlane.CollectionGenericObjects } } + public CollectionType GetCollectionType => CollectionType.Massive; + /// /// Конструктор /// @@ -111,5 +117,13 @@ namespace ProjectPlane.CollectionGenericObjects _collection[position] = null; return obj; } + + public IEnumerable GetItems() + { + for (int i = 0; i < _collection.Length; ++i) + { + yield return _collection[i]; + } + } } } diff --git a/ProjectPlane/ProjectPlane/CollectionGenericObjects/StorageCollection.cs b/ProjectPlane/ProjectPlane/CollectionGenericObjects/StorageCollection.cs index 391eaff..ee4f5cd 100644 --- a/ProjectPlane/ProjectPlane/CollectionGenericObjects/StorageCollection.cs +++ b/ProjectPlane/ProjectPlane/CollectionGenericObjects/StorageCollection.cs @@ -1,10 +1,13 @@ -namespace ProjectPlane.CollectionGenericObjects +using ProjectPlane.Drawnings; +using System.Text; + +namespace ProjectPlane.CollectionGenericObjects { // Класс-хранилище коллекций /// /// public class StorageCollection - where T : class + where T : DrawningPlane { /// /// Словарь (хранилище) с коллекциями @@ -16,6 +19,21 @@ /// public List Keys => _storages.Keys.ToList(); + /// + /// Ключевое слово, с которого должен начинаться файл + /// + private readonly string _collectionKey = "CollectionsStorage"; + + /// + /// Разделитель для записи ключа и значения элемента словаря + /// + private readonly string _separatorForKeyValue = "|"; + + /// + /// Разделитель для записей коллекции данных в файл + /// + private readonly string _separatorItems = ";"; + /// /// Конструктор /// @@ -69,5 +87,126 @@ return null; } } + + /// + /// Сохранение информации по автомобилям в хранилище в файл + /// + /// Путь и имя файла + /// true - сохранение прошло успешно, false - ошибка при сохранении данных + public bool SaveData(string filename) + { + if (_storages.Count == 0) + { + return false; + } + if (File.Exists(filename)) + { + File.Delete(filename); + } + using (StreamWriter writer = new StreamWriter(filename)) + { + writer.Write(_collectionKey); + foreach (KeyValuePair> value in _storages) + { + StringBuilder sb = new(); + sb.Append(Environment.NewLine); + // не сохраняем пустые коллекции + if (value.Value.Count == 0) + { + continue; + } + + sb.Append(value.Key); + sb.Append(_separatorForKeyValue); + sb.Append(value.Value.GetCollectionType); + sb.Append(_separatorForKeyValue); + sb.Append(value.Value.MaxCount); + sb.Append(_separatorForKeyValue); + foreach (T? item in value.Value.GetItems()) + { + string data = item?.GetDataForSave() ?? string.Empty; + if (string.IsNullOrEmpty(data)) + { + continue; + } + sb.Append(data); + sb.Append(_separatorItems); + } + writer.Write(sb); + } + } + return true; + } + + /// + /// Загрузка информации по автомобилям в хранилище из файла + /// + /// Путь и имя файла + /// true - загрузка прошла успешно, false - ошибка при загрузке данных + public bool LoadData(string filename) + { + if (!File.Exists(filename)) + { + return false; + } + using (StreamReader fs = File.OpenText(filename)) + { + string str = fs.ReadLine(); + if (str == null || str.Length == 0) + { + return false; + } + if (!str.StartsWith(_collectionKey)) + { + return false; + } + _storages.Clear(); + string strs = ""; + while ((strs = fs.ReadLine()) != null) + { + string[] record = strs.Split(_separatorForKeyValue, StringSplitOptions.RemoveEmptyEntries); + if (record.Length != 4) + { + continue; + } + CollectionType collectionType = (CollectionType)Enum.Parse(typeof(CollectionType), record[1]); + ICollectionGenericObjects? collection = StorageCollection.CreateCollection(collectionType); + if (collection == null) + { + return false; + } + collection.MaxCount = Convert.ToInt32(record[2]); + string[] set = record[3].Split(_separatorItems, StringSplitOptions.RemoveEmptyEntries); + foreach (string elem in set) + { + if (elem?.CreateDrawningPlane() is T plane) + { + if (collection.Insert(plane) == -1) + { + return false; + } + } + } + _storages.Add(record[0], collection); + } + return true; + + } + } + + /// + /// Создание коллекции по типу + /// + /// + /// + private static ICollectionGenericObjects? CreateCollection(CollectionType collectionType) + { + return collectionType switch + { + CollectionType.Massive => new MassiveGenericObjects(), + CollectionType.List => new ListGenericObjects(), + _ => null, + }; + } } } diff --git a/ProjectPlane/ProjectPlane/PlaneDelegate.cs b/ProjectPlane/ProjectPlane/CruiserDelegate.cs similarity index 100% rename from ProjectPlane/ProjectPlane/PlaneDelegate.cs rename to ProjectPlane/ProjectPlane/CruiserDelegate.cs diff --git a/ProjectPlane/ProjectPlane/Drawnings/DrawningPlane.cs b/ProjectPlane/ProjectPlane/Drawnings/DrawningCruiser.cs similarity index 59% rename from ProjectPlane/ProjectPlane/Drawnings/DrawningPlane.cs rename to ProjectPlane/ProjectPlane/Drawnings/DrawningCruiser.cs index c6ef593..1eb1d83 100644 --- a/ProjectPlane/ProjectPlane/Drawnings/DrawningPlane.cs +++ b/ProjectPlane/ProjectPlane/Drawnings/DrawningCruiser.cs @@ -1,5 +1,4 @@ using ProjectPlane.Entities; -using System.Drawing.Drawing2D; namespace ProjectPlane.Drawnings; /// @@ -20,11 +19,11 @@ public class DrawningPlane /// private int? _pictureHeight; /// - /// Левая координата прорисовки автомобиля + /// Левая координата прорисовки самолета /// protected int? _startPosX; /// - /// Верхняя кооридната прорисовки автомобиля + /// Верхняя кооридната прорисовки самолета /// protected int? _startPosY; @@ -58,7 +57,7 @@ public class DrawningPlane /// /// Пустой онструктор /// - private DrawningPlane() + public DrawningPlane() { _pictureWidth = null; _pictureHeight = null; @@ -87,6 +86,15 @@ public class DrawningPlane _pictureHeight = drawningCarHeight; } + /// + /// конструктор + /// + /// + public DrawningPlane(EntityPlane entityPlane) + { + EntityPlane = entityPlane; + } + /// /// Установка границ поля /// @@ -184,6 +192,7 @@ public class DrawningPlane return false; } } + /// /// Прорисовка объекта /// @@ -195,61 +204,27 @@ public class DrawningPlane { return; } - Pen pen3 = new(EntityPlane.BodyColor, 2); - Pen pen = new(Color.Black, 2); - Pen pen5 = new(Color.Black, 4); - Pen pen2 = new(Color.Black, 6); - Pen pen4 = new(Color.White, 4); - Pen pen6 = new(Color.Black, 1); - Brush Brush = new SolidBrush(EntityPlane.BodyColor); - Brush Brush2 = new SolidBrush(Color.Black); - Brush glassBrush = new SolidBrush(Color.SkyBlue); - //Brush glassBrush2 = new SolidBrush(EntityPlane.AdditionalColor); - //Brush boatBrush = new HatchBrush(HatchStyle.ZigZag, EntityPlane.AdditionalColor, Color.FromArgb(163, 163, 163)); - //Brush additionalBrush = new SolidBrush(EntityPlane.AdditionalColor); + Pen pen = new(EntityPlane.BodyColor, 2); + Brush additionalBrush = new SolidBrush(Color.Black); //границы самолета + g.DrawLine(pen, _startPosX.Value, _startPosY.Value, _startPosX.Value + 105, _startPosY.Value); + g.DrawLine(pen, _startPosX.Value + 105, _startPosY.Value, _startPosX.Value + 147, _startPosY.Value + 24); - Point[] points = { new Point(_startPosX.Value + 5, _startPosY.Value + 20), new Point(_startPosX.Value + 20, _startPosY.Value + 15), new Point(_startPosX.Value + 35, _startPosY.Value + 15), new Point(_startPosX.Value + 50, _startPosY.Value), new Point(_startPosX.Value + 70, _startPosY.Value), new Point(_startPosX.Value + 80, _startPosY.Value + 10), new Point(_startPosX.Value + 135, _startPosY.Value + 20), new Point(_startPosX.Value + 143, _startPosY.Value), new Point(_startPosX.Value + 150, _startPosY.Value), new Point(_startPosX.Value + 150, _startPosY.Value + 25), new Point(_startPosX.Value + 90, _startPosY.Value + 30), new Point(_startPosX.Value + 15, _startPosY.Value + 30), new Point(_startPosX.Value + 10, _startPosY.Value + 25) }; - g.FillPolygon(Brush, points); - g.DrawPolygon(pen, points); + g.DrawLine(pen, _startPosX.Value, _startPosY.Value + 49, _startPosX.Value + 105, _startPosY.Value + 49); + g.DrawLine(pen, _startPosX.Value + 105, _startPosY.Value + 49, _startPosX.Value + 147, _startPosY.Value + 24); - //стёкла - Point[] glass1 = { new Point(_startPosX.Value + 35, _startPosY.Value + 15), new Point(_startPosX.Value + 50, _startPosY.Value), new Point(_startPosX.Value + 42, _startPosY.Value + 15) }; - g.FillPolygon(glassBrush, glass1); - g.DrawPolygon(pen, glass1); + g.DrawLine(pen, _startPosX.Value, _startPosY.Value, _startPosX.Value, _startPosY.Value + 49); - Point[] glass2 = { new Point(_startPosX.Value + 47, _startPosY.Value + 15), new Point(_startPosX.Value + 55, _startPosY.Value), new Point(_startPosX.Value + 55, _startPosY.Value + 15) }; - g.FillPolygon(glassBrush, glass2); - g.DrawPolygon(pen, glass2); + //внутренности самолета + g.DrawEllipse(pen, _startPosX.Value + 94, _startPosY.Value + 14, 19, 19); - Point[] glass3 = { new Point(_startPosX.Value + 60, _startPosY.Value + 15), new Point(_startPosX.Value + 65, _startPosY.Value + 7), new Point(_startPosX.Value + 70, _startPosY.Value + 7), new Point(_startPosX.Value + 75, _startPosY.Value + 15) }; - g.FillPolygon(glassBrush, glass3); - g.DrawPolygon(pen, glass3); + g.DrawRectangle(pen, _startPosX.Value + 63, _startPosY.Value + 11, 21, 28); + g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 17, 28, 14); - //крылья - g.FillEllipse(Brush2, _startPosX.Value + 47, _startPosY.Value - 2, 32, 7); - g.DrawLine(pen, _startPosX.Value + 60, _startPosY.Value, _startPosX.Value + 60, _startPosY.Value + 20); - g.DrawLine(pen4, _startPosX.Value + 40, _startPosY.Value - 3, _startPosX.Value + 80, _startPosY.Value - 3); - g.FillEllipse(Brush2, _startPosX.Value + 137, _startPosY.Value + 17, 15, 5); + //зад + g.FillRectangle(additionalBrush, _startPosX.Value - 3, _startPosY.Value + 7, 3, 14); + g.FillRectangle(additionalBrush, _startPosX.Value - 3, _startPosY.Value + 26, 3, 14); - - //пропелер - Point[] points2 = { new Point(_startPosX.Value + 10, _startPosY.Value + 20), new Point(_startPosX.Value + 10, _startPosY.Value + 25), new Point(_startPosX.Value + 3, _startPosY.Value + 22) }; - g.DrawPolygon(pen, points2); - g.FillEllipse(Brush2, _startPosX.Value + 1, _startPosY.Value + 10, 5, 13); - g.FillEllipse(Brush2, _startPosX.Value + 1, _startPosY.Value + 21, 5, 13); - - //колёса - g.DrawLine(pen, _startPosX.Value + 20, _startPosY.Value + 30, _startPosX.Value + 30, _startPosY.Value + 40); - g.DrawLine(pen, _startPosX.Value + 50, _startPosY.Value + 30, _startPosX.Value + 40, _startPosY.Value + 40); - g.DrawLine(pen, _startPosX.Value + 60, _startPosY.Value + 30, _startPosX.Value + 70, _startPosY.Value + 40); - g.DrawLine(pen, _startPosX.Value + 80, _startPosY.Value + 30, _startPosX.Value + 90, _startPosY.Value + 40); - g.DrawLine(pen5, _startPosX.Value + 10, _startPosY.Value + 41, _startPosX.Value + 90, _startPosY.Value + 41); - g.DrawLine(pen, _startPosX.Value + 10, _startPosY.Value + 40, _startPosX.Value + 5, _startPosY.Value + 45); - g.DrawLine(pen, _startPosX.Value + 5, _startPosY.Value + 45, _startPosX.Value + 10, _startPosY.Value + 47); - g.DrawLine(pen, _startPosX.Value + 90, _startPosY.Value + 40, _startPosX.Value + 90, _startPosY.Value + 50); - g.FillEllipse(Brush2, _startPosX.Value + 7, _startPosY.Value + 43, 8, 8); - g.FillEllipse(Brush2, _startPosX.Value + 85, _startPosY.Value + 43, 8, 8); } } \ No newline at end of file diff --git a/ProjectPlane/ProjectPlane/Drawnings/DrawningMilitaryCruiser.cs b/ProjectPlane/ProjectPlane/Drawnings/DrawningMilitaryCruiser.cs new file mode 100644 index 0000000..5c739a3 --- /dev/null +++ b/ProjectPlane/ProjectPlane/Drawnings/DrawningMilitaryCruiser.cs @@ -0,0 +1,75 @@ +using System.Drawing.Drawing2D; +using ProjectPlane.Entities; + +namespace ProjectPlane.Drawnings +{ + public class DrawningSeaPlane : DrawningPlane + { + /// + /// Конструктор + /// + /// Скорость + /// Вес + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия линии + /// Признак наличия шлюпки + /// Признак наличия поплавков + + public DrawningSeaPlane(int speed, double weight, Color bodyColor, Color additionalColor, bool line, bool boat, bool floats) + : base(150, 50) + { + EntityPlane = new EntitySeaPlane(speed, weight, bodyColor, additionalColor, line, boat, floats); + } + + public DrawningSeaPlane(EntityPlane entityPlane) + { + if (entityPlane != null) + { + EntityPlane = entityPlane; + } + } + + public override void DrawTransport(Graphics g) + { + if (EntityPlane == null || EntityPlane is not EntitySeaPlane entitySeaPlane || !_startPosX.HasValue || + !_startPosY.HasValue) + { + return; + } + + Pen pen = new(entitySeaPlane.BodyColor, 2); + Brush additionalBrush = new SolidBrush(Color.Black); + Brush floatsBrush = new SolidBrush(Color.Black); + Brush floatsBrush2 = new SolidBrush(entitySeaPlane.AdditionalColor); + Brush lineBrush = new HatchBrush(HatchStyle.ZigZag, entitySeaPlane.AdditionalColor, Color.FromArgb(163, 163, 163)); + Brush boatBrush = new SolidBrush(entitySeaPlane.AdditionalColor); + + base.DrawTransport(g); + + if (entitySeaPlane.Line) + { + g.FillEllipse(lineBrush, _startPosX.Value + 5, _startPosY.Value + 9, 25, 30); + g.DrawEllipse(pen, _startPosX.Value + 5, _startPosY.Value + 9, 25, 30); + } + + if (entitySeaPlane.Boat) + { + g.DrawEllipse(pen, _startPosX.Value + 34, _startPosY.Value + 2, 30, 7); + g.FillEllipse(boatBrush, _startPosX.Value + 34, _startPosY.Value + 2, 30, 7); + + g.DrawEllipse(pen, _startPosX.Value + 34, _startPosY.Value + 39, 30, 7); + g.FillEllipse(boatBrush, _startPosX.Value + 34, _startPosY.Value + 39, 30, 7); + } + + if (entitySeaPlane.Floats) + { + g.DrawEllipse(pen, _startPosX.Value + 97, _startPosY.Value + 36, 10, 10); + g.FillEllipse(floatsBrush2, _startPosX.Value + 97, _startPosY.Value + 36, 10, 10); + + g.FillRectangle(floatsBrush, _startPosX.Value + 107, _startPosY.Value + 40, 15, 5); + } + + } + } +} diff --git a/ProjectPlane/ProjectPlane/Drawnings/DrawningSeaPlane.cs b/ProjectPlane/ProjectPlane/Drawnings/DrawningSeaPlane.cs deleted file mode 100644 index 3619f79..0000000 --- a/ProjectPlane/ProjectPlane/Drawnings/DrawningSeaPlane.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System.Drawing.Drawing2D; -using ProjectPlane.Entities; - -namespace ProjectPlane.Drawnings -{ - public class DrawningSeaPlane : DrawningPlane - { - - /// - /// Конструктор - /// - /// Скорость - /// Вес - /// Основной цвет - /// Дополнительный цвет - /// Признак наличия линии - /// Признак наличия шлюпки - /// Признак наличия поплавков - - public DrawningSeaPlane(int speed, double weight, Color bodyColor, Color additionalColor, bool line, bool boat, bool floats) - : base(150, 50) - { - EntityPlane = new EntitySeaPlane(speed, weight, bodyColor, additionalColor, line, boat, floats); - } - - public override void DrawTransport(Graphics g) - { - if (EntityPlane == null || EntityPlane is not EntitySeaPlane entitySeaPlane || !_startPosX.HasValue || - !_startPosY.HasValue) - { - return; - } - - Pen pen3 = new(EntityPlane.BodyColor, 2); - Pen pen = new(Color.Black, 2); - Pen pen5 = new(Color.Black, 4); - Pen pen2 = new(Color.Black, 6); - Pen pen4 = new(Color.White, 4); - Pen pen6 = new(Color.Black, 1); - Brush Brush = new SolidBrush(EntityPlane.BodyColor); - Brush Brush2 = new SolidBrush(Color.Black); - Brush glassBrush = new SolidBrush(Color.SkyBlue); - Brush glassBrush2 = new SolidBrush(entitySeaPlane.AdditionalColor); - Brush boatBrush = new HatchBrush(HatchStyle.ZigZag, entitySeaPlane.AdditionalColor, Color.FromArgb(163, 163, 163)); - Brush additionalBrush = new SolidBrush(entitySeaPlane.AdditionalColor); - - base.DrawTransport(g); - - //внутренности самолета - - //g.DrawRectangle(pen, _startPosX.Value + 25, _startPosY.Value + 10, 80, 30); - //g.FillRectangle(additionalBrush, _startPosX.Value + 25, _startPosY.Value + 10, 80, 30); - - - - - if (entitySeaPlane.Line) - { - Point[] points3 = { new Point(_startPosX.Value + 35, _startPosY.Value + 15), new Point(_startPosX.Value + 20, _startPosY.Value + 15), new Point(_startPosX.Value + 10, _startPosY.Value + 20), new Point(_startPosX.Value + 10, _startPosY.Value + 25), new Point(_startPosX.Value + 15, _startPosY.Value + 30), new Point(_startPosX.Value + 145, _startPosY.Value + 20), new Point(_startPosX.Value + 140, _startPosY.Value + 20), new Point(_startPosX.Value + 140, _startPosY.Value + 10), new Point(_startPosX.Value + 135, _startPosY.Value + 20), new Point(_startPosX.Value + 30, _startPosY.Value + 20) }; - g.FillPolygon(additionalBrush, points3); - g.DrawPolygon(pen6, points3); - - } - - if (entitySeaPlane.Floats) - { - Point[] points4 = { new Point(_startPosX.Value + 10, _startPosY.Value + 40), new Point(_startPosX.Value + 110, _startPosY.Value + 40), new Point(_startPosX.Value + 110, _startPosY.Value + 41), new Point(_startPosX.Value + 70, _startPosY.Value + 50), new Point(_startPosX.Value + 30, _startPosY.Value + 50) }; - g.FillPolygon(additionalBrush, points4); - g.DrawPolygon(pen, points4); - g.DrawLine(pen, _startPosX.Value + 30, _startPosY.Value + 45, _startPosX.Value + 80, _startPosY.Value + 45); - } - - if (entitySeaPlane.Boat) - { - g.DrawRectangle(pen, _startPosX.Value + 85, _startPosY.Value + 15, 25, 10); - g.FillRectangle(boatBrush, _startPosX.Value + 85, _startPosY.Value + 15, 25, 10); - Point[] points5 = { new Point(_startPosX.Value + 80, _startPosY.Value + 15), new Point(_startPosX.Value + 85, _startPosY.Value + 10), new Point(_startPosX.Value + 115, _startPosY.Value + 10), new Point(_startPosX.Value + 115, _startPosY.Value + 15), new Point(_startPosX.Value + 85, _startPosY.Value + 15), new Point(_startPosX.Value + 85, _startPosY.Value + 25), new Point(_startPosX.Value + 115, _startPosY.Value + 25), new Point(_startPosX.Value + 115, _startPosY.Value + 30), new Point(_startPosX.Value + 85, _startPosY.Value + 30), new Point(_startPosX.Value + 80, _startPosY.Value + 25) }; - g.FillPolygon(additionalBrush, points5); - g.DrawPolygon(pen, points5); - - - - } - - } - } -} diff --git a/ProjectPlane/ProjectPlane/Drawnings/ExtentionDrawningCruiser.cs b/ProjectPlane/ProjectPlane/Drawnings/ExtentionDrawningCruiser.cs new file mode 100644 index 0000000..c35fad1 --- /dev/null +++ b/ProjectPlane/ProjectPlane/Drawnings/ExtentionDrawningCruiser.cs @@ -0,0 +1,50 @@ +using ProjectPlane.Entities; + +namespace ProjectPlane.Drawnings +{ + public static class ExtentionDrawningPlane + { + /// + /// Разделитель для записи информации по объекту в файл + /// + private static readonly string _separatorForObject = ":"; + + /// + /// Создание объекта из строки + /// + /// Строка с данными для создания объекта + /// Объект + public static DrawningPlane? CreateDrawningPlane(this string info) + { + string[] strs = info.Split(_separatorForObject); + EntityPlane? plane = EntitySeaPlane.CreateEntitySeaPlane(strs); + if (plane != null) + { + return new DrawningSeaPlane(plane); + } + + plane = EntityPlane.CreateEntityPlane(strs); + if (plane != null) + { + return new DrawningPlane(plane); + } + return null; + } + + /// + /// Получение данных для сохранения в файл + /// + /// Сохраняемый объект + /// Строка с данными по объекту + public static string GetDataForSave(this DrawningPlane drawningCrusier) + { + string[]? array = drawningCrusier?.EntityPlane?.GetStringRepresentation(); + if (array == null) + { + return string.Empty; + } + return string.Join(_separatorForObject, array); + } + + } +} diff --git a/ProjectPlane/ProjectPlane/Entities/EntityPlane.cs b/ProjectPlane/ProjectPlane/Entities/EntityCruiser.cs similarity index 58% rename from ProjectPlane/ProjectPlane/Entities/EntityPlane.cs rename to ProjectPlane/ProjectPlane/Entities/EntityCruiser.cs index eab0c16..5b8ee7b 100644 --- a/ProjectPlane/ProjectPlane/Entities/EntityPlane.cs +++ b/ProjectPlane/ProjectPlane/Entities/EntityCruiser.cs @@ -10,10 +10,12 @@ public class EntityPlane /// Скорость /// public int Speed { get; private set; } + /// /// Вес /// public double Weight { get; private set; } + /// /// Основной цвет /// @@ -22,10 +24,12 @@ public class EntityPlane { BodyColor = color; } + /// /// Шаг перемещения автомобиля /// public double Step => Speed * 100 / Weight; + /// /// Инициализация полей объекта-класса самолета /// @@ -38,4 +42,28 @@ public class EntityPlane Weight = weight; BodyColor = bodyColor; } + + /// + /// Получение строк со значениями свойств объекта класса-сущности + /// + /// + public virtual string[] GetStringRepresentation() + { + return new[] { nameof(EntityPlane), Speed.ToString(), Weight.ToString(), BodyColor.Name }; + } + + /// + /// Создание объекта из массива строк + /// + /// + /// + public static EntityPlane? CreateEntityPlane(string[] strs) + { + if (strs.Length != 4 || strs[0] != nameof(EntityPlane)) + { + return null; + } + + return new EntityPlane(Convert.ToInt32(strs[1]), Convert.ToDouble(strs[2]), Color.FromName(strs[3])); + } } diff --git a/ProjectPlane/ProjectPlane/Entities/EntitySeaPlane.cs b/ProjectPlane/ProjectPlane/Entities/EntityMilitaryCruiser.cs similarity index 51% rename from ProjectPlane/ProjectPlane/Entities/EntitySeaPlane.cs rename to ProjectPlane/ProjectPlane/Entities/EntityMilitaryCruiser.cs index f978880..307a3ed 100644 --- a/ProjectPlane/ProjectPlane/Entities/EntitySeaPlane.cs +++ b/ProjectPlane/ProjectPlane/Entities/EntityMilitaryCruiser.cs @@ -6,14 +6,17 @@ /// Признак (опция) наличие линии /// public bool Line { get; private set; } + /// /// Признак (опция) наличие шлюпки /// public bool Boat { get; private set; } + /// /// Признак (опция) наличие поплавков /// public bool Floats { get; private set; } + /// /// Дополнительный цвет (для опциональных элементов) /// @@ -22,6 +25,7 @@ { AdditionalColor = color; } + public EntitySeaPlane(int speed, double weight, Color bodyColor, Color additionalColor, bool line, bool boat, bool floats) : base(speed, weight, bodyColor) { AdditionalColor = additionalColor; @@ -29,5 +33,30 @@ Boat = boat; Floats = floats; } + + /// + /// Получение строк со значениями свойств объекта класса-сущности + /// + /// + public override string[] GetStringRepresentation() + { + return new[] { nameof(EntityPlane), Speed.ToString(), Weight.ToString(), BodyColor.Name, AdditionalColor.Name, + Line.ToString(), Boat.ToString(), Floats.ToString() }; + } + + /// + /// Создание объекта из массива строк + /// + /// + /// + public static EntityPlane? CreateEntitySeaPlane(string[] strs) + { + if (strs.Length != 8 || strs[0] != nameof(EntityPlane)) + { + return null; + } + return new EntitySeaPlane(Convert.ToInt32(strs[1]), Convert.ToDouble(strs[2]), Color.FromName(strs[3]), Color.FromName(strs[4]), + Convert.ToBoolean(strs[5]), Convert.ToBoolean(strs[6]), Convert.ToBoolean(strs[7])); + } } } diff --git a/ProjectPlane/ProjectPlane/FormPlane.Designer.cs b/ProjectPlane/ProjectPlane/FormCruiser.Designer.cs similarity index 100% rename from ProjectPlane/ProjectPlane/FormPlane.Designer.cs rename to ProjectPlane/ProjectPlane/FormCruiser.Designer.cs diff --git a/ProjectPlane/ProjectPlane/FormPlane.cs b/ProjectPlane/ProjectPlane/FormCruiser.cs similarity index 98% rename from ProjectPlane/ProjectPlane/FormPlane.cs rename to ProjectPlane/ProjectPlane/FormCruiser.cs index 21d383d..5d2d65f 100644 --- a/ProjectPlane/ProjectPlane/FormPlane.cs +++ b/ProjectPlane/ProjectPlane/FormCruiser.cs @@ -41,7 +41,7 @@ namespace ProjectPlane } /// - /// Метод прорисовки круисера + /// Метод прорисовки самолета /// private void Draw() { diff --git a/ProjectPlane/ProjectPlane/FormPlane.resx b/ProjectPlane/ProjectPlane/FormCruiser.resx similarity index 100% rename from ProjectPlane/ProjectPlane/FormPlane.resx rename to ProjectPlane/ProjectPlane/FormCruiser.resx diff --git a/ProjectPlane/ProjectPlane/FormPlaneConfing.Designer.cs b/ProjectPlane/ProjectPlane/FormCruiserConfing.Designer.cs similarity index 75% rename from ProjectPlane/ProjectPlane/FormPlaneConfing.Designer.cs rename to ProjectPlane/ProjectPlane/FormCruiserConfing.Designer.cs index 2f60473..36d0704 100644 --- a/ProjectPlane/ProjectPlane/FormPlaneConfing.Designer.cs +++ b/ProjectPlane/ProjectPlane/FormCruiserConfing.Designer.cs @@ -38,9 +38,9 @@ panelBlue = new Panel(); panelGreen = new Panel(); panelRed = new Panel(); - checkBoxLine = new CheckBox(); - checkBoxBoat = new CheckBox(); checkBoxFloats = new CheckBox(); + checkBoxBoat = new CheckBox(); + checkBoxLine = new CheckBox(); numericUpDownWeight = new NumericUpDown(); labelWeight = new Label(); numericUpDownSpeed = new NumericUpDown(); @@ -64,9 +64,9 @@ // groupBoxConfing // groupBoxConfing.Controls.Add(groupBoxColors); - groupBoxConfing.Controls.Add(checkBoxLine); - groupBoxConfing.Controls.Add(checkBoxBoat); groupBoxConfing.Controls.Add(checkBoxFloats); + groupBoxConfing.Controls.Add(checkBoxBoat); + groupBoxConfing.Controls.Add(checkBoxLine); groupBoxConfing.Controls.Add(numericUpDownWeight); groupBoxConfing.Controls.Add(labelWeight); groupBoxConfing.Controls.Add(numericUpDownSpeed); @@ -75,10 +75,8 @@ groupBoxConfing.Controls.Add(labelSimpleObject); groupBoxConfing.Dock = DockStyle.Left; groupBoxConfing.Location = new Point(0, 0); - groupBoxConfing.Margin = new Padding(3, 2, 3, 2); groupBoxConfing.Name = "groupBoxConfing"; - groupBoxConfing.Padding = new Padding(3, 2, 3, 2); - groupBoxConfing.Size = new Size(548, 196); + groupBoxConfing.Size = new Size(626, 262); groupBoxConfing.TabIndex = 0; groupBoxConfing.TabStop = false; groupBoxConfing.Text = "Параметры"; @@ -93,11 +91,9 @@ groupBoxColors.Controls.Add(panelBlue); groupBoxColors.Controls.Add(panelGreen); groupBoxColors.Controls.Add(panelRed); - groupBoxColors.Location = new Point(286, 20); - groupBoxColors.Margin = new Padding(3, 2, 3, 2); + groupBoxColors.Location = new Point(327, 26); groupBoxColors.Name = "groupBoxColors"; - groupBoxColors.Padding = new Padding(3, 2, 3, 2); - groupBoxColors.Size = new Size(245, 116); + groupBoxColors.Size = new Size(280, 154); groupBoxColors.TabIndex = 9; groupBoxColors.TabStop = false; groupBoxColors.Text = "Цвета"; @@ -105,155 +101,141 @@ // panelPurple // panelPurple.BackColor = Color.Purple; - panelPurple.Location = new Point(190, 72); - panelPurple.Margin = new Padding(3, 2, 3, 2); + panelPurple.Location = new Point(217, 96); panelPurple.Name = "panelPurple"; - panelPurple.Size = new Size(42, 35); + panelPurple.Size = new Size(48, 47); panelPurple.TabIndex = 1; // // panelBlack // panelBlack.BackColor = Color.Black; - panelBlack.Location = new Point(130, 72); - panelBlack.Margin = new Padding(3, 2, 3, 2); + panelBlack.Location = new Point(149, 96); panelBlack.Name = "panelBlack"; - panelBlack.Size = new Size(42, 35); + panelBlack.Size = new Size(48, 47); panelBlack.TabIndex = 1; // // panelGray // panelGray.BackColor = Color.Gray; - panelGray.Location = new Point(72, 72); - panelGray.Margin = new Padding(3, 2, 3, 2); + panelGray.Location = new Point(82, 96); panelGray.Name = "panelGray"; - panelGray.Size = new Size(42, 35); + panelGray.Size = new Size(48, 47); panelGray.TabIndex = 1; // // panelWhite // panelWhite.BackColor = Color.White; - panelWhite.Location = new Point(15, 72); - panelWhite.Margin = new Padding(3, 2, 3, 2); + panelWhite.Location = new Point(17, 96); panelWhite.Name = "panelWhite"; - panelWhite.Size = new Size(42, 35); + panelWhite.Size = new Size(48, 47); panelWhite.TabIndex = 1; // // panelYellow // panelYellow.BackColor = Color.Yellow; - panelYellow.Location = new Point(190, 23); - panelYellow.Margin = new Padding(3, 2, 3, 2); + panelYellow.Location = new Point(217, 31); panelYellow.Name = "panelYellow"; - panelYellow.Size = new Size(42, 35); + panelYellow.Size = new Size(48, 47); panelYellow.TabIndex = 1; // // panelBlue // panelBlue.BackColor = Color.Blue; - panelBlue.Location = new Point(130, 23); - panelBlue.Margin = new Padding(3, 2, 3, 2); + panelBlue.Location = new Point(149, 31); panelBlue.Name = "panelBlue"; - panelBlue.Size = new Size(42, 35); + panelBlue.Size = new Size(48, 47); panelBlue.TabIndex = 1; // // panelGreen // panelGreen.BackColor = Color.Green; - panelGreen.Location = new Point(72, 23); - panelGreen.Margin = new Padding(3, 2, 3, 2); + panelGreen.Location = new Point(82, 31); panelGreen.Name = "panelGreen"; - panelGreen.Size = new Size(42, 35); + panelGreen.Size = new Size(48, 47); panelGreen.TabIndex = 1; // // panelRed // panelRed.BackColor = Color.Red; - panelRed.Location = new Point(15, 23); - panelRed.Margin = new Padding(3, 2, 3, 2); + panelRed.Location = new Point(17, 31); panelRed.Name = "panelRed"; - panelRed.Size = new Size(42, 35); + panelRed.Size = new Size(48, 47); panelRed.TabIndex = 0; // - // checkBoxLine - // - checkBoxLine.AutoSize = true; - checkBoxLine.Location = new Point(5, 163); - checkBoxLine.Margin = new Padding(3, 2, 3, 2); - checkBoxLine.Name = "checkBoxLine"; - checkBoxLine.Size = new Size(185, 19); - checkBoxLine.TabIndex = 8; - checkBoxLine.Text = "Признак наличие поплавков"; - checkBoxLine.UseVisualStyleBackColor = true; - // - // checkBoxBoat - // - checkBoxBoat.AutoSize = true; - checkBoxBoat.Location = new Point(5, 127); - checkBoxBoat.Margin = new Padding(3, 2, 3, 2); - checkBoxBoat.Name = "checkBoxBoat"; - checkBoxBoat.Size = new Size(174, 19); - checkBoxBoat.TabIndex = 7; - checkBoxBoat.Text = "Признак наличие шлюпки"; - checkBoxBoat.UseVisualStyleBackColor = true; - checkBoxBoat.CheckedChanged += checkBoxBoat_CheckedChanged; - // // checkBoxFloats // checkBoxFloats.AutoSize = true; - checkBoxFloats.Location = new Point(5, 92); - checkBoxFloats.Margin = new Padding(3, 2, 3, 2); + checkBoxFloats.Location = new Point(6, 217); checkBoxFloats.Name = "checkBoxFloats"; - checkBoxFloats.Size = new Size(161, 19); - checkBoxFloats.TabIndex = 6; - checkBoxFloats.Text = "Признак наличие линии"; + checkBoxFloats.Size = new Size(202, 24); + checkBoxFloats.TabIndex = 8; + checkBoxFloats.Text = "Признак наличие пушки"; checkBoxFloats.UseVisualStyleBackColor = true; // + // checkBoxBoat + // + checkBoxBoat.AutoSize = true; + checkBoxBoat.Location = new Point(6, 169); + checkBoxBoat.Name = "checkBoxBoat"; + checkBoxBoat.Size = new Size(215, 24); + checkBoxBoat.TabIndex = 7; + checkBoxBoat.Text = "Признак наличие шлюпок"; + checkBoxBoat.UseVisualStyleBackColor = true; + // + // checkBoxLine + // + checkBoxLine.AutoSize = true; + checkBoxLine.Location = new Point(6, 123); + checkBoxLine.Name = "checkBoxLine"; + checkBoxLine.Size = new Size(321, 24); + checkBoxLine.TabIndex = 6; + checkBoxLine.Text = "Признак наличие вертолетной площадки"; + checkBoxLine.UseVisualStyleBackColor = true; + // // numericUpDownWeight // - numericUpDownWeight.Location = new Point(82, 51); - numericUpDownWeight.Margin = new Padding(3, 2, 3, 2); + numericUpDownWeight.Location = new Point(94, 68); numericUpDownWeight.Maximum = new decimal(new int[] { 1000, 0, 0, 0 }); numericUpDownWeight.Minimum = new decimal(new int[] { 100, 0, 0, 0 }); numericUpDownWeight.Name = "numericUpDownWeight"; - numericUpDownWeight.Size = new Size(100, 23); + numericUpDownWeight.Size = new Size(114, 27); numericUpDownWeight.TabIndex = 5; numericUpDownWeight.Value = new decimal(new int[] { 100, 0, 0, 0 }); // // labelWeight // labelWeight.AutoSize = true; - labelWeight.Location = new Point(24, 52); + labelWeight.Location = new Point(27, 70); labelWeight.Name = "labelWeight"; - labelWeight.Size = new Size(29, 15); + labelWeight.Size = new Size(36, 20); labelWeight.TabIndex = 4; labelWeight.Text = "Вес:"; // // numericUpDownSpeed // - numericUpDownSpeed.Location = new Point(82, 24); - numericUpDownSpeed.Margin = new Padding(3, 2, 3, 2); + numericUpDownSpeed.Location = new Point(94, 32); numericUpDownSpeed.Maximum = new decimal(new int[] { 1000, 0, 0, 0 }); numericUpDownSpeed.Minimum = new decimal(new int[] { 100, 0, 0, 0 }); numericUpDownSpeed.Name = "numericUpDownSpeed"; - numericUpDownSpeed.Size = new Size(100, 23); + numericUpDownSpeed.Size = new Size(114, 27); numericUpDownSpeed.TabIndex = 3; numericUpDownSpeed.Value = new decimal(new int[] { 100, 0, 0, 0 }); // // labelSpeed // labelSpeed.AutoSize = true; - labelSpeed.Location = new Point(10, 24); + labelSpeed.Location = new Point(12, 32); labelSpeed.Name = "labelSpeed"; - labelSpeed.Size = new Size(62, 15); + labelSpeed.Size = new Size(76, 20); labelSpeed.TabIndex = 2; labelSpeed.Text = "Скорость:"; // // labelModifiedObject // labelModifiedObject.BorderStyle = BorderStyle.FixedSingle; - labelModifiedObject.Location = new Point(416, 152); + labelModifiedObject.Location = new Point(476, 203); labelModifiedObject.Name = "labelModifiedObject"; - labelModifiedObject.Size = new Size(115, 34); + labelModifiedObject.Size = new Size(131, 44); labelModifiedObject.TabIndex = 1; labelModifiedObject.Text = "Продвинутый"; labelModifiedObject.TextAlign = ContentAlignment.MiddleCenter; @@ -262,9 +244,9 @@ // labelSimpleObject // labelSimpleObject.BorderStyle = BorderStyle.FixedSingle; - labelSimpleObject.Location = new Point(286, 152); + labelSimpleObject.Location = new Point(327, 203); labelSimpleObject.Name = "labelSimpleObject"; - labelSimpleObject.Size = new Size(114, 34); + labelSimpleObject.Size = new Size(130, 44); labelSimpleObject.TabIndex = 0; labelSimpleObject.Text = "Простой"; labelSimpleObject.TextAlign = ContentAlignment.MiddleCenter; @@ -272,19 +254,17 @@ // // pictureBoxObject // - pictureBoxObject.Location = new Point(10, 42); - pictureBoxObject.Margin = new Padding(3, 2, 3, 2); + pictureBoxObject.Location = new Point(11, 56); pictureBoxObject.Name = "pictureBoxObject"; - pictureBoxObject.Size = new Size(160, 94); + pictureBoxObject.Size = new Size(183, 125); pictureBoxObject.TabIndex = 1; pictureBoxObject.TabStop = false; // // buttonAdd // - buttonAdd.Location = new Point(553, 159); - buttonAdd.Margin = new Padding(3, 2, 3, 2); + buttonAdd.Location = new Point(632, 212); buttonAdd.Name = "buttonAdd"; - buttonAdd.Size = new Size(82, 22); + buttonAdd.Size = new Size(94, 29); buttonAdd.TabIndex = 2; buttonAdd.Text = "Добавить"; buttonAdd.UseVisualStyleBackColor = true; @@ -292,10 +272,9 @@ // // buttonCancel // - buttonCancel.Location = new Point(648, 159); - buttonCancel.Margin = new Padding(3, 2, 3, 2); + buttonCancel.Location = new Point(740, 212); buttonCancel.Name = "buttonCancel"; - buttonCancel.Size = new Size(82, 22); + buttonCancel.Size = new Size(94, 29); buttonCancel.TabIndex = 3; buttonCancel.Text = "Отмена"; buttonCancel.UseVisualStyleBackColor = true; @@ -306,10 +285,9 @@ panelObject.Controls.Add(labelAdditionalColor); panelObject.Controls.Add(labelBodyColor); panelObject.Controls.Add(pictureBoxObject); - panelObject.Location = new Point(553, 9); - panelObject.Margin = new Padding(3, 2, 3, 2); + panelObject.Location = new Point(632, 12); panelObject.Name = "panelObject"; - panelObject.Size = new Size(179, 146); + panelObject.Size = new Size(205, 194); panelObject.TabIndex = 4; panelObject.DragDrop += PanelObject_DragDrop; panelObject.DragEnter += PanelObject_DragEnter; @@ -318,9 +296,9 @@ // labelAdditionalColor.AllowDrop = true; labelAdditionalColor.BorderStyle = BorderStyle.FixedSingle; - labelAdditionalColor.Location = new Point(94, 8); + labelAdditionalColor.Location = new Point(108, 11); labelAdditionalColor.Name = "labelAdditionalColor"; - labelAdditionalColor.Size = new Size(73, 28); + labelAdditionalColor.Size = new Size(83, 36); labelAdditionalColor.TabIndex = 3; labelAdditionalColor.Text = "Доп. цвет"; labelAdditionalColor.TextAlign = ContentAlignment.MiddleCenter; @@ -331,9 +309,9 @@ // labelBodyColor.AllowDrop = true; labelBodyColor.BorderStyle = BorderStyle.FixedSingle; - labelBodyColor.Location = new Point(10, 8); + labelBodyColor.Location = new Point(11, 11); labelBodyColor.Name = "labelBodyColor"; - labelBodyColor.Size = new Size(73, 28); + labelBodyColor.Size = new Size(83, 36); labelBodyColor.TabIndex = 2; labelBodyColor.Text = "Цвет"; labelBodyColor.TextAlign = ContentAlignment.MiddleCenter; @@ -342,14 +320,13 @@ // // FormPlaneConfing // - AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(733, 196); + ClientSize = new Size(838, 262); Controls.Add(panelObject); Controls.Add(buttonCancel); Controls.Add(buttonAdd); Controls.Add(groupBoxConfing); - Margin = new Padding(3, 2, 3, 2); Name = "FormPlaneConfing"; Text = "Создание объекта"; groupBoxConfing.ResumeLayout(false); @@ -371,9 +348,9 @@ private NumericUpDown numericUpDownSpeed; private Label labelSpeed; private NumericUpDown numericUpDownWeight; - private CheckBox checkBoxFloats; - private CheckBox checkBoxBoat; private CheckBox checkBoxLine; + private CheckBox checkBoxBoat; + private CheckBox checkBoxFloats; private GroupBox groupBoxColors; private Panel panelPurple; private Panel panelBlack; diff --git a/ProjectPlane/ProjectPlane/FormPlaneConfing.cs b/ProjectPlane/ProjectPlane/FormCruiserConfing.cs similarity index 94% rename from ProjectPlane/ProjectPlane/FormPlaneConfing.cs rename to ProjectPlane/ProjectPlane/FormCruiserConfing.cs index 3a64e7d..890946d 100644 --- a/ProjectPlane/ProjectPlane/FormPlaneConfing.cs +++ b/ProjectPlane/ProjectPlane/FormCruiserConfing.cs @@ -9,7 +9,7 @@ namespace ProjectPlane public partial class FormPlaneConfing : Form { /// - /// Объект - прорисовка крейсера + /// Объект - прорисовка самолета /// private DrawningPlane _plane; @@ -62,8 +62,8 @@ namespace ProjectPlane /// /// Передаем информацию при нажатии на Label /// - /// - /// + /// labelSimpleObject + /// labelSimpleObject private void labelObject_MouseDown(object sender, MouseEventArgs e) { (sender as Label)?.DoDragDrop((sender as Label)?.Name ?? string.Empty, DragDropEffects.Move | DragDropEffects.Copy); @@ -95,7 +95,7 @@ namespace ProjectPlane case "labelModifiedObject": _plane = new DrawningSeaPlane((int)numericUpDownSpeed.Value, (double)numericUpDownWeight.Value, Color.White, - Color.Black, checkBoxFloats.Checked, checkBoxBoat.Checked, checkBoxLine.Checked); + Color.Black, checkBoxLine.Checked, checkBoxBoat.Checked, checkBoxFloats.Checked); break; } DrawObject(); @@ -171,12 +171,6 @@ namespace ProjectPlane PlaneDelegate?.Invoke(_plane); Close(); } - - } - - private void checkBoxBoat_CheckedChanged(object sender, EventArgs e) - { - } } } diff --git a/ProjectPlane/ProjectPlane/FormPlaneConfing.resx b/ProjectPlane/ProjectPlane/FormCruiserConfing.resx similarity index 100% rename from ProjectPlane/ProjectPlane/FormPlaneConfing.resx rename to ProjectPlane/ProjectPlane/FormCruiserConfing.resx diff --git a/ProjectPlane/ProjectPlane/FormPlanesCollection.Designer.cs b/ProjectPlane/ProjectPlane/FormCruisersCollection.Designer.cs similarity index 68% rename from ProjectPlane/ProjectPlane/FormPlanesCollection.Designer.cs rename to ProjectPlane/ProjectPlane/FormCruisersCollection.Designer.cs index 6ff05ac..5fe4dae 100644 --- a/ProjectPlane/ProjectPlane/FormPlanesCollection.Designer.cs +++ b/ProjectPlane/ProjectPlane/FormCruisersCollection.Designer.cs @@ -46,10 +46,17 @@ maskedTextBoxPosision = new MaskedTextBox(); buttonGetToTest = new Button(); pictureBoxPlane = new PictureBox(); + menuStrip = new MenuStrip(); + файлToolStripMenuItem = new ToolStripMenuItem(); + saveToolStripMenuItem = new ToolStripMenuItem(); + loadToolStripMenuItem = new ToolStripMenuItem(); + saveFileDialog = new SaveFileDialog(); + openFileDialog = new OpenFileDialog(); groupBoxTools.SuspendLayout(); panelStorage.SuspendLayout(); panelCompanyTools.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)pictureBoxPlane).BeginInit(); + menuStrip.SuspendLayout(); SuspendLayout(); // // groupBoxTools @@ -59,21 +66,18 @@ groupBoxTools.Controls.Add(comboBoxSelectorCompany); groupBoxTools.Controls.Add(panelCompanyTools); groupBoxTools.Dock = DockStyle.Right; - groupBoxTools.Location = new Point(546, 0); - groupBoxTools.Margin = new Padding(3, 2, 3, 2); + groupBoxTools.Location = new Point(631, 28); groupBoxTools.Name = "groupBoxTools"; - groupBoxTools.Padding = new Padding(3, 2, 3, 2); - groupBoxTools.Size = new Size(194, 490); + groupBoxTools.Size = new Size(222, 651); groupBoxTools.TabIndex = 0; groupBoxTools.TabStop = false; groupBoxTools.Text = "инструменты"; // // buttonCreateCompany // - buttonCreateCompany.Location = new Point(18, 259); - buttonCreateCompany.Margin = new Padding(3, 2, 3, 2); + buttonCreateCompany.Location = new Point(21, 345); buttonCreateCompany.Name = "buttonCreateCompany"; - buttonCreateCompany.Size = new Size(163, 20); + buttonCreateCompany.Size = new Size(186, 27); buttonCreateCompany.TabIndex = 7; buttonCreateCompany.Text = "Создать компанию"; buttonCreateCompany.UseVisualStyleBackColor = true; @@ -89,18 +93,16 @@ panelStorage.Controls.Add(textBoxCollectionName); panelStorage.Controls.Add(labelCollectionName); panelStorage.Dock = DockStyle.Top; - panelStorage.Location = new Point(3, 18); - panelStorage.Margin = new Padding(3, 2, 3, 2); + panelStorage.Location = new Point(3, 23); panelStorage.Name = "panelStorage"; - panelStorage.Size = new Size(188, 212); + panelStorage.Size = new Size(216, 283); panelStorage.TabIndex = 6; // // buttonCollectionDel // - buttonCollectionDel.Location = new Point(15, 185); - buttonCollectionDel.Margin = new Padding(3, 2, 3, 2); + buttonCollectionDel.Location = new Point(17, 247); buttonCollectionDel.Name = "buttonCollectionDel"; - buttonCollectionDel.Size = new Size(163, 20); + buttonCollectionDel.Size = new Size(186, 27); buttonCollectionDel.TabIndex = 6; buttonCollectionDel.Text = "Удалить коллекцию"; buttonCollectionDel.UseVisualStyleBackColor = true; @@ -109,19 +111,17 @@ // listBoxCollection // listBoxCollection.FormattingEnabled = true; - listBoxCollection.ItemHeight = 15; - listBoxCollection.Location = new Point(15, 103); - listBoxCollection.Margin = new Padding(3, 2, 3, 2); + listBoxCollection.ItemHeight = 20; + listBoxCollection.Location = new Point(17, 137); listBoxCollection.Name = "listBoxCollection"; - listBoxCollection.Size = new Size(163, 79); + listBoxCollection.Size = new Size(186, 104); listBoxCollection.TabIndex = 5; // // buttonCollecctionAdd // - buttonCollecctionAdd.Location = new Point(15, 78); - buttonCollecctionAdd.Margin = new Padding(3, 2, 3, 2); + buttonCollecctionAdd.Location = new Point(17, 104); buttonCollecctionAdd.Name = "buttonCollecctionAdd"; - buttonCollecctionAdd.Size = new Size(163, 20); + buttonCollecctionAdd.Size = new Size(186, 27); buttonCollecctionAdd.TabIndex = 4; buttonCollecctionAdd.Text = "Добавить коллекцию"; buttonCollecctionAdd.UseVisualStyleBackColor = true; @@ -130,10 +130,9 @@ // radioButtonList // radioButtonList.AutoSize = true; - radioButtonList.Location = new Point(108, 56); - radioButtonList.Margin = new Padding(3, 2, 3, 2); + radioButtonList.Location = new Point(123, 75); radioButtonList.Name = "radioButtonList"; - radioButtonList.Size = new Size(66, 19); + radioButtonList.Size = new Size(80, 24); radioButtonList.TabIndex = 3; radioButtonList.TabStop = true; radioButtonList.Text = "Список"; @@ -142,10 +141,9 @@ // radioButtonMassive // radioButtonMassive.AutoSize = true; - radioButtonMassive.Location = new Point(15, 56); - radioButtonMassive.Margin = new Padding(3, 2, 3, 2); + radioButtonMassive.Location = new Point(17, 75); radioButtonMassive.Name = "radioButtonMassive"; - radioButtonMassive.Size = new Size(67, 19); + radioButtonMassive.Size = new Size(82, 24); radioButtonMassive.TabIndex = 2; radioButtonMassive.TabStop = true; radioButtonMassive.Text = "Массив"; @@ -153,18 +151,17 @@ // // textBoxCollectionName // - textBoxCollectionName.Location = new Point(15, 24); - textBoxCollectionName.Margin = new Padding(3, 2, 3, 2); + textBoxCollectionName.Location = new Point(17, 32); textBoxCollectionName.Name = "textBoxCollectionName"; - textBoxCollectionName.Size = new Size(163, 23); + textBoxCollectionName.Size = new Size(186, 27); textBoxCollectionName.TabIndex = 1; // // labelCollectionName // labelCollectionName.AutoSize = true; - labelCollectionName.Location = new Point(23, 7); + labelCollectionName.Location = new Point(26, 9); labelCollectionName.Name = "labelCollectionName"; - labelCollectionName.Size = new Size(122, 15); + labelCollectionName.Size = new Size(155, 20); labelCollectionName.TabIndex = 0; labelCollectionName.Text = "Название коллекции"; // @@ -173,10 +170,9 @@ comboBoxSelectorCompany.DropDownStyle = ComboBoxStyle.DropDownList; comboBoxSelectorCompany.FormattingEnabled = true; comboBoxSelectorCompany.Items.AddRange(new object[] { "Хранилище" }); - comboBoxSelectorCompany.Location = new Point(18, 233); - comboBoxSelectorCompany.Margin = new Padding(3, 2, 3, 2); + comboBoxSelectorCompany.Location = new Point(21, 311); comboBoxSelectorCompany.Name = "comboBoxSelectorCompany"; - comboBoxSelectorCompany.Size = new Size(163, 23); + comboBoxSelectorCompany.Size = new Size(186, 28); comboBoxSelectorCompany.TabIndex = 0; comboBoxSelectorCompany.SelectedIndexChanged += comboBoxSelectorCompany_SelectedIndexChanged_1; // @@ -188,20 +184,18 @@ panelCompanyTools.Controls.Add(maskedTextBoxPosision); panelCompanyTools.Controls.Add(buttonGetToTest); panelCompanyTools.Enabled = false; - panelCompanyTools.Location = new Point(3, 284); - panelCompanyTools.Margin = new Padding(3, 2, 3, 2); + panelCompanyTools.Location = new Point(3, 379); panelCompanyTools.Name = "panelCompanyTools"; - panelCompanyTools.Size = new Size(189, 206); + panelCompanyTools.Size = new Size(216, 274); panelCompanyTools.TabIndex = 8; // // ButtonAddPlane // ButtonAddPlane.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; ButtonAddPlane.BackgroundImageLayout = ImageLayout.Center; - ButtonAddPlane.Location = new Point(16, 2); - ButtonAddPlane.Margin = new Padding(3, 2, 3, 2); + ButtonAddPlane.Location = new Point(18, 3); ButtonAddPlane.Name = "ButtonAddPlane"; - ButtonAddPlane.Size = new Size(163, 30); + ButtonAddPlane.Size = new Size(186, 40); ButtonAddPlane.TabIndex = 1; ButtonAddPlane.Text = "добваление самолета"; ButtonAddPlane.UseVisualStyleBackColor = true; @@ -210,10 +204,9 @@ // buttonRefresh // buttonRefresh.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; - buttonRefresh.Location = new Point(16, 170); - buttonRefresh.Margin = new Padding(3, 2, 3, 2); + buttonRefresh.Location = new Point(18, 227); buttonRefresh.Name = "buttonRefresh"; - buttonRefresh.Size = new Size(163, 31); + buttonRefresh.Size = new Size(186, 41); buttonRefresh.TabIndex = 5; buttonRefresh.Text = "обновить"; buttonRefresh.UseVisualStyleBackColor = true; @@ -222,10 +215,9 @@ // ButtonRemovePlane // ButtonRemovePlane.Anchor = AnchorStyles.Right; - ButtonRemovePlane.Location = new Point(16, 104); - ButtonRemovePlane.Margin = new Padding(3, 2, 3, 2); + ButtonRemovePlane.Location = new Point(18, 138); ButtonRemovePlane.Name = "ButtonRemovePlane"; - ButtonRemovePlane.Size = new Size(163, 30); + ButtonRemovePlane.Size = new Size(186, 40); ButtonRemovePlane.TabIndex = 3; ButtonRemovePlane.Text = "удалить самолет"; ButtonRemovePlane.UseVisualStyleBackColor = true; @@ -233,21 +225,19 @@ // // maskedTextBoxPosision // - maskedTextBoxPosision.Location = new Point(15, 79); - maskedTextBoxPosision.Margin = new Padding(3, 2, 3, 2); + maskedTextBoxPosision.Location = new Point(17, 105); maskedTextBoxPosision.Mask = "00"; maskedTextBoxPosision.Name = "maskedTextBoxPosision"; - maskedTextBoxPosision.Size = new Size(164, 23); + maskedTextBoxPosision.Size = new Size(187, 27); maskedTextBoxPosision.TabIndex = 2; maskedTextBoxPosision.ValidatingType = typeof(int); // // buttonGetToTest // buttonGetToTest.Anchor = AnchorStyles.Right; - buttonGetToTest.Location = new Point(16, 138); - buttonGetToTest.Margin = new Padding(3, 2, 3, 2); + buttonGetToTest.Location = new Point(18, 184); buttonGetToTest.Name = "buttonGetToTest"; - buttonGetToTest.Size = new Size(163, 30); + buttonGetToTest.Size = new Size(186, 40); buttonGetToTest.TabIndex = 4; buttonGetToTest.Text = "передать на тесты"; buttonGetToTest.UseVisualStyleBackColor = true; @@ -256,21 +246,62 @@ // pictureBoxPlane // pictureBoxPlane.Dock = DockStyle.Fill; - pictureBoxPlane.Location = new Point(0, 0); - pictureBoxPlane.Margin = new Padding(3, 2, 3, 2); + pictureBoxPlane.Location = new Point(0, 28); pictureBoxPlane.Name = "pictureBoxPlane"; - pictureBoxPlane.Size = new Size(546, 490); + pictureBoxPlane.Size = new Size(631, 651); pictureBoxPlane.TabIndex = 1; pictureBoxPlane.TabStop = false; // + // menuStrip + // + menuStrip.ImageScalingSize = new Size(20, 20); + menuStrip.Items.AddRange(new ToolStripItem[] { файлToolStripMenuItem }); + menuStrip.Location = new Point(0, 0); + menuStrip.Name = "menuStrip"; + menuStrip.Size = new Size(853, 28); + menuStrip.TabIndex = 2; + menuStrip.Text = "menuStrip1"; + // + // файлToolStripMenuItem + // + файлToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { saveToolStripMenuItem, loadToolStripMenuItem }); + файлToolStripMenuItem.Name = "файлToolStripMenuItem"; + файлToolStripMenuItem.Size = new Size(59, 24); + файлToolStripMenuItem.Text = "Файл"; + // + // saveToolStripMenuItem + // + saveToolStripMenuItem.Name = "saveToolStripMenuItem"; + saveToolStripMenuItem.ShortcutKeys = Keys.Control | Keys.S; + saveToolStripMenuItem.Size = new Size(227, 26); + saveToolStripMenuItem.Text = "Сохранение"; + saveToolStripMenuItem.Click += SaveToolStripMenuItem_Click; + // + // loadToolStripMenuItem + // + loadToolStripMenuItem.Name = "loadToolStripMenuItem"; + loadToolStripMenuItem.ShortcutKeys = Keys.Control | Keys.L; + loadToolStripMenuItem.Size = new Size(227, 26); + loadToolStripMenuItem.Text = "Загрузка"; + loadToolStripMenuItem.Click += LoadToolStripMenuItem_Click; + // + // saveFileDialog + // + saveFileDialog.Filter = "txt file|*.txt"; + // + // openFileDialog + // + openFileDialog.Filter = "txt file|*.txt"; + // // FormPlanesCollection // - AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(740, 490); + ClientSize = new Size(853, 679); Controls.Add(pictureBoxPlane); Controls.Add(groupBoxTools); - Margin = new Padding(3, 2, 3, 2); + Controls.Add(menuStrip); + MainMenuStrip = menuStrip; Name = "FormPlanesCollection"; Text = "FormPlanesCollection"; groupBoxTools.ResumeLayout(false); @@ -279,7 +310,10 @@ panelCompanyTools.ResumeLayout(false); panelCompanyTools.PerformLayout(); ((System.ComponentModel.ISupportInitialize)pictureBoxPlane).EndInit(); + menuStrip.ResumeLayout(false); + menuStrip.PerformLayout(); ResumeLayout(false); + PerformLayout(); } #endregion @@ -302,5 +336,11 @@ private Button buttonCreateCompany; private Button buttonCollectionDel; private Panel panelCompanyTools; + private MenuStrip menuStrip; + private ToolStripMenuItem файлToolStripMenuItem; + private ToolStripMenuItem saveToolStripMenuItem; + private ToolStripMenuItem loadToolStripMenuItem; + private SaveFileDialog saveFileDialog; + private OpenFileDialog openFileDialog; } } \ No newline at end of file diff --git a/ProjectPlane/ProjectPlane/FormPlanesCollection.cs b/ProjectPlane/ProjectPlane/FormCruisersCollection.cs similarity index 79% rename from ProjectPlane/ProjectPlane/FormPlanesCollection.cs rename to ProjectPlane/ProjectPlane/FormCruisersCollection.cs index 5a66a75..e3b4326 100644 --- a/ProjectPlane/ProjectPlane/FormPlanesCollection.cs +++ b/ProjectPlane/ProjectPlane/FormCruisersCollection.cs @@ -1,6 +1,5 @@ using ProjectPlane.CollectionGenericObjects; using ProjectPlane.Drawnings; -using System.Windows.Forms; namespace ProjectPlane { @@ -45,10 +44,10 @@ namespace ProjectPlane } /// - /// Добавление крейсера в коллекцию + /// Добавление самолета в коллекцию /// /// - private void SetPlane(DrawningPlane plane) + private void SetPlane(DrawningPlane? plane) { if (_company == null || plane == null) { @@ -223,8 +222,48 @@ namespace ProjectPlane } panelCompanyTools.Enabled = true; + } + /// + /// Обработка нажатия "Сохранение" + /// + /// + /// + private void SaveToolStripMenuItem_Click(object sender, EventArgs e) + { + if (saveFileDialog.ShowDialog() == DialogResult.OK) + { + if (_storageCollection.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 (_storageCollection.LoadData(openFileDialog.FileName)) + { + MessageBox.Show("Загрузка прошла успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); + RerfreshListBoxItems(); + } + else + { + MessageBox.Show("Не загрузилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } } } diff --git a/ProjectPlane/ProjectPlane/FormPlanesCollection.resx b/ProjectPlane/ProjectPlane/FormCruisersCollection.resx similarity index 87% rename from ProjectPlane/ProjectPlane/FormPlanesCollection.resx rename to ProjectPlane/ProjectPlane/FormCruisersCollection.resx index af32865..b5b741b 100644 --- a/ProjectPlane/ProjectPlane/FormPlanesCollection.resx +++ b/ProjectPlane/ProjectPlane/FormCruisersCollection.resx @@ -117,4 +117,16 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 1 + + + 145, 1 + + + 310, 1 + + + 25 + \ No newline at end of file diff --git a/ProjectPlane/ProjectPlane/MovementStrategy/MoveablePlane.cs b/ProjectPlane/ProjectPlane/MovementStrategy/MoveableCruiser.cs similarity index 100% rename from ProjectPlane/ProjectPlane/MovementStrategy/MoveablePlane.cs rename to ProjectPlane/ProjectPlane/MovementStrategy/MoveableCruiser.cs