Готовая 8 лабораторная
This commit is contained in:
parent
14ce4e5d49
commit
f52c6557ce
57
ProjectMonorail/ProjectMonorail/DrawingMonorailEqutables.cs
Normal file
57
ProjectMonorail/ProjectMonorail/DrawingMonorailEqutables.cs
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
using ProjectMonorail.DrawingObjects;
|
||||||
|
using ProjectMonorail.Entities;
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
|
||||||
|
namespace ProjectMonorail.Generics
|
||||||
|
{
|
||||||
|
internal class DrawingMonorailEqutables : IEqualityComparer<DrawingMonorail?>
|
||||||
|
{
|
||||||
|
public bool Equals(DrawingMonorail? x, DrawingMonorail? y)
|
||||||
|
{
|
||||||
|
if (x == null || x.EntityMonorail == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(x));
|
||||||
|
}
|
||||||
|
if (y == null || y.EntityMonorail == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(y));
|
||||||
|
}
|
||||||
|
if (x.GetType().Name != y.GetType().Name)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (x.EntityMonorail.Speed != y.EntityMonorail.Speed)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (x.EntityMonorail.Weight != y.EntityMonorail.Weight)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (x.EntityMonorail.MainColor != y.EntityMonorail.MainColor)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (x is DrawingExtendedMonorail && y is DrawingExtendedMonorail)
|
||||||
|
{
|
||||||
|
EntityExtendedMonorail xExtendedMonorail = (EntityExtendedMonorail)x.EntityMonorail;
|
||||||
|
EntityExtendedMonorail yExtendedMonorail = (EntityExtendedMonorail)y.EntityMonorail;
|
||||||
|
|
||||||
|
if (xExtendedMonorail.AdditionalColor != yExtendedMonorail.AdditionalColor)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (xExtendedMonorail.MagneticRail != yExtendedMonorail.MagneticRail)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (xExtendedMonorail.ExtraCabin != yExtendedMonorail.ExtraCabin)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int GetHashCode([DisallowNull] DrawingMonorail obj)
|
||||||
|
{
|
||||||
|
return obj.GetHashCode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -29,6 +29,8 @@
|
|||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
panelTools = new Panel();
|
panelTools = new Panel();
|
||||||
|
buttonSortByColor = new Button();
|
||||||
|
buttonSortByType = new Button();
|
||||||
panelSets = new Panel();
|
panelSets = new Panel();
|
||||||
textBoxNameSet = new TextBox();
|
textBoxNameSet = new TextBox();
|
||||||
buttonAddSet = new Button();
|
buttonAddSet = new Button();
|
||||||
@ -57,6 +59,8 @@
|
|||||||
//
|
//
|
||||||
panelTools.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
panelTools.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||||
panelTools.BorderStyle = BorderStyle.FixedSingle;
|
panelTools.BorderStyle = BorderStyle.FixedSingle;
|
||||||
|
panelTools.Controls.Add(buttonSortByColor);
|
||||||
|
panelTools.Controls.Add(buttonSortByType);
|
||||||
panelTools.Controls.Add(panelSets);
|
panelTools.Controls.Add(panelSets);
|
||||||
panelTools.Controls.Add(buttonRefreshCollection);
|
panelTools.Controls.Add(buttonRefreshCollection);
|
||||||
panelTools.Controls.Add(labelToolsName);
|
panelTools.Controls.Add(labelToolsName);
|
||||||
@ -65,9 +69,37 @@
|
|||||||
panelTools.Controls.Add(buttonAddMonorail);
|
panelTools.Controls.Add(buttonAddMonorail);
|
||||||
panelTools.Location = new Point(784, 38);
|
panelTools.Location = new Point(784, 38);
|
||||||
panelTools.Name = "panelTools";
|
panelTools.Name = "panelTools";
|
||||||
panelTools.Size = new Size(187, 580);
|
panelTools.Size = new Size(187, 661);
|
||||||
panelTools.TabIndex = 0;
|
panelTools.TabIndex = 0;
|
||||||
//
|
//
|
||||||
|
// buttonSortByColor
|
||||||
|
//
|
||||||
|
buttonSortByColor.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||||
|
buttonSortByColor.BackColor = SystemColors.Window;
|
||||||
|
buttonSortByColor.FlatAppearance.BorderColor = Color.Black;
|
||||||
|
buttonSortByColor.FlatStyle = FlatStyle.Flat;
|
||||||
|
buttonSortByColor.Location = new Point(5, 392);
|
||||||
|
buttonSortByColor.Name = "buttonSortByColor";
|
||||||
|
buttonSortByColor.Size = new Size(175, 28);
|
||||||
|
buttonSortByColor.TabIndex = 6;
|
||||||
|
buttonSortByColor.Text = "Sort by color";
|
||||||
|
buttonSortByColor.UseVisualStyleBackColor = false;
|
||||||
|
buttonSortByColor.Click += buttonSortByColor_Click;
|
||||||
|
//
|
||||||
|
// buttonSortByType
|
||||||
|
//
|
||||||
|
buttonSortByType.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||||
|
buttonSortByType.BackColor = SystemColors.Window;
|
||||||
|
buttonSortByType.FlatAppearance.BorderColor = Color.Black;
|
||||||
|
buttonSortByType.FlatStyle = FlatStyle.Flat;
|
||||||
|
buttonSortByType.Location = new Point(5, 354);
|
||||||
|
buttonSortByType.Name = "buttonSortByType";
|
||||||
|
buttonSortByType.Size = new Size(175, 28);
|
||||||
|
buttonSortByType.TabIndex = 5;
|
||||||
|
buttonSortByType.Text = "Sort by type";
|
||||||
|
buttonSortByType.UseVisualStyleBackColor = false;
|
||||||
|
buttonSortByType.Click += buttonSortByType_Click;
|
||||||
|
//
|
||||||
// panelSets
|
// panelSets
|
||||||
//
|
//
|
||||||
panelSets.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
panelSets.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||||
@ -145,7 +177,7 @@
|
|||||||
buttonRefreshCollection.BackColor = SystemColors.Window;
|
buttonRefreshCollection.BackColor = SystemColors.Window;
|
||||||
buttonRefreshCollection.FlatAppearance.BorderColor = Color.Black;
|
buttonRefreshCollection.FlatAppearance.BorderColor = Color.Black;
|
||||||
buttonRefreshCollection.FlatStyle = FlatStyle.Flat;
|
buttonRefreshCollection.FlatStyle = FlatStyle.Flat;
|
||||||
buttonRefreshCollection.Location = new Point(5, 534);
|
buttonRefreshCollection.Location = new Point(5, 615);
|
||||||
buttonRefreshCollection.Name = "buttonRefreshCollection";
|
buttonRefreshCollection.Name = "buttonRefreshCollection";
|
||||||
buttonRefreshCollection.Size = new Size(175, 34);
|
buttonRefreshCollection.Size = new Size(175, 34);
|
||||||
buttonRefreshCollection.TabIndex = 3;
|
buttonRefreshCollection.TabIndex = 3;
|
||||||
@ -168,7 +200,7 @@
|
|||||||
//
|
//
|
||||||
maskedTextBoxNumber.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
maskedTextBoxNumber.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||||
maskedTextBoxNumber.BorderStyle = BorderStyle.FixedSingle;
|
maskedTextBoxNumber.BorderStyle = BorderStyle.FixedSingle;
|
||||||
maskedTextBoxNumber.Location = new Point(4, 411);
|
maskedTextBoxNumber.Location = new Point(4, 492);
|
||||||
maskedTextBoxNumber.Name = "maskedTextBoxNumber";
|
maskedTextBoxNumber.Name = "maskedTextBoxNumber";
|
||||||
maskedTextBoxNumber.Size = new Size(175, 23);
|
maskedTextBoxNumber.Size = new Size(175, 23);
|
||||||
maskedTextBoxNumber.TabIndex = 2;
|
maskedTextBoxNumber.TabIndex = 2;
|
||||||
@ -179,7 +211,7 @@
|
|||||||
buttonRemoveMonorail.BackColor = SystemColors.Window;
|
buttonRemoveMonorail.BackColor = SystemColors.Window;
|
||||||
buttonRemoveMonorail.FlatAppearance.BorderColor = Color.Black;
|
buttonRemoveMonorail.FlatAppearance.BorderColor = Color.Black;
|
||||||
buttonRemoveMonorail.FlatStyle = FlatStyle.Flat;
|
buttonRemoveMonorail.FlatStyle = FlatStyle.Flat;
|
||||||
buttonRemoveMonorail.Location = new Point(4, 451);
|
buttonRemoveMonorail.Location = new Point(4, 532);
|
||||||
buttonRemoveMonorail.Name = "buttonRemoveMonorail";
|
buttonRemoveMonorail.Name = "buttonRemoveMonorail";
|
||||||
buttonRemoveMonorail.Size = new Size(175, 34);
|
buttonRemoveMonorail.Size = new Size(175, 34);
|
||||||
buttonRemoveMonorail.TabIndex = 1;
|
buttonRemoveMonorail.TabIndex = 1;
|
||||||
@ -193,7 +225,7 @@
|
|||||||
buttonAddMonorail.BackColor = SystemColors.Window;
|
buttonAddMonorail.BackColor = SystemColors.Window;
|
||||||
buttonAddMonorail.FlatAppearance.BorderColor = Color.Black;
|
buttonAddMonorail.FlatAppearance.BorderColor = Color.Black;
|
||||||
buttonAddMonorail.FlatStyle = FlatStyle.Flat;
|
buttonAddMonorail.FlatStyle = FlatStyle.Flat;
|
||||||
buttonAddMonorail.Location = new Point(4, 357);
|
buttonAddMonorail.Location = new Point(4, 438);
|
||||||
buttonAddMonorail.Name = "buttonAddMonorail";
|
buttonAddMonorail.Name = "buttonAddMonorail";
|
||||||
buttonAddMonorail.Size = new Size(175, 34);
|
buttonAddMonorail.Size = new Size(175, 34);
|
||||||
buttonAddMonorail.TabIndex = 0;
|
buttonAddMonorail.TabIndex = 0;
|
||||||
@ -205,7 +237,7 @@
|
|||||||
//
|
//
|
||||||
pictureBoxCollection.Location = new Point(8, 38);
|
pictureBoxCollection.Location = new Point(8, 38);
|
||||||
pictureBoxCollection.Name = "pictureBoxCollection";
|
pictureBoxCollection.Name = "pictureBoxCollection";
|
||||||
pictureBoxCollection.Size = new Size(774, 580);
|
pictureBoxCollection.Size = new Size(774, 661);
|
||||||
pictureBoxCollection.TabIndex = 1;
|
pictureBoxCollection.TabIndex = 1;
|
||||||
pictureBoxCollection.TabStop = false;
|
pictureBoxCollection.TabStop = false;
|
||||||
//
|
//
|
||||||
@ -254,7 +286,7 @@
|
|||||||
//
|
//
|
||||||
AutoScaleDimensions = new SizeF(7F, 15F);
|
AutoScaleDimensions = new SizeF(7F, 15F);
|
||||||
AutoScaleMode = AutoScaleMode.Font;
|
AutoScaleMode = AutoScaleMode.Font;
|
||||||
ClientSize = new Size(974, 626);
|
ClientSize = new Size(974, 701);
|
||||||
Controls.Add(pictureBoxCollection);
|
Controls.Add(pictureBoxCollection);
|
||||||
Controls.Add(panelTools);
|
Controls.Add(panelTools);
|
||||||
Controls.Add(menuStripFile);
|
Controls.Add(menuStripFile);
|
||||||
@ -294,5 +326,7 @@
|
|||||||
private ToolStripMenuItem loadToolStripMenuItem;
|
private ToolStripMenuItem loadToolStripMenuItem;
|
||||||
private OpenFileDialog openFileDialog;
|
private OpenFileDialog openFileDialog;
|
||||||
private SaveFileDialog saveFileDialog;
|
private SaveFileDialog saveFileDialog;
|
||||||
|
private Button buttonSortByColor;
|
||||||
|
private Button buttonSortByType;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -39,7 +39,7 @@ namespace ProjectMonorail
|
|||||||
listBoxSets.Items.Clear();
|
listBoxSets.Items.Clear();
|
||||||
for (int i = 0; i < _storage.Keys.Count; i++)
|
for (int i = 0; i < _storage.Keys.Count; i++)
|
||||||
{
|
{
|
||||||
listBoxSets.Items.Add(_storage.Keys[i]);
|
listBoxSets.Items.Add(_storage.Keys[i].Name);
|
||||||
}
|
}
|
||||||
if (listBoxSets.Items.Count > 0 && (index == -1 || index >= listBoxSets.Items.Count))
|
if (listBoxSets.Items.Count > 0 && (index == -1 || index >= listBoxSets.Items.Count))
|
||||||
{
|
{
|
||||||
@ -136,6 +136,11 @@ namespace ProjectMonorail
|
|||||||
MessageBox.Show(ex.Message);
|
MessageBox.Show(ex.Message);
|
||||||
_logger.LogWarning($"Failed attempt to add a object: {ex.Message}");
|
_logger.LogWarning($"Failed attempt to add a object: {ex.Message}");
|
||||||
}
|
}
|
||||||
|
catch (ArgumentException ex)
|
||||||
|
{
|
||||||
|
MessageBox.Show(ex.Message);
|
||||||
|
_logger.LogWarning($"Failed attempt to add a object: {ex.Message}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -272,5 +277,38 @@ namespace ProjectMonorail
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Сортировка по типу
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void buttonSortByType_Click(object sender, EventArgs e) => CompareMonorails(new MonorailCompareByType());
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Сортировка по цвету
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void buttonSortByColor_Click(object sender, EventArgs e) => CompareMonorails(new MonorailCompareByColor());
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Сортировка по сравнителю
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="comparer"></param>
|
||||||
|
private void CompareMonorails(IComparer<DrawingMonorail?> comparer)
|
||||||
|
{
|
||||||
|
if (listBoxSets.SelectedIndex == -1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var obj = _storage[listBoxSets.SelectedItem.ToString() ?? string.Empty];
|
||||||
|
if (obj == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
obj.Sort(comparer);
|
||||||
|
pictureBoxCollection.Image = obj.ShowMonorails();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
41
ProjectMonorail/ProjectMonorail/MonorailCompareByColor.cs
Normal file
41
ProjectMonorail/ProjectMonorail/MonorailCompareByColor.cs
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
using ProjectMonorail.DrawingObjects;
|
||||||
|
using ProjectMonorail.Entities;
|
||||||
|
|
||||||
|
namespace ProjectMonorail.Generics
|
||||||
|
{
|
||||||
|
internal class MonorailCompareByColor :IComparer<DrawingMonorail?>
|
||||||
|
{
|
||||||
|
public int Compare(DrawingMonorail? x, DrawingMonorail? y)
|
||||||
|
{
|
||||||
|
if (x == null || x.EntityMonorail == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(x));
|
||||||
|
}
|
||||||
|
if (y == null || y.EntityMonorail == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(y));
|
||||||
|
}
|
||||||
|
var mainColorCompare = x.EntityMonorail.MainColor.Name.CompareTo(y.EntityMonorail.MainColor.Name);
|
||||||
|
if (mainColorCompare != 0)
|
||||||
|
{
|
||||||
|
return mainColorCompare;
|
||||||
|
}
|
||||||
|
if (x is DrawingExtendedMonorail && y is DrawingExtendedMonorail)
|
||||||
|
{
|
||||||
|
EntityExtendedMonorail xExtendedMonorail = (EntityExtendedMonorail)x.EntityMonorail;
|
||||||
|
EntityExtendedMonorail yExtendedMonorail = (EntityExtendedMonorail)y.EntityMonorail;
|
||||||
|
var additionalColorCompare = xExtendedMonorail.AdditionalColor.Name.CompareTo(yExtendedMonorail.AdditionalColor.Name);
|
||||||
|
if (additionalColorCompare != 0)
|
||||||
|
{
|
||||||
|
return additionalColorCompare;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var speedCompare = x.EntityMonorail.Speed.CompareTo(y.EntityMonorail.Speed);
|
||||||
|
if (speedCompare != 0)
|
||||||
|
{
|
||||||
|
return speedCompare;
|
||||||
|
}
|
||||||
|
return x.EntityMonorail.Weight.CompareTo(y.EntityMonorail.Weight);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
29
ProjectMonorail/ProjectMonorail/MonorailCompareByType.cs
Normal file
29
ProjectMonorail/ProjectMonorail/MonorailCompareByType.cs
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
using ProjectMonorail.DrawingObjects;
|
||||||
|
|
||||||
|
namespace ProjectMonorail.Generics
|
||||||
|
{
|
||||||
|
internal class MonorailCompareByType : IComparer<DrawingMonorail?>
|
||||||
|
{
|
||||||
|
public int Compare(DrawingMonorail? x, DrawingMonorail? y)
|
||||||
|
{
|
||||||
|
if (x == null || x.EntityMonorail == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(x));
|
||||||
|
}
|
||||||
|
if (y == null || y.EntityMonorail == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(y));
|
||||||
|
}
|
||||||
|
if (x.GetType().Name != y.GetType().Name)
|
||||||
|
{
|
||||||
|
return x.GetType().Name.CompareTo(y.GetType().Name);
|
||||||
|
}
|
||||||
|
var speedCompare = x.EntityMonorail.Speed.CompareTo(y.EntityMonorail.Speed);
|
||||||
|
if (speedCompare != 0)
|
||||||
|
{
|
||||||
|
return speedCompare;
|
||||||
|
}
|
||||||
|
return x.EntityMonorail.Weight.CompareTo(y.EntityMonorail.Weight);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
29
ProjectMonorail/ProjectMonorail/MonorailsCollectionInfo.cs
Normal file
29
ProjectMonorail/ProjectMonorail/MonorailsCollectionInfo.cs
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
namespace ProjectMonorail.Generics
|
||||||
|
{
|
||||||
|
internal class MonorailsCollectionInfo : IEquatable<MonorailsCollectionInfo>
|
||||||
|
{
|
||||||
|
public string Name { get; private set; }
|
||||||
|
|
||||||
|
public string Description { get; private set; }
|
||||||
|
|
||||||
|
public MonorailsCollectionInfo(string name, string description)
|
||||||
|
{
|
||||||
|
Name = name;
|
||||||
|
Description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Equals(MonorailsCollectionInfo? other)
|
||||||
|
{
|
||||||
|
if (Name == other?.Name)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int GetHashCode()
|
||||||
|
{
|
||||||
|
return Name.GetHashCode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -42,6 +42,12 @@ namespace ProjectMonorail.Generics
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public IEnumerable<T?> GetMonorails => _collection.GetMonorails();
|
public IEnumerable<T?> GetMonorails => _collection.GetMonorails();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Сортировка
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="comparer"></param>
|
||||||
|
public void Sort(IComparer<T?> comparer) => _collection.SortSet(comparer);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Конструктор
|
/// Конструктор
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -68,7 +74,7 @@ namespace ProjectMonorail.Generics
|
|||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return collect._collection.Insert(obj);
|
return collect._collection.Insert(obj, new DrawingMonorailEqutables());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -27,12 +27,12 @@ namespace ProjectMonorail.Generics
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Словарь (хранилище)
|
/// Словарь (хранилище)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
readonly Dictionary<string, MonorailsGenericCollection<DrawingMonorail, DrawingObjectMonorail>> _monorailsStorages;
|
readonly Dictionary<MonorailsCollectionInfo, MonorailsGenericCollection<DrawingMonorail, DrawingObjectMonorail>> _monorailsStorages;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Возвращение списка названий наборов
|
/// Возвращение списка названий наборов
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<string> Keys => _monorailsStorages.Keys.ToList();
|
public List<MonorailsCollectionInfo> Keys => _monorailsStorages.Keys.ToList();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Ширина окна отрисовки
|
/// Ширина окна отрисовки
|
||||||
@ -51,7 +51,7 @@ namespace ProjectMonorail.Generics
|
|||||||
/// <param name="pictureHeight"></param>
|
/// <param name="pictureHeight"></param>
|
||||||
public MonorailsGenericStorage(int pictureWidth, int pictureHeight)
|
public MonorailsGenericStorage(int pictureWidth, int pictureHeight)
|
||||||
{
|
{
|
||||||
_monorailsStorages = new Dictionary<string, MonorailsGenericCollection<DrawingMonorail, DrawingObjectMonorail>>();
|
_monorailsStorages = new Dictionary<MonorailsCollectionInfo, MonorailsGenericCollection<DrawingMonorail, DrawingObjectMonorail>>();
|
||||||
_pictureWidth = pictureWidth;
|
_pictureWidth = pictureWidth;
|
||||||
_pictureHeight = pictureHeight;
|
_pictureHeight = pictureHeight;
|
||||||
}
|
}
|
||||||
@ -62,8 +62,8 @@ namespace ProjectMonorail.Generics
|
|||||||
/// <param name="name">Название набора</param>
|
/// <param name="name">Название набора</param>
|
||||||
public void AddSet(string name)
|
public void AddSet(string name)
|
||||||
{
|
{
|
||||||
if (!_monorailsStorages.ContainsKey(name))
|
if (!_monorailsStorages.ContainsKey(new MonorailsCollectionInfo(name, "")))
|
||||||
_monorailsStorages.Add(name, new MonorailsGenericCollection<DrawingMonorail, DrawingObjectMonorail>(_pictureWidth, _pictureHeight));
|
_monorailsStorages.Add(new MonorailsCollectionInfo(name, ""), new MonorailsGenericCollection<DrawingMonorail, DrawingObjectMonorail>(_pictureWidth, _pictureHeight));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -72,8 +72,8 @@ namespace ProjectMonorail.Generics
|
|||||||
/// <param name="name">Название набора</param>
|
/// <param name="name">Название набора</param>
|
||||||
public void DelSet(string name)
|
public void DelSet(string name)
|
||||||
{
|
{
|
||||||
if (_monorailsStorages.ContainsKey(name))
|
if (_monorailsStorages.ContainsKey(new MonorailsCollectionInfo(name, "")))
|
||||||
_monorailsStorages.Remove(name);
|
_monorailsStorages.Remove(new MonorailsCollectionInfo(name, ""));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -85,8 +85,8 @@ namespace ProjectMonorail.Generics
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (_monorailsStorages.ContainsKey(ind))
|
if (_monorailsStorages.ContainsKey(new MonorailsCollectionInfo(ind, "")))
|
||||||
return _monorailsStorages[ind];
|
return _monorailsStorages[new MonorailsCollectionInfo(ind, "")];
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -102,14 +102,14 @@ namespace ProjectMonorail.Generics
|
|||||||
File.Delete(filename);
|
File.Delete(filename);
|
||||||
}
|
}
|
||||||
StringBuilder data = new();
|
StringBuilder data = new();
|
||||||
foreach (KeyValuePair<string, MonorailsGenericCollection<DrawingMonorail, DrawingObjectMonorail>> record in _monorailsStorages)
|
foreach (KeyValuePair<MonorailsCollectionInfo, MonorailsGenericCollection<DrawingMonorail, DrawingObjectMonorail>> record in _monorailsStorages)
|
||||||
{
|
{
|
||||||
StringBuilder records = new();
|
StringBuilder records = new();
|
||||||
foreach (DrawingMonorail? elem in record.Value.GetMonorails)
|
foreach (DrawingMonorail? elem in record.Value.GetMonorails)
|
||||||
{
|
{
|
||||||
records.Append($"{elem?.GetDataForSave(_separatorForObject)}{_separatorRecords}");
|
records.Append($"{elem?.GetDataForSave(_separatorForObject)}{_separatorRecords}");
|
||||||
}
|
}
|
||||||
data.AppendLine($"{record.Key}{_separatorForKeyValue}{records}");
|
data.AppendLine($"{record.Key.Name}{_separatorForKeyValue}{records}");
|
||||||
}
|
}
|
||||||
if (data.Length == 0)
|
if (data.Length == 0)
|
||||||
{
|
{
|
||||||
@ -162,7 +162,7 @@ namespace ProjectMonorail.Generics
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_monorailsStorages.Add(record[0], collection);
|
_monorailsStorages.Add(new MonorailsCollectionInfo(record[0], ""), collection);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,12 @@ namespace ProjectMonorail.Generics
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private readonly int _maxCount;
|
private readonly int _maxCount;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Сортировка набора объектов
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="comparer"></param>
|
||||||
|
public void SortSet(IComparer<T?> comparer) => _places.Sort(comparer);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Конструктор
|
/// Конструктор
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -39,9 +45,9 @@ namespace ProjectMonorail.Generics
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="monorail">Добавляемый монорельс</param>
|
/// <param name="monorail">Добавляемый монорельс</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public int Insert(T monorail)
|
public int Insert(T monorail, IEqualityComparer<T?>? equal = null)
|
||||||
{
|
{
|
||||||
return Insert(monorail, 0);
|
return Insert(monorail, 0, equal);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -50,13 +56,14 @@ namespace ProjectMonorail.Generics
|
|||||||
/// <param name="monorail">Добавляемый монорельс</param>
|
/// <param name="monorail">Добавляемый монорельс</param>
|
||||||
/// <param name="position">Позиция</param>
|
/// <param name="position">Позиция</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public int Insert(T monorail, int position)
|
public int Insert(T monorail, int position, IEqualityComparer<T?>? equal = null)
|
||||||
{
|
{
|
||||||
if (position < 0 || position > Count)
|
if (position < 0 || position > Count)
|
||||||
throw new MonorailNotFoundException("Impossible to insert");
|
throw new MonorailNotFoundException("Impossible to insert");
|
||||||
if (Count >= _maxCount)
|
if (Count >= _maxCount)
|
||||||
throw new StorageOverflowException(_maxCount);
|
throw new StorageOverflowException(_maxCount);
|
||||||
|
if (equal != null && _places.Contains(monorail, equal))
|
||||||
|
throw new ArgumentException("This object is already in the collection");
|
||||||
_places.Insert(position, monorail);
|
_places.Insert(position, monorail);
|
||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user