diff --git a/Locomotives/Locomotives/DrawningObjectLocomotive.cs b/Locomotives/Locomotives/DrawningObjectLocomotive.cs
index b299bc8..1c6086e 100644
--- a/Locomotives/Locomotives/DrawningObjectLocomotive.cs
+++ b/Locomotives/Locomotives/DrawningObjectLocomotive.cs
@@ -9,6 +9,9 @@
/// Объект от класса отрисовки локомотива
///
private DrawningLocomotive _locomotive = null;
+
+ public DrawningLocomotive GetLocomotive => _locomotive;
+
public DrawningObjectLocomotive(DrawningLocomotive locomotive)
{
_locomotive = locomotive;
diff --git a/Locomotives/Locomotives/FormMapWithSetLocomotives.Designer.cs b/Locomotives/Locomotives/FormMapWithSetLocomotives.Designer.cs
index 5126946..54f22f0 100644
--- a/Locomotives/Locomotives/FormMapWithSetLocomotives.Designer.cs
+++ b/Locomotives/Locomotives/FormMapWithSetLocomotives.Designer.cs
@@ -29,6 +29,8 @@
private void InitializeComponent()
{
this.groupBoxTools = new System.Windows.Forms.GroupBox();
+ this.buttonSortByColor = new System.Windows.Forms.Button();
+ this.buttonSortByType = new System.Windows.Forms.Button();
this.groupBoxMaps = new System.Windows.Forms.GroupBox();
this.buttonDeleteMap = new System.Windows.Forms.Button();
this.listBoxMaps = new System.Windows.Forms.ListBox();
@@ -59,6 +61,8 @@
//
// groupBoxTools
//
+ this.groupBoxTools.Controls.Add(this.buttonSortByColor);
+ this.groupBoxTools.Controls.Add(this.buttonSortByType);
this.groupBoxTools.Controls.Add(this.groupBoxMaps);
this.groupBoxTools.Controls.Add(this.buttonUp);
this.groupBoxTools.Controls.Add(this.buttonDown);
@@ -77,6 +81,26 @@
this.groupBoxTools.TabStop = false;
this.groupBoxTools.Text = "Инструменты";
//
+ // buttonSortByColor
+ //
+ this.buttonSortByColor.Location = new System.Drawing.Point(31, 341);
+ this.buttonSortByColor.Name = "buttonSortByColor";
+ this.buttonSortByColor.Size = new System.Drawing.Size(164, 23);
+ this.buttonSortByColor.TabIndex = 3;
+ this.buttonSortByColor.Text = "Сортировать по цвету";
+ this.buttonSortByColor.UseVisualStyleBackColor = true;
+ this.buttonSortByColor.Click += new System.EventHandler(this.ButtonSortByColor_Click);
+ //
+ // buttonSortByType
+ //
+ this.buttonSortByType.Location = new System.Drawing.Point(31, 312);
+ this.buttonSortByType.Name = "buttonSortByType";
+ this.buttonSortByType.Size = new System.Drawing.Size(164, 23);
+ this.buttonSortByType.TabIndex = 3;
+ this.buttonSortByType.Text = "Сортировать по типу";
+ this.buttonSortByType.UseVisualStyleBackColor = true;
+ this.buttonSortByType.Click += new System.EventHandler(this.ButtonSortByType_Click);
+ //
// groupBoxMaps
//
this.groupBoxMaps.Anchor = System.Windows.Forms.AnchorStyles.Right;
@@ -192,7 +216,7 @@
//
// buttonShowOnMap
//
- this.buttonShowOnMap.Location = new System.Drawing.Point(31, 426);
+ this.buttonShowOnMap.Location = new System.Drawing.Point(31, 526);
this.buttonShowOnMap.Name = "buttonShowOnMap";
this.buttonShowOnMap.Size = new System.Drawing.Size(164, 26);
this.buttonShowOnMap.TabIndex = 5;
@@ -202,7 +226,7 @@
//
// buttonShowStorage
//
- this.buttonShowStorage.Location = new System.Drawing.Point(31, 394);
+ this.buttonShowStorage.Location = new System.Drawing.Point(31, 494);
this.buttonShowStorage.Name = "buttonShowStorage";
this.buttonShowStorage.Size = new System.Drawing.Size(164, 26);
this.buttonShowStorage.TabIndex = 4;
@@ -212,7 +236,7 @@
//
// buttonRemoveLocomotive
//
- this.buttonRemoveLocomotive.Location = new System.Drawing.Point(31, 362);
+ this.buttonRemoveLocomotive.Location = new System.Drawing.Point(31, 462);
this.buttonRemoveLocomotive.Name = "buttonRemoveLocomotive";
this.buttonRemoveLocomotive.Size = new System.Drawing.Size(164, 26);
this.buttonRemoveLocomotive.TabIndex = 3;
@@ -222,7 +246,7 @@
//
// maskedTextBoxPosition
//
- this.maskedTextBoxPosition.Location = new System.Drawing.Point(31, 333);
+ this.maskedTextBoxPosition.Location = new System.Drawing.Point(31, 433);
this.maskedTextBoxPosition.Mask = "00";
this.maskedTextBoxPosition.Name = "maskedTextBoxPosition";
this.maskedTextBoxPosition.Size = new System.Drawing.Size(164, 23);
@@ -230,7 +254,7 @@
//
// buttonAddCar
//
- this.buttonAddCar.Location = new System.Drawing.Point(31, 291);
+ this.buttonAddCar.Location = new System.Drawing.Point(31, 391);
this.buttonAddCar.Name = "buttonAddCar";
this.buttonAddCar.Size = new System.Drawing.Size(164, 26);
this.buttonAddCar.TabIndex = 1;
@@ -336,5 +360,7 @@
private ToolStripMenuItem LoadToolStripMenuItem;
private OpenFileDialog openFileDialog;
private SaveFileDialog saveFileDialog;
+ private Button buttonSortByColor;
+ private Button buttonSortByType;
}
}
\ No newline at end of file
diff --git a/Locomotives/Locomotives/FormMapWithSetLocomotives.cs b/Locomotives/Locomotives/FormMapWithSetLocomotives.cs
index d498e08..104d974 100644
--- a/Locomotives/Locomotives/FormMapWithSetLocomotives.cs
+++ b/Locomotives/Locomotives/FormMapWithSetLocomotives.cs
@@ -301,5 +301,33 @@ namespace Locomotives
}
}
}
+ ///
+ /// Сортировка по типу
+ ///
+ ///
+ ///
+ private void ButtonSortByType_Click(object sender, EventArgs e)
+ {
+ if (listBoxMaps.SelectedIndex == -1)
+ {
+ return;
+ }
+ _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].Sort(new LocomotiveCompareByType());
+ pictureBoxLocomotives.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet();
+ }
+ ///
+ /// Сортировка по цвету
+ ///
+ ///
+ ///
+ private void ButtonSortByColor_Click(object sender, EventArgs e)
+ {
+ if (listBoxMaps.SelectedIndex == -1)
+ {
+ return;
+ }
+ _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].Sort(new LocomotiveCompareByColor());
+ pictureBoxLocomotives.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet();
+ }
}
}
diff --git a/Locomotives/Locomotives/LocomotiveCompareByColor.cs b/Locomotives/Locomotives/LocomotiveCompareByColor.cs
new file mode 100644
index 0000000..3e807a3
--- /dev/null
+++ b/Locomotives/Locomotives/LocomotiveCompareByColor.cs
@@ -0,0 +1,38 @@
+namespace Locomotives
+{
+ internal class LocomotiveCompareByColor : IComparer
+ {
+ public int Compare(IDrawningObject? x, IDrawningObject? y)
+ {
+ if (x == null && y == null)
+ {
+ return 0;
+ }
+ if (x == null && y != null)
+ {
+ return 1;
+ }
+ if (x != null && y == null)
+ {
+ return -1;
+ }
+ var xLocomotive = x as DrawningObjectLocomotive;
+ var yLocomotive = y as DrawningObjectLocomotive;
+ if (xLocomotive == null && yLocomotive == null)
+ {
+ return 0;
+ }
+ if (xLocomotive == null && yLocomotive != null)
+ {
+ return 1;
+ }
+ if (xLocomotive != null && yLocomotive == null)
+ {
+ return -1;
+ }
+ var xColorName = xLocomotive.GetLocomotive.Locomotive.BodyColor.Name;
+ var yColorName = yLocomotive.GetLocomotive.Locomotive.BodyColor.Name;
+ return xColorName.CompareTo(yColorName);
+ }
+ }
+}
diff --git a/Locomotives/Locomotives/LocomotiveCompareByType.cs b/Locomotives/Locomotives/LocomotiveCompareByType.cs
new file mode 100644
index 0000000..9aa24ec
--- /dev/null
+++ b/Locomotives/Locomotives/LocomotiveCompareByType.cs
@@ -0,0 +1,49 @@
+namespace Locomotives
+{
+ internal class LocomotiveCompareByType : IComparer
+ {
+ public int Compare(IDrawningObject? x, IDrawningObject? y)
+ {
+ if (x == null && y == null)
+ {
+ return 0;
+ }
+ if (x == null && y != null)
+ {
+ return 1;
+ }
+ if (x != null && y == null)
+ {
+ return -1;
+ }
+ var xLocomotive = x as DrawningObjectLocomotive;
+ var yLocomotive = y as DrawningObjectLocomotive;
+ if (xLocomotive == null && yLocomotive == null)
+ {
+ return 0;
+ }
+ if (xLocomotive == null && yLocomotive != null)
+ {
+ return 1;
+ }
+ if (xLocomotive != null && yLocomotive == null)
+ {
+ return -1;
+ }
+ if (xLocomotive?.GetLocomotive.GetType().Name != yLocomotive?.GetLocomotive.GetType().Name)
+ {
+ if (xLocomotive.GetLocomotive.GetType().Name == "DrawningLocomotive")
+ {
+ return -1;
+ }
+ return 1;
+ }
+ var speedCompare = xLocomotive.GetLocomotive.Locomotive.Speed.CompareTo(yLocomotive.GetLocomotive.Locomotive.Speed);
+ if (speedCompare != 0)
+ {
+ return speedCompare;
+ }
+ return xLocomotive.GetLocomotive.Locomotive.Weight.CompareTo(yLocomotive.GetLocomotive.Locomotive.Weight);
+ }
+ }
+}
diff --git a/Locomotives/Locomotives/MapWithSetLocomotivesGeneric.cs b/Locomotives/Locomotives/MapWithSetLocomotivesGeneric.cs
index 75679a0..732ddd8 100644
--- a/Locomotives/Locomotives/MapWithSetLocomotivesGeneric.cs
+++ b/Locomotives/Locomotives/MapWithSetLocomotivesGeneric.cs
@@ -201,5 +201,9 @@
_setLocomotives.Insert(DrawningObjectLocomotive.Create(record) as T);
}
}
+ public void Sort(IComparer comparer)
+ {
+ _setLocomotives.SortSet(comparer);
+ }
}
}
diff --git a/Locomotives/Locomotives/SetLocomotivesGeneric.cs b/Locomotives/Locomotives/SetLocomotivesGeneric.cs
index fe6a69d..fd289af 100644
--- a/Locomotives/Locomotives/SetLocomotivesGeneric.cs
+++ b/Locomotives/Locomotives/SetLocomotivesGeneric.cs
@@ -123,5 +123,13 @@
}
}
}
+ public void SortSet(IComparer comparer)
+ {
+ if (comparer == null)
+ {
+ return;
+ }
+ _places.Sort(comparer);
+ }
}
}