diff --git a/HoistingCrane/HoistingCrane/CollectionGenericObjects/AbstractCompany.cs b/HoistingCrane/HoistingCrane/CollectionGenericObjects/AbstractCompany.cs
index fb26d02..94b5609 100644
--- a/HoistingCrane/HoistingCrane/CollectionGenericObjects/AbstractCompany.cs
+++ b/HoistingCrane/HoistingCrane/CollectionGenericObjects/AbstractCompany.cs
@@ -42,7 +42,7 @@ namespace HoistingCrane.CollectionGenericObjects
}
public static int operator +(AbstractCompany company, DrawningTrackedVehicle car)
{
- return company.arr?.Insert(car) ?? -1;
+ return company.arr?.Insert(car, new DrawningCraneEqutables()) ?? -1;
}
public static DrawningTrackedVehicle operator -(AbstractCompany company, int position)
{
@@ -84,5 +84,10 @@ namespace HoistingCrane.CollectionGenericObjects
/// Расстановка объектов
///
protected abstract void SetObjectsPosition();
+ ///
+ /// Сортировка
+ ///
+ ///
+ public void Sort(IComparer comparer) => arr?.CollectionSort(comparer);
}
}
diff --git a/HoistingCrane/HoistingCrane/CollectionGenericObjects/CollectionInfo.cs b/HoistingCrane/HoistingCrane/CollectionGenericObjects/CollectionInfo.cs
new file mode 100644
index 0000000..5762d92
--- /dev/null
+++ b/HoistingCrane/HoistingCrane/CollectionGenericObjects/CollectionInfo.cs
@@ -0,0 +1,66 @@
+using System.Diagnostics.CodeAnalysis;
+
+namespace HoistingCrane.CollectionGenericObjects
+{
+ public class CollectionInfo : IEquatable
+ {
+ ///
+ /// Название
+ ///
+ public string name { get; private set; }
+ ///
+ /// Тип
+ ///
+ public CollectionType collectionType { get; private set; }
+ ///
+ /// Описание
+ ///
+ public string description { get; private set; }
+ ///
+ /// Разделитель
+ ///
+ public static readonly string _separator = "-";
+
+ ///
+ /// Конструктор
+ ///
+ ///
+ ///
+ ///
+ public CollectionInfo(string name, CollectionType collectionType, string description)
+ {
+ this.name = name;
+ this.collectionType = collectionType;
+ this.description = description;
+ }
+
+ public static CollectionInfo? GetCollectionInfo(string data)
+ {
+ string[] strs = data.Split(_separator, StringSplitOptions.RemoveEmptyEntries);
+ if (strs.Length < 1 || strs.Length > 3) return null;
+ return new CollectionInfo(strs[0], (CollectionType)Enum.Parse(typeof(CollectionType), strs[1]), strs.Length > 2 ? strs[2] : string.Empty);
+ }
+
+ public override string ToString()
+ {
+ return name + _separator + collectionType + _separator + description;
+ }
+
+ public bool Equals(CollectionInfo? other)
+ {
+ if(other == null) return false;
+ if (name != other.name) return false;
+ return true;
+ }
+
+ public override bool Equals(object? obj)
+ {
+ return Equals(obj as CollectionInfo);
+ }
+
+ public override int GetHashCode()
+ {
+ return name.GetHashCode();
+ }
+ }
+}
diff --git a/HoistingCrane/HoistingCrane/CollectionGenericObjects/ICollectionGenericObjects.cs b/HoistingCrane/HoistingCrane/CollectionGenericObjects/ICollectionGenericObjects.cs
index ae99e89..1fb465a 100644
--- a/HoistingCrane/HoistingCrane/CollectionGenericObjects/ICollectionGenericObjects.cs
+++ b/HoistingCrane/HoistingCrane/CollectionGenericObjects/ICollectionGenericObjects.cs
@@ -1,4 +1,6 @@
-namespace HoistingCrane.CollectionGenericObjects
+using HoistingCrane.Drawning;
+
+namespace HoistingCrane.CollectionGenericObjects
{
public interface ICollectionGenericObjects
where T: class
@@ -15,15 +17,17 @@
/// Добавление элемента в коллекцию
///
///
+ /// /// Сравнение двух объектов
///
- int Insert(T obj);
+ int Insert(T obj, IEqualityComparer? comparer = null);
///
/// Добавление элемента в коллекцию на определенную позицию
///
///
///
+ /// Сравнение двух объектов
///
- int Insert(T obj, int position);
+ int Insert(T obj, int position, IEqualityComparer? comparer = null);
///
/// Удаление элемента из коллекции по его позиции
///
@@ -45,5 +49,10 @@
///
///
IEnumerable GetItems();
+ ///
+ /// Сортировка коллекции
+ ///
+ ///
+ void CollectionSort(IComparer comparer);
}
}
diff --git a/HoistingCrane/HoistingCrane/CollectionGenericObjects/ListGenericObjects.cs b/HoistingCrane/HoistingCrane/CollectionGenericObjects/ListGenericObjects.cs
index 7503bb0..66feeeb 100644
--- a/HoistingCrane/HoistingCrane/CollectionGenericObjects/ListGenericObjects.cs
+++ b/HoistingCrane/HoistingCrane/CollectionGenericObjects/ListGenericObjects.cs
@@ -1,4 +1,5 @@
-using HoistingCrane.Exceptions;
+using HoistingCrane.Drawning;
+using HoistingCrane.Exceptions;
namespace HoistingCrane.CollectionGenericObjects
{
public class ListGenericObjects : ICollectionGenericObjects where T : class
@@ -46,20 +47,33 @@ namespace HoistingCrane.CollectionGenericObjects
return list[position];
}
- public int Insert(T obj)
+ public int Insert(T obj, IEqualityComparer? comparer = null)
{
- if (Count == _maxCount)
+ // TODO выброс ошибки, если такой объект есть в коллекции
+ if (comparer != null && list.Contains(obj))
{
- throw new CollectionOverflowException(Count);
+ throw new ObjectIsPresentInTheCollectionException(obj);
+ }
+ if (list.Count >= _maxCount)
+ {
+ throw new CollectionOverflowException(_maxCount);
}
list.Add(obj);
- return Count;
+ return _maxCount;
}
- public int Insert(T obj, int position)
+ public int Insert(T obj, int position, IEqualityComparer? comparer = null)
{
- if (position < 0 || position >= Count) throw new PositionOutOfCollectionException(position);
- if (Count == _maxCount) throw new CollectionOverflowException(Count);
+ if (comparer != null && list.Contains(obj))
+ {
+ throw new ObjectIsPresentInTheCollectionException();
+ }
+ if (Count >= _maxCount)
+ throw new CollectionOverflowException(_maxCount);
+
+ if (position < 0 || position >= _maxCount)
+ throw new PositionOutOfCollectionException(position);
+
list.Insert(position, obj);
return position;
}
@@ -79,5 +93,10 @@ namespace HoistingCrane.CollectionGenericObjects
yield return list[i];
}
}
+
+ public void CollectionSort(IComparer comparer)
+ {
+ list.Sort(comparer);
+ }
}
}
diff --git a/HoistingCrane/HoistingCrane/CollectionGenericObjects/MassivGenericObjects.cs b/HoistingCrane/HoistingCrane/CollectionGenericObjects/MassivGenericObjects.cs
index 43df118..f96e396 100644
--- a/HoistingCrane/HoistingCrane/CollectionGenericObjects/MassivGenericObjects.cs
+++ b/HoistingCrane/HoistingCrane/CollectionGenericObjects/MassivGenericObjects.cs
@@ -1,4 +1,6 @@
-using HoistingCrane.Exceptions;
+using HoistingCrane.Drawning;
+using HoistingCrane.Exceptions;
+
namespace HoistingCrane.CollectionGenericObjects
{
public class MassivGenericObjects : ICollectionGenericObjects where T : class
@@ -42,41 +44,65 @@ namespace HoistingCrane.CollectionGenericObjects
return arr[position];
}
- public int Insert(T obj)
+ public int Insert(T obj, IEqualityComparer? comparer = null)
{
- int countObjectNotNull = 0;
- for(int i = 0; i < Count; i++)
+ if (comparer != null)
{
- if (arr[i] != null) countObjectNotNull += 1;
+ foreach (T? item in arr)
+ {
+ if ((comparer as IEqualityComparer).Equals(obj as DrawningTrackedVehicle, item as DrawningTrackedVehicle))
+ throw new ObjectIsPresentInTheCollectionException();
+ }
}
- if(countObjectNotNull == MaxCount) throw new CollectionOverflowException(Count);
- return Insert(obj, 0);
+ int index = 0;
+ while (index < arr.Length)
+ {
+ if (arr[index] == null)
+ {
+ arr[index] = obj;
+ return index;
+ }
+ index++;
+ }
+ throw new CollectionOverflowException(Count);
}
- public int Insert(T obj, int position)
+ public int Insert(T obj, int position, IEqualityComparer? comparer = null)
{
- if (position < 0 || position >= Count)
+ if (comparer != null)
{
- throw new PositionOutOfCollectionException(position);
+ foreach (T? item in arr)
+ {
+ if ((comparer as IEqualityComparer).Equals(obj as DrawningTrackedVehicle, item as DrawningTrackedVehicle))
+ throw new ObjectIsPresentInTheCollectionException();
+ }
}
- int copyPos = position - 1;
- while (position < Count)
+ if (position >= arr.Length || position < 0) throw new PositionOutOfCollectionException(position);
+
+ if (arr[position] == null)
{
- if (arr[position] == null)
- {
- arr[position] = obj;
- return position;
- }
- position++;
+ arr[position] = obj;
+ return position;
}
- while (copyPos > 0)
+ int index = position + 1;
+ while (index < arr.Length)
{
- if (arr[copyPos] == null)
+ if (arr[index] == null)
{
- arr[copyPos] = obj;
- return copyPos;
+ arr[index] = obj;
+ return index;
}
- copyPos--;
+ index++;
+ }
+ index = position - 1;
+ while (index >= 0)
+ {
+ if (arr[index] == null)
+ {
+ arr[index] = obj;
+ return index;
+ }
+ index--;
}
throw new CollectionOverflowException(Count);
}
@@ -97,5 +123,10 @@ namespace HoistingCrane.CollectionGenericObjects
yield return arr[i];
}
}
+ public void CollectionSort(IComparer comparer)
+ {
+ T[] notNullArr = arr.OfType().ToArray();
+ Array.Sort(notNullArr, comparer);
+ }
}
}
diff --git a/HoistingCrane/HoistingCrane/CollectionGenericObjects/StorageCollection.cs b/HoistingCrane/HoistingCrane/CollectionGenericObjects/StorageCollection.cs
index 7ac7b49..07ea4c1 100644
--- a/HoistingCrane/HoistingCrane/CollectionGenericObjects/StorageCollection.cs
+++ b/HoistingCrane/HoistingCrane/CollectionGenericObjects/StorageCollection.cs
@@ -8,11 +8,11 @@ namespace HoistingCrane.CollectionGenericObjects
///
/// Словарь (хранилище) с коллекциями
///
- readonly Dictionary> dict;
+ readonly Dictionary> dict;
///
/// Возвращение списка названий коллекций
///
- public List Keys => dict.Keys.ToList();
+ public List Keys => dict.Keys.ToList();
///
/// Ключевое слово, с которого должен начинаться файл
///
@@ -30,7 +30,7 @@ namespace HoistingCrane.CollectionGenericObjects
///
public StorageCollection()
{
- dict = new Dictionary>();
+ dict = new Dictionary>();
}
///
/// Добавление коллекции в хранилище
@@ -39,15 +39,16 @@ namespace HoistingCrane.CollectionGenericObjects
/// тип коллекции
public void AddCollection(string name, CollectionType collectionType)
{
- if (!string.IsNullOrEmpty(name) && !Keys.Contains(name))
+ var collectionInfo = new CollectionInfo(name, collectionType, " ");
+ if (!string.IsNullOrEmpty(name) && !Keys.Contains(collectionInfo))
{
- if(collectionType == CollectionType.Massive)
+ if (collectionType == CollectionType.Massive)
{
- dict.Add(name, new MassivGenericObjects ());
+ dict.Add(collectionInfo, new MassivGenericObjects ());
}
if(collectionType == CollectionType.List)
{
- dict.Add(name, new ListGenericObjects ());
+ dict.Add(collectionInfo, new ListGenericObjects ());
}
}
}
@@ -57,8 +58,11 @@ namespace HoistingCrane.CollectionGenericObjects
/// Название коллекции
public void DelCollection(string name)
{
- if (dict.ContainsKey(name))
- dict.Remove(name);
+ var key = dict.Keys.FirstOrDefault(k => k.name == name);
+ if (key != null)
+ {
+ dict.Remove(key);
+ }
}
///
/// Доступ к коллекции
@@ -69,8 +73,9 @@ namespace HoistingCrane.CollectionGenericObjects
{
get
{
- if (name == null || !dict.ContainsKey(name)) { return null; }
- return dict[name];
+ var key = dict.Keys.FirstOrDefault(k => k.name == name);
+ if (key == null) { return null; }
+ return dict[key];
}
}
///
@@ -94,20 +99,16 @@ namespace HoistingCrane.CollectionGenericObjects
{
writer.Write(_collectionKey);
- foreach (KeyValuePair> value in dict)
+ foreach (KeyValuePair> value in dict)
{
StringBuilder sb = new();
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())
@@ -152,18 +153,14 @@ namespace HoistingCrane.CollectionGenericObjects
while ((strs = fs.ReadLine()) != null)
{
string[] record = strs.Split(_separatorForKeyValue, StringSplitOptions.RemoveEmptyEntries);
- if (record.Length != 4)
+ if (record.Length != 3)
{
continue;
}
- CollectionType collectionType = (CollectionType)Enum.Parse(typeof(CollectionType), record[1]);
- ICollectionGenericObjects? collection = StorageCollection.CreateCollection(collectionType);
- if (collection == null)
- {
- throw new InvalidOperationException("Не удалось определить тип коллекции:" + record[1]);
- }
- collection.MaxCount = Convert.ToInt32(record[2]);
- string[] set = record[3].Split(_separatorItems, StringSplitOptions.RemoveEmptyEntries);
+ CollectionInfo? collectionInfo = CollectionInfo.GetCollectionInfo(record[0]) ?? throw new InvalidOperationException("Не удалось определить информацию о коллекции: " + record[0]);
+ ICollectionGenericObjects? collection = StorageCollection.CreateCollection(collectionInfo.collectionType) ?? throw new InvalidOperationException("Не удалось определить тип коллекции:" + record[1]);
+ collection.MaxCount = Convert.ToInt32(record[1]);
+ string[] set = record[2].Split(_separatorItems, StringSplitOptions.RemoveEmptyEntries);
foreach (string elem in set)
{
if (elem?.CreateDrawningTrackedVehicle() is T crane)
@@ -172,7 +169,7 @@ namespace HoistingCrane.CollectionGenericObjects
{
if (collection.Insert(crane) == -1)
{
- throw new InvalidOperationException("Объект не удалось добавить в коллекцию: " + record[3]);
+ throw new InvalidOperationException("Объект не удалось добавить в коллекцию: " + record[2]);
}
}
catch(CollectionOverflowException ex)
@@ -181,7 +178,7 @@ namespace HoistingCrane.CollectionGenericObjects
}
}
}
- dict.Add(record[0], collection);
+ dict.Add(collectionInfo, collection);
}
}
}
diff --git a/HoistingCrane/HoistingCrane/Drawning/DrawningCraneCompareByColor.cs b/HoistingCrane/HoistingCrane/Drawning/DrawningCraneCompareByColor.cs
new file mode 100644
index 0000000..8e76d17
--- /dev/null
+++ b/HoistingCrane/HoistingCrane/Drawning/DrawningCraneCompareByColor.cs
@@ -0,0 +1,19 @@
+namespace HoistingCrane.Drawning
+{
+ public class DrawningCraneCompareByColor : IComparer
+ {
+ public int Compare(DrawningTrackedVehicle? x, DrawningTrackedVehicle? y)
+ {
+ //TODO: Прописать логику сравнения по цветам, скорости и весу
+ if (x == null || x.EntityTrackedVehicle == null) return -1;
+ if (y == null || y.EntityTrackedVehicle == null) return 1;
+ var colorCompare = x.EntityTrackedVehicle.BodyColor.ToArgb().CompareTo(y.EntityTrackedVehicle.BodyColor.ToArgb());
+ if (colorCompare != 0) return colorCompare;
+ var speedCompare = x.EntityTrackedVehicle.Speed.CompareTo(y.EntityTrackedVehicle.Speed);
+ if (speedCompare != 0) return speedCompare;
+ return x.EntityTrackedVehicle.Weight.CompareTo(y.EntityTrackedVehicle.Weight);
+ }
+ }
+}
+
+
diff --git a/HoistingCrane/HoistingCrane/Drawning/DrawningCraneCompareByType.cs b/HoistingCrane/HoistingCrane/Drawning/DrawningCraneCompareByType.cs
new file mode 100644
index 0000000..b2e59ef
--- /dev/null
+++ b/HoistingCrane/HoistingCrane/Drawning/DrawningCraneCompareByType.cs
@@ -0,0 +1,21 @@
+namespace HoistingCrane.Drawning
+{
+ public class DrawningCraneCompareByType : IComparer
+ {
+ ///
+ /// Сравнение по типу, скорости и весу
+ ///
+ ///
+ ///
+ ///
+ public int Compare(DrawningTrackedVehicle? x, DrawningTrackedVehicle? y)
+ {
+ if (x == null || x.EntityTrackedVehicle == null) return -1;
+ if (y == null || y.EntityTrackedVehicle == null) return 1;
+ if (x.GetType().Name != y.GetType().Name) return x.GetType().Name.CompareTo(y.GetType().Name);
+ var speedCompare = x.EntityTrackedVehicle.Speed.CompareTo(y.EntityTrackedVehicle.Speed);
+ if(speedCompare != 0) return speedCompare;
+ return x.EntityTrackedVehicle.Weight.CompareTo(y.EntityTrackedVehicle.Weight);
+ }
+ }
+}
diff --git a/HoistingCrane/HoistingCrane/Drawning/DrawningCraneEqutables.cs b/HoistingCrane/HoistingCrane/Drawning/DrawningCraneEqutables.cs
new file mode 100644
index 0000000..432dd15
--- /dev/null
+++ b/HoistingCrane/HoistingCrane/Drawning/DrawningCraneEqutables.cs
@@ -0,0 +1,32 @@
+using HoistingCrane.Entities;
+using System.Diagnostics.CodeAnalysis;
+
+namespace HoistingCrane.Drawning
+{
+ public class DrawningCraneEqutables : IEqualityComparer
+ {
+ public bool Equals(DrawningTrackedVehicle? x, DrawningTrackedVehicle? y)
+ {
+ if (x == null || x.EntityTrackedVehicle == null) return false;
+ if (y == null || y.EntityTrackedVehicle == null) return false;
+ if (x.GetType().Name != y.GetType().Name) return false;
+ if (x.EntityTrackedVehicle.Speed != y.EntityTrackedVehicle.Speed) return false;
+ if (x.EntityTrackedVehicle.Weight != y.EntityTrackedVehicle.Weight) return false;
+ if (x.EntityTrackedVehicle.BodyColor != y.EntityTrackedVehicle.BodyColor) return false;
+ if ((x.EntityTrackedVehicle as EntityHoistingCrane)!= null && (y.EntityTrackedVehicle as EntityHoistingCrane)!=null)
+ {
+ var newX = x.EntityTrackedVehicle as EntityHoistingCrane;
+ var newY = y.EntityTrackedVehicle as EntityHoistingCrane;
+ if (newX?.AdditionalColor != newY?.AdditionalColor) return false;
+ if (newX?.Platform != newY?.Platform) return false;
+ if (newX?.Counterweight != newY?.Counterweight) return false;
+ }
+ return true;
+ }
+
+ public int GetHashCode([DisallowNull] DrawningTrackedVehicle obj)
+ {
+ return obj.GetHashCode();
+ }
+ }
+}
diff --git a/HoistingCrane/HoistingCrane/Exceptions/ObjectIsPresentInTheCollectionException.cs b/HoistingCrane/HoistingCrane/Exceptions/ObjectIsPresentInTheCollectionException.cs
new file mode 100644
index 0000000..d659852
--- /dev/null
+++ b/HoistingCrane/HoistingCrane/Exceptions/ObjectIsPresentInTheCollectionException.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.Serialization;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HoistingCrane.Exceptions
+{
+ public class ObjectIsPresentInTheCollectionException : ApplicationException
+ {
+ public ObjectIsPresentInTheCollectionException(object obj) : base("В коллекции уже присустствует объект " + obj) { }
+ public ObjectIsPresentInTheCollectionException() : base() { }
+ public ObjectIsPresentInTheCollectionException(string message) : base(message) { }
+ public ObjectIsPresentInTheCollectionException(string message, Exception exception) : base(message, exception) { }
+ protected ObjectIsPresentInTheCollectionException(SerializationInfo info, StreamingContext context) : base(info, context) { }
+ }
+}
diff --git a/HoistingCrane/HoistingCrane/FormCarCollection.Designer.cs b/HoistingCrane/HoistingCrane/FormCarCollection.Designer.cs
index 4991414..2405784 100644
--- a/HoistingCrane/HoistingCrane/FormCarCollection.Designer.cs
+++ b/HoistingCrane/HoistingCrane/FormCarCollection.Designer.cs
@@ -52,6 +52,8 @@
loadToolStripMenuItem = new ToolStripMenuItem();
saveFileDialog = new SaveFileDialog();
openFileDialog = new OpenFileDialog();
+ buttonSortByType = new Button();
+ buttonSortByColor = new Button();
groupBoxTools.SuspendLayout();
panelCompanyTool.SuspendLayout();
panelStorage.SuspendLayout();
@@ -68,7 +70,7 @@
groupBoxTools.Dock = DockStyle.Right;
groupBoxTools.Location = new Point(763, 24);
groupBoxTools.Name = "groupBoxTools";
- groupBoxTools.Size = new Size(210, 485);
+ groupBoxTools.Size = new Size(210, 524);
groupBoxTools.TabIndex = 0;
groupBoxTools.TabStop = false;
groupBoxTools.Text = "Инструменты";
@@ -76,20 +78,22 @@
// panelCompanyTool
//
panelCompanyTool.Anchor = AnchorStyles.None;
+ panelCompanyTool.Controls.Add(buttonSortByColor);
+ panelCompanyTool.Controls.Add(buttonSortByType);
panelCompanyTool.Controls.Add(buttonCreateHoistingCrane);
panelCompanyTool.Controls.Add(maskedTextBox);
panelCompanyTool.Controls.Add(buttonRefresh);
panelCompanyTool.Controls.Add(buttonGoToChek);
panelCompanyTool.Controls.Add(buttonDeleteCar);
- panelCompanyTool.Location = new Point(6, 312);
+ panelCompanyTool.Location = new Point(6, 296);
panelCompanyTool.Name = "panelCompanyTool";
- panelCompanyTool.Size = new Size(204, 185);
+ panelCompanyTool.Size = new Size(204, 221);
panelCompanyTool.TabIndex = 8;
//
// buttonCreateHoistingCrane
//
buttonCreateHoistingCrane.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
- buttonCreateHoistingCrane.Location = new Point(9, 13);
+ buttonCreateHoistingCrane.Location = new Point(6, 3);
buttonCreateHoistingCrane.Name = "buttonCreateHoistingCrane";
buttonCreateHoistingCrane.Size = new Size(192, 22);
buttonCreateHoistingCrane.TabIndex = 0;
@@ -100,7 +104,7 @@
// maskedTextBox
//
maskedTextBox.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
- maskedTextBox.Location = new Point(9, 41);
+ maskedTextBox.Location = new Point(6, 31);
maskedTextBox.Mask = "00";
maskedTextBox.Name = "maskedTextBox";
maskedTextBox.Size = new Size(192, 23);
@@ -109,7 +113,7 @@
// buttonRefresh
//
buttonRefresh.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
- buttonRefresh.Location = new Point(9, 129);
+ buttonRefresh.Location = new Point(6, 119);
buttonRefresh.Name = "buttonRefresh";
buttonRefresh.Size = new Size(192, 27);
buttonRefresh.TabIndex = 5;
@@ -120,7 +124,7 @@
// buttonGoToChek
//
buttonGoToChek.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
- buttonGoToChek.Location = new Point(9, 99);
+ buttonGoToChek.Location = new Point(6, 89);
buttonGoToChek.Name = "buttonGoToChek";
buttonGoToChek.Size = new Size(192, 24);
buttonGoToChek.TabIndex = 6;
@@ -131,7 +135,7 @@
// buttonDeleteCar
//
buttonDeleteCar.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
- buttonDeleteCar.Location = new Point(9, 70);
+ buttonDeleteCar.Location = new Point(6, 60);
buttonDeleteCar.Name = "buttonDeleteCar";
buttonDeleteCar.Size = new Size(192, 23);
buttonDeleteCar.TabIndex = 4;
@@ -141,7 +145,7 @@
//
// buttonCreateCompany
//
- buttonCreateCompany.Location = new Point(12, 295);
+ buttonCreateCompany.Location = new Point(12, 267);
buttonCreateCompany.Name = "buttonCreateCompany";
buttonCreateCompany.Size = new Size(192, 23);
buttonCreateCompany.TabIndex = 7;
@@ -161,12 +165,12 @@
panelStorage.Dock = DockStyle.Top;
panelStorage.Location = new Point(3, 19);
panelStorage.Name = "panelStorage";
- panelStorage.Size = new Size(204, 229);
+ panelStorage.Size = new Size(204, 216);
panelStorage.TabIndex = 7;
//
// buttonDeleteCollection
//
- buttonDeleteCollection.Location = new Point(9, 199);
+ buttonDeleteCollection.Location = new Point(9, 186);
buttonDeleteCollection.Name = "buttonDeleteCollection";
buttonDeleteCollection.Size = new Size(192, 27);
buttonDeleteCollection.TabIndex = 6;
@@ -178,14 +182,14 @@
//
listBoxCollection.FormattingEnabled = true;
listBoxCollection.ItemHeight = 15;
- listBoxCollection.Location = new Point(9, 118);
+ listBoxCollection.Location = new Point(9, 101);
listBoxCollection.Name = "listBoxCollection";
listBoxCollection.Size = new Size(192, 79);
listBoxCollection.TabIndex = 5;
//
// buttonCollectionAdd
//
- buttonCollectionAdd.Location = new Point(9, 81);
+ buttonCollectionAdd.Location = new Point(9, 72);
buttonCollectionAdd.Name = "buttonCollectionAdd";
buttonCollectionAdd.Size = new Size(192, 23);
buttonCollectionAdd.TabIndex = 4;
@@ -196,7 +200,7 @@
// radioButtonList
//
radioButtonList.AutoSize = true;
- radioButtonList.Location = new Point(128, 56);
+ radioButtonList.Location = new Point(128, 47);
radioButtonList.Name = "radioButtonList";
radioButtonList.Size = new Size(67, 19);
radioButtonList.TabIndex = 3;
@@ -207,7 +211,7 @@
// radioButtonMassive
//
radioButtonMassive.AutoSize = true;
- radioButtonMassive.Location = new Point(18, 56);
+ radioButtonMassive.Location = new Point(12, 47);
radioButtonMassive.Name = "radioButtonMassive";
radioButtonMassive.Size = new Size(69, 19);
radioButtonMassive.TabIndex = 2;
@@ -237,7 +241,7 @@
comboBoxSelectorCompany.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxSelectorCompany.FormattingEnabled = true;
comboBoxSelectorCompany.Items.AddRange(new object[] { "Хранилище" });
- comboBoxSelectorCompany.Location = new Point(12, 266);
+ comboBoxSelectorCompany.Location = new Point(12, 238);
comboBoxSelectorCompany.Name = "comboBoxSelectorCompany";
comboBoxSelectorCompany.Size = new Size(192, 23);
comboBoxSelectorCompany.TabIndex = 2;
@@ -248,7 +252,7 @@
pictureBox.Dock = DockStyle.Fill;
pictureBox.Location = new Point(0, 24);
pictureBox.Name = "pictureBox";
- pictureBox.Size = new Size(763, 485);
+ pictureBox.Size = new Size(763, 524);
pictureBox.TabIndex = 1;
pictureBox.TabStop = false;
//
@@ -292,11 +296,33 @@
//
openFileDialog.Filter = "txt file | *.txt";
//
+ // buttonSortByType
+ //
+ buttonSortByType.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
+ buttonSortByType.Location = new Point(6, 152);
+ buttonSortByType.Name = "buttonSortByType";
+ buttonSortByType.Size = new Size(192, 27);
+ buttonSortByType.TabIndex = 7;
+ buttonSortByType.Text = "Сортировка по типу";
+ buttonSortByType.UseVisualStyleBackColor = true;
+ buttonSortByType.Click += buttonSortByType_Click;
+ //
+ // buttonSortByColor
+ //
+ buttonSortByColor.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
+ buttonSortByColor.Location = new Point(6, 185);
+ buttonSortByColor.Name = "buttonSortByColor";
+ buttonSortByColor.Size = new Size(192, 27);
+ buttonSortByColor.TabIndex = 8;
+ buttonSortByColor.Text = "Сортировка по цвету";
+ buttonSortByColor.UseVisualStyleBackColor = true;
+ buttonSortByColor.Click += buttonSortByColor_Click;
+ //
// FormCarCollection
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
- ClientSize = new Size(973, 509);
+ ClientSize = new Size(973, 548);
Controls.Add(pictureBox);
Controls.Add(groupBoxTools);
Controls.Add(menuStrip);
@@ -341,5 +367,7 @@
private ToolStripMenuItem loadToolStripMenuItem;
private SaveFileDialog saveFileDialog;
private OpenFileDialog openFileDialog;
+ private Button buttonSortByColor;
+ private Button buttonSortByType;
}
}
\ No newline at end of file
diff --git a/HoistingCrane/HoistingCrane/FormCarCollection.cs b/HoistingCrane/HoistingCrane/FormCarCollection.cs
index 318a373..b4cf3d6 100644
--- a/HoistingCrane/HoistingCrane/FormCarCollection.cs
+++ b/HoistingCrane/HoistingCrane/FormCarCollection.cs
@@ -52,7 +52,7 @@ namespace HoistingCrane
MessageBox.Show("Ошибка переполнения коллекции");
logger.LogError("Ошибка: {Message}", ex.Message);
}
-
+
}
private void buttonDeleteCar_Click(object sender, EventArgs e)
@@ -123,7 +123,7 @@ namespace HoistingCrane
listBoxCollection.Items.Clear();
for (int i = 0; i < _storageCollection.Keys?.Count; ++i)
{
- string? colName = _storageCollection.Keys?[i];
+ string? colName = _storageCollection.Keys?[i].name;
if (!string.IsNullOrEmpty(colName))
{
listBoxCollection.Items.Add(colName);
@@ -149,7 +149,8 @@ namespace HoistingCrane
collectionType = CollectionType.List;
logger.LogInformation("Создана коллекция '{nameCol}' , название: {name}", collectionType, textBoxCollectionName.Text);
}
- _storageCollection.AddCollection(textBoxCollectionName.Text,collectionType);RerfreshListBoxItems();
+ _storageCollection.AddCollection(textBoxCollectionName.Text, collectionType);
+ RerfreshListBoxItems();
}
private void buttonDeleteCollection_Click(object sender, EventArgs e)
{
@@ -166,18 +167,18 @@ namespace HoistingCrane
}
_storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString());
RerfreshListBoxItems();
-
+
}
private void buttonCreateCompany_Click(object sender, EventArgs e)
{
-
- if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItem == null)
+
+ if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItem == null)
{
MessageBox.Show("Коллекция не выбрана");
return;
}
ICollectionGenericObjects? collection = _storageCollection[listBoxCollection.SelectedItem.ToString() ?? string.Empty];
- if (collection == null)
+ if (collection == null)
{
MessageBox.Show("Коллекция не проинициализирована");
return;
@@ -222,7 +223,7 @@ namespace HoistingCrane
///
private void loadToolStripMenuItem_Click(object sender, EventArgs e)
{
- if(openFileDialog.ShowDialog() == DialogResult.OK)
+ if (openFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
@@ -231,13 +232,30 @@ namespace HoistingCrane
MessageBox.Show("Загрузка прошла успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
logger.LogInformation("Загрузка в файл: {filename}", saveFileDialog.FileName);
}
- catch(Exception ex)
+ catch (Exception ex)
{
MessageBox.Show(ex.Message, "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
logger.LogError("Ошибка: {Message}", ex.Message);
}
}
}
+
+ private void buttonSortByType_Click(object sender, EventArgs e)
+ {
+ compareCars(new DrawningCraneCompareByType());
+ }
+
+ private void buttonSortByColor_Click(object sender, EventArgs e)
+ {
+ compareCars(new DrawningCraneCompareByColor());
+ }
+
+ private void compareCars(IComparer comparer)
+ {
+ if (_company == null) return;
+ _company.Sort(comparer);
+ pictureBox.Image = _company.Show();
+ }
}
}