From 30131211c3228005ad3a63200c65a24dd9d1594d Mon Sep 17 00:00:00 2001 From: Ctepa Date: Mon, 8 Apr 2024 12:53:39 +0300 Subject: [PATCH 1/4] =?UTF-8?q?=D0=93=D0=BE=D1=82=D0=BE=D0=B2=D0=B0=D1=8F?= =?UTF-8?q?=205=20=D0=BB=D0=B0=D0=B1=D0=B0,=20=D0=BF=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=BD=D0=BD=D0=B0=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AntiAircraftGun/AntiAircraftGun/FormGunConfig.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AntiAircraftGun/AntiAircraftGun/FormGunConfig.cs b/AntiAircraftGun/AntiAircraftGun/FormGunConfig.cs index 8116aab..9296685 100644 --- a/AntiAircraftGun/AntiAircraftGun/FormGunConfig.cs +++ b/AntiAircraftGun/AntiAircraftGun/FormGunConfig.cs @@ -14,7 +14,7 @@ public partial class FormGunConfig : Form /// /// Событие для передачи объекта /// - private event GunDelegate? _gunDelegate; + private event Action? _gunDelegate; /// /// Конструктор @@ -38,7 +38,7 @@ public partial class FormGunConfig : Form /// Привязка внешнего метода к союытию /// /// - public void AddEvent(GunDelegate gunDelegate) + public void AddEvent(Action gunDelegate) { _gunDelegate += gunDelegate; } -- 2.25.1 From 26ecf356b8f4846b629242bce6eb6e3743167b8c Mon Sep 17 00:00:00 2001 From: Ctepa Date: Mon, 8 Apr 2024 14:19:04 +0300 Subject: [PATCH 2/4] =?UTF-8?q?=D0=94=D0=BE=D0=BF=D0=B7=D0=B0=D0=B4=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AntiAircraftGun/FormGunConfig.cs | 39 ++++++++++++------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/AntiAircraftGun/AntiAircraftGun/FormGunConfig.cs b/AntiAircraftGun/AntiAircraftGun/FormGunConfig.cs index 9296685..b7ce791 100644 --- a/AntiAircraftGun/AntiAircraftGun/FormGunConfig.cs +++ b/AntiAircraftGun/AntiAircraftGun/FormGunConfig.cs @@ -1,5 +1,6 @@ using AntiAircraftGun.Drawnings; using AntiAircraftGun.Entities; +using System; namespace AntiAircraftGun; /// @@ -63,7 +64,21 @@ public partial class FormGunConfig : Form /// private void LabelOblect_MouseDown(object sender, MouseEventArgs e) { - (sender as Label)?.DoDragDrop((sender as Label)?.Name ?? string.Empty, DragDropEffects.Move | DragDropEffects.Copy); + Label label=sender as Label; + if(label.Name== "labelSimpleOblect") + { + label.DoDragDrop(new DrawningGun((int)numericUpDownSpeed.Value, + (double)numericUpDownWeight.Value, Color.White), DragDropEffects.Copy); + } + else + { + Random random = new Random(); + label.DoDragDrop(new + DrawningAntiAircraftGun((int)numericUpDownSpeed.Value, (double)numericUpDownWeight.Value, + Color.White, + Color.Black, random.Next(10, 100), + checkBoxHatch.Checked, checkBoxRadar.Checked), DragDropEffects.Copy); + } } /// /// Проверка получаемой информации (ее типа на соответствие требуемому) @@ -72,7 +87,7 @@ public partial class FormGunConfig : Form /// private void PanelObjects_DragEnter(object sender, DragEventArgs e) { - e.Effect = e.Data?.GetDataPresent(DataFormats.Text) ?? false ? DragDropEffects.Copy : DragDropEffects.None; + e.Effect = DragDropEffects.Copy; } /// /// Действия при приеме перетаскиваемой информации @@ -81,20 +96,13 @@ public partial class FormGunConfig : Form /// private void PanelObjects_DragDrop(object sender, DragEventArgs e) { - switch (e.Data?.GetData(DataFormats.Text)?.ToString()) + if ((DrawningGun)e.Data.GetData(typeof(DrawningGun)) != null) { - case "labelSimpleOblect": - _gun = new DrawningGun((int)numericUpDownSpeed.Value, - (double)numericUpDownWeight.Value, Color.White); - break; - case "labelModifiedObject": - Random random = new Random(); - _gun = new - DrawningAntiAircraftGun((int)numericUpDownSpeed.Value, (double)numericUpDownWeight.Value, - Color.White, - Color.Black, random.Next(10, 100), - checkBoxHatch.Checked, checkBoxRadar.Checked); - break; + _gun = (DrawningGun)e.Data.GetData(typeof(DrawningGun)); + } + else + { + _gun = (DrawningAntiAircraftGun)e.Data.GetData(typeof(DrawningAntiAircraftGun)); } DrawObject(); } @@ -150,5 +158,6 @@ public partial class FormGunConfig : Form } + // TODO Реализовать логику смены цветов: основного и дополнительного(для продвинутого объекта) } -- 2.25.1 From 37a802cde673270dca4a48d9120f528c2af64fe8 Mon Sep 17 00:00:00 2001 From: Ctepa Date: Sun, 21 Apr 2024 19:30:04 +0300 Subject: [PATCH 3/4] =?UTF-8?q?=D0=A1=20=D1=85=D0=BE=D0=B4=D1=83,=206=20?= =?UTF-8?q?=D0=BB=D0=B0=D0=B1=D0=B0,=20=D0=B1=D0=B5=D0=B7=20=D0=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractCompany.cs | 2 +- .../ICollectionGenericObjects.cs | 12 +- .../ListGenericObjects.cs | 9 +- .../MassiveGenericObjects.cs | 13 +- .../StorageCollection.cs | 114 +++++++++++++++++- .../Drawnings/DrawningAntiAircrfatGun.cs | 8 +- .../AntiAircraftGun/Drawnings/DrawningGun.cs | 7 ++ .../Drawnings/ExtentionDrawningGun.cs | 47 ++++++++ .../Entities/EntityAntiAircraftGun.cs | 21 ++-- .../AntiAircraftGun/Entities/EntityGun.cs | 22 ++++ .../FormGunCollections.Designer.cs | 77 ++++++++++-- .../AntiAircraftGun/FormGunCollections.cs | 38 +++++- .../AntiAircraftGun/FormGunCollections.resx | 12 ++ .../AntiAircraftGun/FormGunConfig.cs | 2 +- 14 files changed, 356 insertions(+), 28 deletions(-) create mode 100644 AntiAircraftGun/AntiAircraftGun/Drawnings/ExtentionDrawningGun.cs diff --git a/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/AbstractCompany.cs b/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/AbstractCompany.cs index 548d8fd..0c30f55 100644 --- a/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/AbstractCompany.cs +++ b/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/AbstractCompany.cs @@ -41,7 +41,7 @@ public abstract class AbstractCompany _pictureWidth = picWidth; _pictureHeight = picHeight; _collection = collection; - _collection.SetMaxCount = GetMaxCount; + _collection.MaxCount = GetMaxCount; } /// /// Перегрузка оператора сложения для класса diff --git a/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/ICollectionGenericObjects.cs b/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/ICollectionGenericObjects.cs index 95f7f2b..7b800b7 100644 --- a/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/ICollectionGenericObjects.cs +++ b/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/ICollectionGenericObjects.cs @@ -15,7 +15,7 @@ public interface ICollectionGenericObjects /// /// Установка максимального количества элементов /// - int SetMaxCount { set; } + int MaxCount { get; set; } /// /// Добавление объекта в коллекцию /// @@ -41,5 +41,13 @@ public interface ICollectionGenericObjects /// Позиция /// Объект T? Get(int position); - + /// + /// Получение типа коллекции + /// + CollectionType GetCollectionType { get; } + /// + /// Получение объектов коллекции по одному + /// + /// + IEnumerable GetItems(); } diff --git a/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/ListGenericObjects.cs b/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/ListGenericObjects.cs index d273c20..ccabac6 100644 --- a/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/ListGenericObjects.cs +++ b/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/ListGenericObjects.cs @@ -21,7 +21,7 @@ public class ListGenericObjects : ICollectionGenericObjects /// private int _maxCount; public int Count => _collection.Count; - public int SetMaxCount { set { if (value > 0) { _maxCount = value; } } } + public int MaxCount { set { if (value > 0) { _maxCount = value; } } get { return _collection.Count; } } /// /// Конструктор /// @@ -64,4 +64,11 @@ public class ListGenericObjects : ICollectionGenericObjects _collection.RemoveAt(position); return true; } + + + public CollectionType GetCollectionType => CollectionType.List; + public IEnumerable GetItems() + { + for(int i=0; i<_collection.Count; i++) yield return _collection[i]; + } } diff --git a/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/MassiveGenericObjects.cs b/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/MassiveGenericObjects.cs index 87d6c79..a4dc4bb 100644 --- a/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/MassiveGenericObjects.cs +++ b/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/MassiveGenericObjects.cs @@ -13,7 +13,7 @@ internal class MassiveGenericObjects : ICollectionGenericObjects /// private T?[] _collection; public int Count => _collection.Length; - public int SetMaxCount + public int MaxCount { set { @@ -29,6 +29,10 @@ internal class MassiveGenericObjects : ICollectionGenericObjects } } } + get + { + return _collection.Length; + } } /// /// Конструктор @@ -98,4 +102,11 @@ internal class MassiveGenericObjects : ICollectionGenericObjects _collection[index] = obj; return true; } + + + public CollectionType GetCollectionType => CollectionType.Massive; + public IEnumerable GetItems() + { + for (int i=0; i < _collection.Length; i++) yield return _collection[i]; + } } diff --git a/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/StorageCollection.cs b/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/StorageCollection.cs index d70083c..702f47d 100644 --- a/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/StorageCollection.cs +++ b/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/StorageCollection.cs @@ -1,10 +1,13 @@ -namespace AntiAircraftGun.CollectionGenericObjects; +using AntiAircraftGun.Drawnings; +using System.Text; + +namespace AntiAircraftGun.CollectionGenericObjects; /// /// Класс-хранилище коллекций /// /// public class StorageCollection -where T : class +where T : DrawningGun { /// /// Словарь (хранилище) с коллекциями @@ -14,6 +17,11 @@ where T : class /// Возвращение списка названий коллекций /// public List Keys => _storages.Keys.ToList(); + + + private readonly string _collectionKey = "CollectionStorage"; + private readonly string _separatorForKeyValue = "|"; + private readonly string _separatorItems = ";"; /// /// Конструктор /// @@ -70,4 +78,106 @@ where T : class return _storages[name]; } } + /// + /// Запись информации в файл + /// + /// + /// + public bool SaveData(string filename) + { + if(File.Exists(filename)) + { + File.Delete(filename); + } + + if(_storages.Count==0) return false; + StringBuilder sb = new(); + sb.Append(_collectionKey); + + foreach (KeyValuePair> value in _storages) + { + 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); + } + } + + using FileStream fs=new(filename, FileMode.Create); + byte[] info=new UTF8Encoding(true).GetBytes(sb.ToString()); + fs.Write(info, 0, info.Length); + return true; + } + + /// + /// Загрузка информации по установкам в хранилище из файла + /// + /// + /// + public bool LoadData(string filename) + { + if(!File.Exists(filename)) return false; + + string bufferTextFromFile = ""; + using(FileStream fs = new(filename, FileMode.Open)) + { + byte[] b=new byte[fs.Length]; + UTF8Encoding temp = new(true); + while (fs.Read(b, 0, b.Length) > 0) bufferTextFromFile += temp.GetString(b); + } + + string[] strs = bufferTextFromFile.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries); + + if(strs ==null || strs.Length == 0) return false; + if (!strs[0].Equals(_collectionKey)) + // Если нет такой записи, то это не те данные + return false; + + _storages.Clear(); + foreach (string data in strs) + { + string[] record=data.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?.CreateDrawningCar() is T gun) + { + if(!collection.Insert(gun)) 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/AntiAircraftGun/AntiAircraftGun/Drawnings/DrawningAntiAircrfatGun.cs b/AntiAircraftGun/AntiAircraftGun/Drawnings/DrawningAntiAircrfatGun.cs index fe4a7c5..f2c1dd4 100644 --- a/AntiAircraftGun/AntiAircraftGun/Drawnings/DrawningAntiAircrfatGun.cs +++ b/AntiAircraftGun/AntiAircraftGun/Drawnings/DrawningAntiAircrfatGun.cs @@ -6,6 +6,10 @@ namespace AntiAircraftGun.Drawnings; /// public class DrawningAntiAircraftGun:DrawningGun { + public DrawningAntiAircraftGun(EntityGun gun) : base(gun) + { + } + /// /// Конструктор /// @@ -15,9 +19,9 @@ public class DrawningAntiAircraftGun:DrawningGun /// /// /// - public DrawningAntiAircraftGun(int speed, double weight, Color bodyColor, Color optionalElementsColor, double barrelLenth, bool hatchHeight, bool radar) : base(150,115) //140, 65 + public DrawningAntiAircraftGun(int speed, double weight, Color bodyColor, Color optionalElementsColor,bool hatchHeight, bool radar) : base(150,115) //140, 65 { - EntityGun = new EntityAntiAircraftGun(speed,weight,bodyColor,optionalElementsColor,barrelLenth,hatchHeight,radar); + EntityGun = new EntityAntiAircraftGun(speed,weight,bodyColor,optionalElementsColor,hatchHeight,radar); } /// /// Прорисовка объекта diff --git a/AntiAircraftGun/AntiAircraftGun/Drawnings/DrawningGun.cs b/AntiAircraftGun/AntiAircraftGun/Drawnings/DrawningGun.cs index d926242..562db94 100644 --- a/AntiAircraftGun/AntiAircraftGun/Drawnings/DrawningGun.cs +++ b/AntiAircraftGun/AntiAircraftGun/Drawnings/DrawningGun.cs @@ -33,6 +33,7 @@ public class DrawningGun /// Правая координата прорисовку зенитной установки /// protected int? _startPosY; + /// /// Ширина прорисовки зенитной установки /// @@ -88,6 +89,12 @@ public class DrawningGun _drawingGunHeight = drawningGunHeight; _drawningGunWidth = drawningGunWidth; } + + public DrawningGun(EntityGun gun) + { + EntityGun = gun; + } + /// /// Установка гранц поля /// diff --git a/AntiAircraftGun/AntiAircraftGun/Drawnings/ExtentionDrawningGun.cs b/AntiAircraftGun/AntiAircraftGun/Drawnings/ExtentionDrawningGun.cs new file mode 100644 index 0000000..55d86f2 --- /dev/null +++ b/AntiAircraftGun/AntiAircraftGun/Drawnings/ExtentionDrawningGun.cs @@ -0,0 +1,47 @@ +using AntiAircraftGun.Entities; + +namespace AntiAircraftGun.Drawnings; +/// +/// Расширение для класса EntityGun +/// +public static class ExtentionDrawningGun +{ + /// + /// Разделитель для записи информации по объекту в файл + /// + private static readonly string _separatorForObject = ":"; + /// + /// Создание объекта из строки + /// + /// Строка с данными для создания объекта + /// Объект + public static DrawningGun? CreateDrawningCar(this string info) + { + string[] strs = info.Split(_separatorForObject); + EntityGun? gun = EntityAntiAircraftGun.CreateEntityAntiaircraftGun(strs); + if (gun != null) + { + return new DrawningAntiAircraftGun(gun); + } + gun = EntityGun.CreateEntityCar(strs); + if (gun != null) + { + return new DrawningGun(gun); + } + return null; + } + /// + /// Получение данных для сохранения в файл + /// + /// Сохраняемый объект + /// Строка с данными по объекту + public static string GetDataForSave(this DrawningGun drawningCun) + { + string[]? array = drawningCun?.EntityGun?.GetStringRepresentation(); + if (array == null) + { + return string.Empty; + } + return string.Join(_separatorForObject, array); + } +} diff --git a/AntiAircraftGun/AntiAircraftGun/Entities/EntityAntiAircraftGun.cs b/AntiAircraftGun/AntiAircraftGun/Entities/EntityAntiAircraftGun.cs index 128db0c..4b53e08 100644 --- a/AntiAircraftGun/AntiAircraftGun/Entities/EntityAntiAircraftGun.cs +++ b/AntiAircraftGun/AntiAircraftGun/Entities/EntityAntiAircraftGun.cs @@ -2,7 +2,7 @@ /// /// Класс-сущность "Зенитная установка" /// -public class EntityAntiAircraftGun:EntityGun +public class EntityAntiAircraftGun : EntityGun { private EntityGun? EntityGun; /// @@ -13,15 +13,11 @@ public class EntityAntiAircraftGun:EntityGun /// Публичный сеттер для дополнительного цвета /// /// - public void SetOptionalElemensColor(Color OptionalElementsColor) + public void SetOptionalElemensColor(Color OptionalElementsColor) { this.OptionalElementsColor = OptionalElementsColor; } - /// - /// Длинна ствола - /// - public double BarrelLength { get; private set; } /// /// Люк /// @@ -30,13 +26,22 @@ public class EntityAntiAircraftGun:EntityGun /// Радар /// public bool Radar { get; private set; } - public EntityAntiAircraftGun(int speed, double weight, Color bodyColor, Color optionalElementsColor, double barrelLenth, bool hatch, bool radar) : base(speed, weight, bodyColor) + public EntityAntiAircraftGun(int speed, double weight, Color bodyColor, Color optionalElementsColor, bool hatch, bool radar) : base(speed, weight, bodyColor) { EntityGun = new EntityGun(speed, weight, bodyColor); OptionalElementsColor = optionalElementsColor; - BarrelLength = barrelLenth; Radar = radar; Hatch = hatch; + } + public override string[] GetStringRepresentation() + { + return new[] { nameof(EntityAntiAircraftGun), Speed.ToString(), Weight.ToString(), BodyColor.Name, OptionalElementsColor.ToString(), Hatch.ToString(), Radar.ToString() }; + } + + public static EntityAntiAircraftGun? CreateEntityAntiaircraftGun(string[] strs) + { + if (strs.Length != 7 || strs[0] != nameof(EntityAntiAircraftGun)) return null; + return new EntityAntiAircraftGun(Convert.ToInt32(strs[1]), Convert.ToDouble(strs[2]), Color.FromName(strs[3]), Color.FromName(strs[4]), Convert.ToBoolean(strs[5]), Convert.ToBoolean(strs[6])); } } \ No newline at end of file diff --git a/AntiAircraftGun/AntiAircraftGun/Entities/EntityGun.cs b/AntiAircraftGun/AntiAircraftGun/Entities/EntityGun.cs index 7cb4140..5c38a32 100644 --- a/AntiAircraftGun/AntiAircraftGun/Entities/EntityGun.cs +++ b/AntiAircraftGun/AntiAircraftGun/Entities/EntityGun.cs @@ -41,4 +41,26 @@ public class EntityGun Weight = weight; BodyColor = bodyColor; } + + /// + /// Получение строк со значениями свойств объекта класса-сущности + /// + /// + public virtual string[] GetStringRepresentation() + { + return new[] { nameof(EntityGun), Speed.ToString(), Weight.ToString(), BodyColor.Name }; + } + /// + /// Создание объекта из массива строк + /// + /// + /// + public static EntityGun? CreateEntityCar(string[] strs) + { + if (strs.Length != 4 || strs[0] != nameof(EntityGun)) + { + return null; + } + return new EntityGun(Convert.ToInt32(strs[1]), Convert.ToDouble(strs[2]), Color.FromName(strs[3])); + } } diff --git a/AntiAircraftGun/AntiAircraftGun/FormGunCollections.Designer.cs b/AntiAircraftGun/AntiAircraftGun/FormGunCollections.Designer.cs index e949bf6..cbbee88 100644 --- a/AntiAircraftGun/AntiAircraftGun/FormGunCollections.Designer.cs +++ b/AntiAircraftGun/AntiAircraftGun/FormGunCollections.Designer.cs @@ -46,10 +46,17 @@ radioButtonMassive = new RadioButton(); labelNameCollection = new Label(); pictureBox = new PictureBox(); + menuStrip = new MenuStrip(); + файлToolStripMenuItem = new ToolStripMenuItem(); + saveToolStripMenuItem = new ToolStripMenuItem(); + downloadToolStripMenuItem = new ToolStripMenuItem(); + saveFileDialog = new SaveFileDialog(); + openFileDialog = new OpenFileDialog(); groupBox1.SuspendLayout(); panelCompanyTools.SuspendLayout(); panelStorage.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)pictureBox).BeginInit(); + menuStrip.SuspendLayout(); SuspendLayout(); // // groupBox1 @@ -57,9 +64,9 @@ groupBox1.Controls.Add(panelCompanyTools); groupBox1.Controls.Add(panelStorage); groupBox1.Dock = DockStyle.Right; - groupBox1.Location = new Point(981, 0); + groupBox1.Location = new Point(981, 28); groupBox1.Name = "groupBox1"; - groupBox1.Size = new Size(235, 772); + groupBox1.Size = new Size(235, 744); groupBox1.TabIndex = 0; groupBox1.TabStop = false; groupBox1.Text = "Инструменты"; @@ -74,14 +81,14 @@ panelCompanyTools.Controls.Add(maskedTextBox); panelCompanyTools.Controls.Add(buttonRemoveGun); panelCompanyTools.Dock = DockStyle.Bottom; - panelCompanyTools.Location = new Point(3, 395); + panelCompanyTools.Location = new Point(3, 384); panelCompanyTools.Name = "panelCompanyTools"; - panelCompanyTools.Size = new Size(229, 374); + panelCompanyTools.Size = new Size(229, 357); panelCompanyTools.TabIndex = 9; // // buttonCreateCompany // - buttonCreateCompany.Location = new Point(9, 40); + buttonCreateCompany.Location = new Point(9, 87); buttonCreateCompany.Name = "buttonCreateCompany"; buttonCreateCompany.Size = new Size(217, 29); buttonCreateCompany.TabIndex = 8; @@ -95,7 +102,7 @@ comboBoxSelectorCompany.DropDownStyle = ComboBoxStyle.DropDownList; comboBoxSelectorCompany.FormattingEnabled = true; comboBoxSelectorCompany.Items.AddRange(new object[] { "База" }); - comboBoxSelectorCompany.Location = new Point(9, 6); + comboBoxSelectorCompany.Location = new Point(9, 53); comboBoxSelectorCompany.Name = "comboBoxSelectorCompany"; comboBoxSelectorCompany.Size = new Size(214, 28); comboBoxSelectorCompany.TabIndex = 0; @@ -104,7 +111,7 @@ // buttonAddGun // buttonAddGun.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - buttonAddGun.Location = new Point(9, 87); + buttonAddGun.Location = new Point(9, 122); buttonAddGun.Name = "buttonAddGun"; buttonAddGun.Size = new Size(214, 52); buttonAddGun.TabIndex = 1; @@ -239,12 +246,53 @@ // pictureBox // pictureBox.Dock = DockStyle.Fill; - pictureBox.Location = new Point(0, 0); + pictureBox.Location = new Point(0, 28); pictureBox.Name = "pictureBox"; - pictureBox.Size = new Size(981, 772); + pictureBox.Size = new Size(981, 744); pictureBox.TabIndex = 1; pictureBox.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(1216, 28); + menuStrip.TabIndex = 2; + menuStrip.Text = "menuStrip1"; + // + // файлToolStripMenuItem + // + файлToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { saveToolStripMenuItem, downloadToolStripMenuItem }); + файл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; + // + // downloadToolStripMenuItem + // + downloadToolStripMenuItem.Name = "downloadToolStripMenuItem"; + downloadToolStripMenuItem.ShortcutKeys = Keys.Control | Keys.L; + downloadToolStripMenuItem.Size = new Size(227, 26); + downloadToolStripMenuItem.Text = "Загрузка"; + downloadToolStripMenuItem.Click += DownloadToolStripMenuItem_Click; + // + // saveFileDialog + // + saveFileDialog.Filter = "txt files|*.txt"; + // + // openFileDialog + // + openFileDialog.Filter = "txt files|*.txt"; + // // FormGunCollections // AutoScaleDimensions = new SizeF(8F, 20F); @@ -252,6 +300,8 @@ ClientSize = new Size(1216, 772); Controls.Add(pictureBox); Controls.Add(groupBox1); + Controls.Add(menuStrip); + MainMenuStrip = menuStrip; Name = "FormGunCollections"; Text = "Коллекция установок"; groupBox1.ResumeLayout(false); @@ -260,7 +310,10 @@ panelStorage.ResumeLayout(false); panelStorage.PerformLayout(); ((System.ComponentModel.ISupportInitialize)pictureBox).EndInit(); + menuStrip.ResumeLayout(false); + menuStrip.PerformLayout(); ResumeLayout(false); + PerformLayout(); } #endregion @@ -283,5 +336,11 @@ private Button buttonCreateCompany; private Button buttonCollectionDel; private Panel panelCompanyTools; + private MenuStrip menuStrip; + private ToolStripMenuItem файлToolStripMenuItem; + private ToolStripMenuItem saveToolStripMenuItem; + private ToolStripMenuItem downloadToolStripMenuItem; + private SaveFileDialog saveFileDialog; + private OpenFileDialog openFileDialog; } } \ No newline at end of file diff --git a/AntiAircraftGun/AntiAircraftGun/FormGunCollections.cs b/AntiAircraftGun/AntiAircraftGun/FormGunCollections.cs index 62f866e..60bd96b 100644 --- a/AntiAircraftGun/AntiAircraftGun/FormGunCollections.cs +++ b/AntiAircraftGun/AntiAircraftGun/FormGunCollections.cs @@ -48,7 +48,7 @@ public partial class FormGunCollections : Form /// private void SetGun(DrawningGun gun) { - if (_company == null||gun==null) { return; } + if (_company == null || gun == null) { return; } if (_company + gun) { MessageBox.Show("Объект добавлен"); @@ -223,4 +223,40 @@ listBoxCollection.SelectedItem == null) } } } + /// + /// Обработка нажатия "Cохранения" + /// + /// + /// + 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 DownloadToolStripMenuItem_Click(object sender, EventArgs e) + { + //TODO продумать логику + 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/AntiAircraftGun/AntiAircraftGun/FormGunCollections.resx b/AntiAircraftGun/AntiAircraftGun/FormGunCollections.resx index af32865..a4f11d6 100644 --- a/AntiAircraftGun/AntiAircraftGun/FormGunCollections.resx +++ b/AntiAircraftGun/AntiAircraftGun/FormGunCollections.resx @@ -117,4 +117,16 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + + + 145, 17 + + + 310, 17 + + + 25 + \ No newline at end of file diff --git a/AntiAircraftGun/AntiAircraftGun/FormGunConfig.cs b/AntiAircraftGun/AntiAircraftGun/FormGunConfig.cs index b7ce791..00ed6f8 100644 --- a/AntiAircraftGun/AntiAircraftGun/FormGunConfig.cs +++ b/AntiAircraftGun/AntiAircraftGun/FormGunConfig.cs @@ -76,7 +76,7 @@ public partial class FormGunConfig : Form label.DoDragDrop(new DrawningAntiAircraftGun((int)numericUpDownSpeed.Value, (double)numericUpDownWeight.Value, Color.White, - Color.Black, random.Next(10, 100), + Color.Black, checkBoxHatch.Checked, checkBoxRadar.Checked), DragDropEffects.Copy); } } -- 2.25.1 From 923224c02e68da26174250bd59da65585dff717c Mon Sep 17 00:00:00 2001 From: Ctepa Date: Mon, 22 Apr 2024 13:00:55 +0300 Subject: [PATCH 4/4] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=206=20=D0=BB=D0=B0=D0=B1=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StorageCollection.cs | 80 ++++++++++--------- .../Drawnings/ExtentionDrawningGun.cs | 2 +- .../AntiAircraftGun/Entities/EntityGun.cs | 4 +- 3 files changed, 47 insertions(+), 39 deletions(-) diff --git a/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/StorageCollection.cs b/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/StorageCollection.cs index 702f47d..1097ec3 100644 --- a/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/StorageCollection.cs +++ b/AntiAircraftGun/AntiAircraftGun/CollectionGenericObjects/StorageCollection.cs @@ -127,46 +127,52 @@ where T : DrawningGun /// public bool LoadData(string filename) { - if(!File.Exists(filename)) return false; - - string bufferTextFromFile = ""; - using(FileStream fs = new(filename, FileMode.Open)) + if (!File.Exists(filename)) { - byte[] b=new byte[fs.Length]; - UTF8Encoding temp = new(true); - while (fs.Read(b, 0, b.Length) > 0) bufferTextFromFile += temp.GetString(b); - } - - string[] strs = bufferTextFromFile.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries); - - if(strs ==null || strs.Length == 0) return false; - if (!strs[0].Equals(_collectionKey)) - // Если нет такой записи, то это не те данные return false; - - _storages.Clear(); - foreach (string data in strs) - { - string[] record=data.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?.CreateDrawningCar() is T gun) - { - if(!collection.Insert(gun)) return false; - } - } - _storages.Add(record[0], collection); } - return true; + using (StreamReader reader = File.OpenText(filename)) + { + string str = reader.ReadLine(); + if (str == null || str.Length == 0) + { + return false; + } + if (!str.StartsWith(_collectionKey)) + { + return false; + } + _storages.Clear(); + string strs = ""; + while ((strs = reader.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?.CreateDrawningCun() is T gun) + { + if (!collection.Insert(gun)) + { + return false; + } + } + } + _storages.Add(record[0], collection); + } + return true; + } } diff --git a/AntiAircraftGun/AntiAircraftGun/Drawnings/ExtentionDrawningGun.cs b/AntiAircraftGun/AntiAircraftGun/Drawnings/ExtentionDrawningGun.cs index 55d86f2..d7f685f 100644 --- a/AntiAircraftGun/AntiAircraftGun/Drawnings/ExtentionDrawningGun.cs +++ b/AntiAircraftGun/AntiAircraftGun/Drawnings/ExtentionDrawningGun.cs @@ -15,7 +15,7 @@ public static class ExtentionDrawningGun /// /// Строка с данными для создания объекта /// Объект - public static DrawningGun? CreateDrawningCar(this string info) + public static DrawningGun? CreateDrawningCun(this string info) { string[] strs = info.Split(_separatorForObject); EntityGun? gun = EntityAntiAircraftGun.CreateEntityAntiaircraftGun(strs); diff --git a/AntiAircraftGun/AntiAircraftGun/Entities/EntityGun.cs b/AntiAircraftGun/AntiAircraftGun/Entities/EntityGun.cs index 5c38a32..1fe6c8a 100644 --- a/AntiAircraftGun/AntiAircraftGun/Entities/EntityGun.cs +++ b/AntiAircraftGun/AntiAircraftGun/Entities/EntityGun.cs @@ -1,4 +1,6 @@ -namespace AntiAircraftGun.Entities; +using static System.Windows.Forms.VisualStyles.VisualStyleElement; + +namespace AntiAircraftGun.Entities; /// /// Класс-сущности "Орудие" /// -- 2.25.1