diff --git a/Airbus/Airbus/AirplaneCompareByColor.cs b/Airbus/Airbus/AirplaneCompareByColor.cs new file mode 100644 index 0000000..4c30e0c --- /dev/null +++ b/Airbus/Airbus/AirplaneCompareByColor.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Airbus +{ + internal class AirplaneCompareByColor : IComparer + { + public int Compare(IDrawningObject? x, IDrawningObject? y) + { + // TODO реализовать логику сравнения + throw new NotImplementedException(); + } + } + } diff --git a/Airbus/Airbus/AirplaneCompareByType.cs b/Airbus/Airbus/AirplaneCompareByType.cs new file mode 100644 index 0000000..04d80f3 --- /dev/null +++ b/Airbus/Airbus/AirplaneCompareByType.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Airbus +{ + internal class AirplaneCompareByType : 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 xAirplane = x as DrawningObjectAirplane; + var yAirplane = y as DrawningObjectAirplane; + if (xAirplane == null && yAirplane == null) + { + return 0; + } + if (xAirplane == null && yAirplane != null) + { + return 1; + } + if (xAirplane != null && yAirplane == null) + { + return -1; + } + if (xAirplane.GetAirplane.GetType().Name != yAirplane.GetAirplane.GetType().Name) + { + if (xAirplane.GetAirplane.GetType().Name == "DrawingAirplane") + { + return -1; + } + return 1; + } + var speedCompare = + xAirplane.GetAirplane.airplane.Speed.CompareTo(yAirplane.GetAirplane.airplane.Speed); + if (speedCompare != 0) + { + return speedCompare; + } + return xAirplane.GetAirplane.airplane.Weight.CompareTo(yAirplane.GetAirplane.airplane.Weight); + } + } +} diff --git a/Airbus/Airbus/DrawningObjectAirplane.cs b/Airbus/Airbus/DrawningObjectAirplane.cs index 5ec45c4..4d22429 100644 --- a/Airbus/Airbus/DrawningObjectAirplane.cs +++ b/Airbus/Airbus/DrawningObjectAirplane.cs @@ -14,6 +14,7 @@ namespace Airbus { _airplane = airplane; } + public DrawningAirplane GetAirplane => _airplane; public float Step => _airplane?.airplane?.Step ?? 0; public void DrawningObject(Graphics g) { @@ -27,7 +28,7 @@ namespace Airbus { _airplane?.MoveTransport(direction); } - public void SetObject(int x, int y, int width, int height) + public void SetObject(int x, int y, int width, int height) { _airplane?.SetPosition(x, y, width, height); } @@ -35,5 +36,33 @@ namespace Airbus public string GetInfo() => _airplane?.GetDataForSave(); public static IDrawningObject Create(string data) => new DrawningObjectAirplane(data.CreateDrawningAirplane()); + public bool Equals(IDrawningObject? other) + { + if (other == null) + { + return false; + } + var otherAirplane = other as DrawningObjectAirplane; + if (otherAirplane == null) + { + return false; + } + var airplane = _airplane.airplane; + var otherAirplaneAirplane = otherAirplane._airplane.airplane; + if (airplane.Speed != otherAirplaneAirplane.Speed) + { + return false; + } + if (airplane.Weight != otherAirplaneAirplane.Weight) + { + return false; + } + if (airplane.BodyColor != otherAirplaneAirplane.BodyColor) + { + return false; + } + // TODO доделать проверки в случае продвинутого объекта + return true; + } } } diff --git a/Airbus/Airbus/FormMapWithSetAirplane.Designer.cs b/Airbus/Airbus/FormMapWithSetAirplane.Designer.cs index 4d1a28d..7eb3e71 100644 --- a/Airbus/Airbus/FormMapWithSetAirplane.Designer.cs +++ b/Airbus/Airbus/FormMapWithSetAirplane.Designer.cs @@ -51,6 +51,8 @@ this.LoadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.openFileDialog = new System.Windows.Forms.OpenFileDialog(); this.saveFileDialog = new System.Windows.Forms.SaveFileDialog(); + this.buttonSortByType = new System.Windows.Forms.Button(); + this.buttonSortByColor = new System.Windows.Forms.Button(); this.groupBoxTools.SuspendLayout(); this.groupBoxMaps.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit(); @@ -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.buttonDown); this.groupBoxTools.Controls.Add(this.buttonRight); @@ -267,14 +271,14 @@ // SaveToolStripMenuItem // this.SaveToolStripMenuItem.Name = "SaveToolStripMenuItem"; - this.SaveToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.SaveToolStripMenuItem.Size = new System.Drawing.Size(141, 22); this.SaveToolStripMenuItem.Text = "Сохранение"; this.SaveToolStripMenuItem.Click += new System.EventHandler(this.SaveToolStripMenuItem_Click); // // LoadToolStripMenuItem // this.LoadToolStripMenuItem.Name = "LoadToolStripMenuItem"; - this.LoadToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.LoadToolStripMenuItem.Size = new System.Drawing.Size(141, 22); this.LoadToolStripMenuItem.Text = "Загрузка"; this.LoadToolStripMenuItem.Click += new System.EventHandler(this.LoadToolStripMenuItem_Click); // @@ -286,6 +290,26 @@ // this.saveFileDialog.Filter = "txt file | *.txt"; // + // buttonSortByType + // + this.buttonSortByType.Location = new System.Drawing.Point(12, 326); + this.buttonSortByType.Name = "buttonSortByType"; + this.buttonSortByType.Size = new System.Drawing.Size(83, 38); + this.buttonSortByType.TabIndex = 11; + this.buttonSortByType.Text = "Сортировать по типу"; + this.buttonSortByType.UseVisualStyleBackColor = true; + this.buttonSortByType.Click += new System.EventHandler(this.buttonSortByType_Click); + // + // buttonSortByColor + // + this.buttonSortByColor.Location = new System.Drawing.Point(101, 326); + this.buttonSortByColor.Name = "buttonSortByColor"; + this.buttonSortByColor.Size = new System.Drawing.Size(93, 38); + this.buttonSortByColor.TabIndex = 12; + this.buttonSortByColor.Text = "Сортировать по цвету"; + this.buttonSortByColor.UseVisualStyleBackColor = true; + this.buttonSortByColor.Click += new System.EventHandler(this.buttonSortByColor_Click); + // // FormMapWithSetAirplane // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); @@ -334,5 +358,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/Airbus/Airbus/FormMapWithSetAirplane.cs b/Airbus/Airbus/FormMapWithSetAirplane.cs index 3eb424c..3f56206 100644 --- a/Airbus/Airbus/FormMapWithSetAirplane.cs +++ b/Airbus/Airbus/FormMapWithSetAirplane.cs @@ -296,5 +296,22 @@ namespace Airbus pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].MoveObject(dir); } + + private void buttonSortByType_Click(object sender, EventArgs e) + { + if (listBoxMaps.SelectedIndex == -1) + { + return; + } + _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? + string.Empty].Sort(new AirplaneCompareByType()); + pictureBox.Image = + _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet(); + } + + private void buttonSortByColor_Click(object sender, EventArgs e) + { + + } } } diff --git a/Airbus/Airbus/IDrawningObject.cs b/Airbus/Airbus/IDrawningObject.cs index 1195eac..d71f508 100644 --- a/Airbus/Airbus/IDrawningObject.cs +++ b/Airbus/Airbus/IDrawningObject.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace Airbus { - internal interface IDrawningObject + internal interface IDrawningObject : IEquatable { public float Step { get; } void SetObject(int x, int y, int width, int height); diff --git a/Airbus/Airbus/MapWithSetAirplaneGeneric.cs b/Airbus/Airbus/MapWithSetAirplaneGeneric.cs index 4209b36..0c2dae2 100644 --- a/Airbus/Airbus/MapWithSetAirplaneGeneric.cs +++ b/Airbus/Airbus/MapWithSetAirplaneGeneric.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace Airbus { internal class MapWithSetAirplaneGeneric - where T : class, IDrawningObject + where T : class, IDrawningObject, IEquatable where U : AbstractMap { /// @@ -201,5 +201,9 @@ namespace Airbus _setAirplane.Insert(DrawningObjectAirplane.Create(rec) as T); } } + public void Sort(IComparer comparer) + { + _setAirplane.SortSet(comparer); + } } } diff --git a/Airbus/Airbus/SetAirplaneGeneric.cs b/Airbus/Airbus/SetAirplaneGeneric.cs index 8280990..c3cabec 100644 --- a/Airbus/Airbus/SetAirplaneGeneric.cs +++ b/Airbus/Airbus/SetAirplaneGeneric.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace Airbus { internal class SetAirplaneGeneric - where T : class + where T : class, IEquatable { private readonly List _places; public int Count => _places.Count; @@ -80,6 +80,14 @@ namespace Airbus } } } + public void SortSet(IComparer comparer) + { + if (comparer == null) + { + return; + } + _places.Sort(comparer); + } } }