diff --git a/ElectricLocomotive/ElectricLocomotive/FormLocomotiveCollection.Designer.cs b/ElectricLocomotive/ElectricLocomotive/FormLocomotiveCollection.Designer.cs index a921ee7..ab1e7bf 100644 --- a/ElectricLocomotive/ElectricLocomotive/FormLocomotiveCollection.Designer.cs +++ b/ElectricLocomotive/ElectricLocomotive/FormLocomotiveCollection.Designer.cs @@ -46,6 +46,8 @@ saveFileDialog = new SaveFileDialog(); openFileDialog = new OpenFileDialog(); groupBoxMenu = new GroupBox(); + ButtonSortByColor = new Button(); + ButtonSortByType = new Button(); groupBoxSets.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)pictureBoxCollection).BeginInit(); menuStrip.SuspendLayout(); @@ -54,10 +56,10 @@ // // groupBoxSets // + groupBoxSets.Controls.Add(ButtonSortByType); groupBoxSets.Controls.Add(textBoxSetName); groupBoxSets.Controls.Add(buttonDeleteSet); groupBoxSets.Controls.Add(listBoxStorages); - groupBoxSets.Controls.Add(ButtonAddLocomotive); groupBoxSets.Controls.Add(buttonAddSet); groupBoxSets.Location = new Point(0, 22); groupBoxSets.Name = "groupBoxSets"; @@ -70,14 +72,14 @@ // textBoxSetName.Location = new Point(6, 38); textBoxSetName.Name = "textBoxSetName"; - textBoxSetName.Size = new Size(226, 23); + textBoxSetName.Size = new Size(230, 23); textBoxSetName.TabIndex = 3; // // buttonDeleteSet // buttonDeleteSet.Location = new Point(6, 216); buttonDeleteSet.Name = "buttonDeleteSet"; - buttonDeleteSet.Size = new Size(226, 45); + buttonDeleteSet.Size = new Size(230, 45); buttonDeleteSet.TabIndex = 2; buttonDeleteSet.Text = "Удалить набор"; buttonDeleteSet.UseVisualStyleBackColor = true; @@ -89,15 +91,15 @@ listBoxStorages.ItemHeight = 15; listBoxStorages.Location = new Point(6, 116); listBoxStorages.Name = "listBoxStorages"; - listBoxStorages.Size = new Size(226, 94); + listBoxStorages.Size = new Size(230, 94); listBoxStorages.TabIndex = 1; listBoxStorages.SelectedIndexChanged += listBoxStorages_SelectedIndexChanged; // // ButtonAddLocomotive // - ButtonAddLocomotive.Location = new Point(6, 269); + ButtonAddLocomotive.Location = new Point(6, 395); ButtonAddLocomotive.Name = "ButtonAddLocomotive"; - ButtonAddLocomotive.Size = new Size(226, 39); + ButtonAddLocomotive.Size = new Size(230, 39); ButtonAddLocomotive.TabIndex = 0; ButtonAddLocomotive.Text = "Добавить локомотив"; ButtonAddLocomotive.UseVisualStyleBackColor = true; @@ -107,7 +109,7 @@ // buttonAddSet.Location = new Point(6, 67); buttonAddSet.Name = "buttonAddSet"; - buttonAddSet.Size = new Size(226, 34); + buttonAddSet.Size = new Size(230, 34); buttonAddSet.TabIndex = 0; buttonAddSet.Text = "Добавить набор"; buttonAddSet.UseVisualStyleBackColor = true; @@ -115,14 +117,14 @@ // // maskedTextBoxNumber // - maskedTextBoxNumber.Location = new Point(6, 342); + maskedTextBoxNumber.Location = new Point(6, 440); maskedTextBoxNumber.Name = "maskedTextBoxNumber"; - maskedTextBoxNumber.Size = new Size(226, 23); + maskedTextBoxNumber.Size = new Size(230, 23); maskedTextBoxNumber.TabIndex = 3; // // ButtonRefreshCollection // - ButtonRefreshCollection.Location = new Point(6, 440); + ButtonRefreshCollection.Location = new Point(6, 514); ButtonRefreshCollection.Name = "ButtonRefreshCollection"; ButtonRefreshCollection.Size = new Size(230, 43); ButtonRefreshCollection.TabIndex = 2; @@ -132,7 +134,7 @@ // // ButtonRemoveLocomotive // - ButtonRemoveLocomotive.Location = new Point(6, 388); + ButtonRemoveLocomotive.Location = new Point(6, 469); ButtonRemoveLocomotive.Name = "ButtonRemoveLocomotive"; ButtonRemoveLocomotive.Size = new Size(230, 39); ButtonRemoveLocomotive.TabIndex = 1; @@ -195,10 +197,12 @@ // groupBoxMenu // groupBoxMenu.AutoSize = true; + groupBoxMenu.Controls.Add(ButtonSortByColor); groupBoxMenu.Controls.Add(maskedTextBoxNumber); groupBoxMenu.Controls.Add(groupBoxSets); groupBoxMenu.Controls.Add(ButtonRemoveLocomotive); groupBoxMenu.Controls.Add(ButtonRefreshCollection); + groupBoxMenu.Controls.Add(ButtonAddLocomotive); groupBoxMenu.Dock = DockStyle.Right; groupBoxMenu.Location = new Point(661, 24); groupBoxMenu.Name = "groupBoxMenu"; @@ -207,6 +211,24 @@ groupBoxMenu.TabStop = false; groupBoxMenu.Text = "Инструменты"; // + // ButtonSortByColor + // + ButtonSortByColor.Location = new Point(6, 342); + ButtonSortByColor.Name = "ButtonSortByColor"; + ButtonSortByColor.Size = new Size(230, 38); + ButtonSortByColor.TabIndex = 4; + ButtonSortByColor.Text = "Сортировка по цвету"; + ButtonSortByColor.UseVisualStyleBackColor = true; + // + // ButtonSortByType + // + ButtonSortByType.Location = new Point(6, 273); + ButtonSortByType.Name = "ButtonSortByType"; + ButtonSortByType.Size = new Size(230, 41); + ButtonSortByType.TabIndex = 4; + ButtonSortByType.Text = "Сортировка по типу"; + ButtonSortByType.UseVisualStyleBackColor = true; + // // FormLocomotiveCollection // AutoScaleDimensions = new SizeF(7F, 15F); @@ -247,5 +269,7 @@ private ToolStripMenuItem LoadToolStripMenuItem; private ToolStripMenuItem SaveToolStripMenuItem; private GroupBox groupBoxMenu; + private Button ButtonSortByType; + private Button ButtonSortByColor; } } \ No newline at end of file diff --git a/ElectricLocomotive/ElectricLocomotive/FormLocomotiveCollection.cs b/ElectricLocomotive/ElectricLocomotive/FormLocomotiveCollection.cs index 64a4713..d88fc9f 100644 --- a/ElectricLocomotive/ElectricLocomotive/FormLocomotiveCollection.cs +++ b/ElectricLocomotive/ElectricLocomotive/FormLocomotiveCollection.cs @@ -53,7 +53,7 @@ namespace ProjectElectricLocomotive _logger.LogWarning("Неудачная попытка. Коллекция не добавлена, не все данные заполнены"); return; } - _storage.AddSet(textBoxSetName.Text); + _storage.AddSet(textBoxSetName.Text); ReloadObjects(); _logger.LogInformation($"Добавлен набор: {textBoxSetName.Text}"); @@ -109,7 +109,7 @@ namespace ProjectElectricLocomotive ReloadObjects(); _logger.LogInformation($"Набор '{name}' удален"); } - _logger.LogWarning("Отмена удаления набора"); + _logger.LogWarning("Отмена удаления набора"); } private void buttonRemoveLocomotive_Click(object sender, EventArgs e) { diff --git a/ElectricLocomotive/ElectricLocomotive/LocomotiveCompareByColor.cs b/ElectricLocomotive/ElectricLocomotive/LocomotiveCompareByColor.cs new file mode 100644 index 0000000..5097ffc --- /dev/null +++ b/ElectricLocomotive/ElectricLocomotive/LocomotiveCompareByColor.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ProjectElectricLocomotive.DrawingObjects; + +namespace ProjectElectricLocomotive.Generics +{ + internal interface LocomotiveCompareByColor + { + public int Compare(DrawingLocomotive? x, DrawingLocomotive? y) + { + // TODO реализовать логику сравнения + throw new NotImplementedException(); + } + + } +} diff --git a/ElectricLocomotive/ElectricLocomotive/LocomotiveCompareByType.cs b/ElectricLocomotive/ElectricLocomotive/LocomotiveCompareByType.cs new file mode 100644 index 0000000..656238e --- /dev/null +++ b/ElectricLocomotive/ElectricLocomotive/LocomotiveCompareByType.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ProjectElectricLocomotive.DrawingObjects; + +namespace ProjectElectricLocomotive.Generics +{ + internal interface LocomotiveCompareByType : IComparer + { + public int Compare(DrawingLocomotive? x, DrawingLocomotive? y) + { + if (x == null || x.EntityLocomotive == null) + { + throw new ArgumentNullException(nameof(x)); + } + if (y == null || y.EntityLocomotive == null) + { + throw new ArgumentNullException(nameof(y)); + } + if (x.GetType().Name != y.GetType().Name) + { + return x.GetType().Name.CompareTo(y.GetType().Name); + } + var speedCompare = x.EntityLocomotive.Speed.CompareTo(y.EntityLocomotive.Speed); + if (speedCompare != 0) + { + return speedCompare; + } + return x.EntityLocomotive.Weight.CompareTo(y.EntityLocomotive.Weight); + } + } +} diff --git a/ElectricLocomotive/ElectricLocomotive/LocomotivesGenericCollection.cs b/ElectricLocomotive/ElectricLocomotive/LocomotivesGenericCollection.cs index 611b823..5f100eb 100644 --- a/ElectricLocomotive/ElectricLocomotive/LocomotivesGenericCollection.cs +++ b/ElectricLocomotive/ElectricLocomotive/LocomotivesGenericCollection.cs @@ -17,6 +17,9 @@ namespace ProjectElectricLocomotive.Generics private readonly int _placeSizeWidth = 200; private readonly int _placeSizeHeight = 130; private readonly SetGeneric _collection; + + public void Sort(IComparer comparer) => _collection.SortSet(comparer); + public LocomotivesGenericCollection(int picWidth, int picHeight) { int width = picWidth / _placeSizeWidth; diff --git a/ElectricLocomotive/ElectricLocomotive/SetGeneric.cs b/ElectricLocomotive/ElectricLocomotive/SetGeneric.cs index e5b63dd..abc00e0 100644 --- a/ElectricLocomotive/ElectricLocomotive/SetGeneric.cs +++ b/ElectricLocomotive/ElectricLocomotive/SetGeneric.cs @@ -16,6 +16,8 @@ namespace ProjectElectricLocomotive.Generics /// Максимальное количество объектов в списке private readonly int _maxCount; + + public void SortSet(IComparer comparer) => _places.Sort(comparer); public SetGeneric(int count) { _maxCount = count; @@ -23,12 +25,22 @@ namespace ProjectElectricLocomotive.Generics } /// Добавление объекта в набор - public int Insert(T loco) + public int Insert(T loco, IEqualityComparer? equal = null) { + if (equal != null) + { + foreach (var secondLoco in _places) + { + if (equal.Equals(loco, secondLoco)) + { + throw new Exception("Такой объект уже есть в коллекции"); + } + } + } return Insert(loco, 0); } - public int Insert(T loco, int position) + public int Insert(T loco, int position, IEqualityComparer? equal = null) { if (_places.Count >= _maxCount) throw new StorageOverflowException(_maxCount); @@ -37,6 +49,18 @@ namespace ProjectElectricLocomotive.Generics { return -1; } + + if (equal != null) + { + foreach (var secondLoco in _places) + { + if (equal.Equals(loco, secondLoco)) + { + throw new ApplicationException("Такой объект уже есть в коллекции"); + } + } + } + _places.Insert(position, loco); return position; }