Compare commits
11 Commits
Author | SHA1 | Date | |
---|---|---|---|
c0a10c660b | |||
3ee857a83c | |||
87c20a4587 | |||
7f2792be67 | |||
0b8b779277 | |||
4311f2f59b | |||
|
6bc2e6f582 | ||
|
5d72860a96 | ||
ff7a87438e | |||
|
c141ffc95e | ||
|
f898ad65b4 |
@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
|||||||
# Visual Studio Version 17
|
# Visual Studio Version 17
|
||||||
VisualStudioVersion = 17.0.32014.148
|
VisualStudioVersion = 17.0.32014.148
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LocomativeProject", "LocomativeProject\LocomativeProject.csproj", "{31F7DD61-7F62-4B39-8543-7A917369587A}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LocomotiveProject", "LocomativeProject\LocomotiveProject.csproj", "{31F7DD61-7F62-4B39-8543-7A917369587A}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
@ -0,0 +1,113 @@
|
|||||||
|
using LocomativeProject.Drawnings;
|
||||||
|
using LocomotiveProject.CollectionGenericObjects;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace LocomotiveProject.CollectionGenericObjects;
|
||||||
|
/// <summary>
|
||||||
|
/// Абстракция компании,хранящий коллекцию круизеров
|
||||||
|
/// </summary>
|
||||||
|
public abstract class AbstractCompany
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Размер места(ширина)
|
||||||
|
/// </summary>
|
||||||
|
protected readonly int _placeSizeWidth = 210;
|
||||||
|
/// <summary>
|
||||||
|
/// Размер места(высота)
|
||||||
|
/// </summary>
|
||||||
|
protected readonly int _placeSizeHeight = 120;
|
||||||
|
/// <summary>
|
||||||
|
/// Ширина окна
|
||||||
|
/// </summary>
|
||||||
|
protected readonly int _pictureWidth;
|
||||||
|
/// <summary>
|
||||||
|
/// Высота окна
|
||||||
|
/// </summary>
|
||||||
|
protected readonly int _pictureHeight;
|
||||||
|
/// <summary>
|
||||||
|
/// Коллекцияя круизеров
|
||||||
|
/// </summary>
|
||||||
|
protected ICollectionGenericObjects<DrawningBaseLocomotive> _collection = null;
|
||||||
|
/// <summary>
|
||||||
|
/// Вычисление макс кол-ва элементов,который можно разместить в окне
|
||||||
|
/// </summary>
|
||||||
|
private int GetMaxCount => _pictureWidth / _placeSizeWidth * (_pictureHeight / _placeSizeHeight);
|
||||||
|
/// <summary>
|
||||||
|
/// конструктор
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="picWidth">Ширина окна</param>
|
||||||
|
/// <param name="pictureHeight">Высота окна</param>
|
||||||
|
/// <param name="collection">коллекция</param>
|
||||||
|
public AbstractCompany(int picWidth, int pictureHeight,ICollectionGenericObjects<DrawningBaseLocomotive> collection)
|
||||||
|
{
|
||||||
|
_pictureWidth = picWidth;
|
||||||
|
_pictureHeight = pictureHeight;
|
||||||
|
_collection = collection;
|
||||||
|
_collection.MaxCount = GetMaxCount;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// перегрузка оператора + для класса
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="company">Компания</param>
|
||||||
|
/// <param name="Locomotive">добавляемый объект</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static int operator +(AbstractCompany company, DrawningBaseLocomotive Locomotive)
|
||||||
|
{
|
||||||
|
if (company._collection == null)
|
||||||
|
return -1;
|
||||||
|
return company._collection.Insert(Locomotive);
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// перегрузка оператора - для класса
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="company">Компания</param>
|
||||||
|
/// <param name="position">позиция удаления</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static DrawningBaseLocomotive operator -(AbstractCompany company, int position)
|
||||||
|
{
|
||||||
|
if (company._collection == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return company._collection.Remove(position);
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// получение случайног обьекта из коллекции
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public DrawningBaseLocomotive? GetRandomObject()
|
||||||
|
{
|
||||||
|
Random rnd = new Random();
|
||||||
|
return _collection?.Get(rnd.Next(GetMaxCount));
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// вывод всей коллекции
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public Bitmap? Show()
|
||||||
|
{
|
||||||
|
Bitmap? bitmap = new(_pictureWidth,_pictureHeight);
|
||||||
|
Graphics graphics = Graphics.FromImage(bitmap);
|
||||||
|
DrawBackground(graphics);
|
||||||
|
|
||||||
|
SetObjectPosition();
|
||||||
|
for (int i = 0; i < (_collection?.Count ?? 0); ++i)
|
||||||
|
{
|
||||||
|
DrawningBaseLocomotive? obj = _collection?.Get(i);
|
||||||
|
obj?.DrawTransport(graphics);
|
||||||
|
}
|
||||||
|
return bitmap;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Вывод заднего фона
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="graphics"></param>
|
||||||
|
protected abstract void DrawBackground(Graphics graphics);
|
||||||
|
/// <summary>
|
||||||
|
/// Расстановка объектов
|
||||||
|
/// </summary>
|
||||||
|
protected abstract void SetObjectPosition();
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace LocomotiveProject.CollectionGenericObjects;
|
||||||
|
/// <summary>
|
||||||
|
/// Тип коллекции
|
||||||
|
/// </summary>
|
||||||
|
public enum CollectionType
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Неопределено
|
||||||
|
/// </summary>
|
||||||
|
None = 0,
|
||||||
|
/// <summary>
|
||||||
|
/// Массив
|
||||||
|
/// </summary>
|
||||||
|
Massive = 1,
|
||||||
|
/// <summary>
|
||||||
|
/// Список
|
||||||
|
/// </summary>
|
||||||
|
List = 2
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace LocomotiveProject.CollectionGenericObjects;
|
||||||
|
|
||||||
|
public interface ICollectionGenericObjects<T>
|
||||||
|
where T : class
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Кол-во объектов в коллекции
|
||||||
|
/// </summary>
|
||||||
|
int Count { get; }
|
||||||
|
/// <summary>
|
||||||
|
/// Установка макс. кол-ва элементов
|
||||||
|
/// </summary>
|
||||||
|
int MaxCount { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Добавление объекта в коллекцию
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj">Добавляемый объект</param>
|
||||||
|
/// <returns>true-вставка прошла удачно,false- вставка не удалась</returns>
|
||||||
|
int Insert(T obj);
|
||||||
|
/// <summary>
|
||||||
|
/// Добавление объекта в коллекцию на конкретную позицию
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj">Добавляемый объект</param>
|
||||||
|
/// <param name="position">позиция</param>
|
||||||
|
/// <returns>true-вставка прошла удачно,false- вставка не удалась</returns>
|
||||||
|
int Insert(T obj,int position);
|
||||||
|
/// <summary>
|
||||||
|
/// Удаление обьекта из коллекции с конкретной позиции
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="positon">позиция</param>
|
||||||
|
/// <returns>true-удаление прошло удачно,false- удаление не удалось</returns>
|
||||||
|
T? Remove(int positon);
|
||||||
|
/// <summary>
|
||||||
|
/// получение объекта по позиции
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="positon">позиция</param>
|
||||||
|
/// <returns>Обьект</returns>
|
||||||
|
T? Get(int positon);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Получение типа коллекции
|
||||||
|
/// </summary>
|
||||||
|
CollectionType GetCollectionType { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Получение объектов коллекции по одному
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>Поэлементный вывод элементов коллекции</returns>
|
||||||
|
IEnumerable<T?> GetItems();
|
||||||
|
}
|
@ -0,0 +1,87 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace LocomotiveProject.CollectionGenericObjects;
|
||||||
|
/// <summary>
|
||||||
|
/// Параметризованный набор объектов
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T">Параметр: ограничение - ссылочный тип</typeparam>
|
||||||
|
public class ListGenericObjects<T> : ICollectionGenericObjects<T>
|
||||||
|
where T : class
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Список объектов, которые храним
|
||||||
|
/// </summary>
|
||||||
|
private readonly List<T?> _collection;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Максимально допустимое число объектов в списке
|
||||||
|
/// </summary>
|
||||||
|
private int _maxCount;
|
||||||
|
|
||||||
|
public int Count => _collection.Count;
|
||||||
|
|
||||||
|
public int MaxCount
|
||||||
|
{
|
||||||
|
get { return Count; }
|
||||||
|
set { if (value > 0) { _maxCount = value; } }
|
||||||
|
}
|
||||||
|
public CollectionType GetCollectionType => CollectionType.List;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Конструктор
|
||||||
|
/// </summary>
|
||||||
|
public ListGenericObjects()
|
||||||
|
{
|
||||||
|
_collection = new();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int Insert(T obj)
|
||||||
|
{
|
||||||
|
// TODO проверка, что не превышено максимальное количество элементов
|
||||||
|
// TODO вставка в конец набора
|
||||||
|
if (_collection.Count >= _maxCount) return -1;
|
||||||
|
_collection.Add(obj);
|
||||||
|
return Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int Insert(T obj, int position)
|
||||||
|
{
|
||||||
|
// TODO проверка, что не превышено максимальное количество элементов
|
||||||
|
// TODO проверка позиции
|
||||||
|
// TODO вставка по позиции
|
||||||
|
if (_collection.Count >= _maxCount || _collection[position] == null || position < 0) { return -1; }
|
||||||
|
_collection.Insert(position, obj);
|
||||||
|
return Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
public T? Get(int position)
|
||||||
|
{
|
||||||
|
// TODO проверка позиции
|
||||||
|
if (!_collection.Any()) { return null; }
|
||||||
|
if (_collection.Count <= position || position < 0 || position >= _maxCount) { return null; }
|
||||||
|
return _collection[position];
|
||||||
|
}
|
||||||
|
|
||||||
|
public T? Remove(int position)
|
||||||
|
{
|
||||||
|
// TODO проверка позиции
|
||||||
|
// TODO удаление объекта из списка
|
||||||
|
if (position >= Count || position < 0) return null;
|
||||||
|
T obj = _collection[position];
|
||||||
|
_collection.RemoveAt(position);
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<T?> GetItems()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < _collection.Count; ++i)
|
||||||
|
{
|
||||||
|
yield return _collection[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,61 @@
|
|||||||
|
using LocomativeProject.Drawnings;
|
||||||
|
using LocomotiveProject.CollectionGenericObjects;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace LocomotiveProject.CollectionGenericObjects;
|
||||||
|
|
||||||
|
public class LocomotiveSharingService : AbstractCompany
|
||||||
|
{
|
||||||
|
public LocomotiveSharingService(int picWidth, int pictureHeight, ICollectionGenericObjects<DrawningBaseLocomotive> collection) : base(picWidth, pictureHeight, collection)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void DrawBackground(Graphics g)
|
||||||
|
{
|
||||||
|
Pen pen = new Pen(Color.Black,2);
|
||||||
|
int width = _pictureWidth / _placeSizeWidth;
|
||||||
|
int height = _pictureHeight / _placeSizeHeight;
|
||||||
|
for (int i = 0; i < width; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < height; j++)
|
||||||
|
{
|
||||||
|
g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 10, i * _placeSizeWidth + 190, j * _placeSizeHeight + 10);
|
||||||
|
g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 120, i * _placeSizeWidth + 190, j * _placeSizeHeight + 120);
|
||||||
|
g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 10, i * _placeSizeWidth + 20, j * _placeSizeHeight + 120);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void SetObjectPosition()
|
||||||
|
{
|
||||||
|
int width = _pictureWidth / _placeSizeWidth;
|
||||||
|
int height = _pictureHeight / _placeSizeHeight;
|
||||||
|
|
||||||
|
int curWidth = 0;
|
||||||
|
int curHeight = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < (_collection?.Count ?? 0); i++)
|
||||||
|
{
|
||||||
|
if (_collection?.Get(i) != null)
|
||||||
|
{
|
||||||
|
_collection?.Get(i).SetPictureSize(_pictureWidth, _pictureHeight);
|
||||||
|
_collection?.Get(i).SetPosition(_placeSizeWidth * curWidth + 30, curHeight * _placeSizeHeight + 35);
|
||||||
|
}
|
||||||
|
if (curHeight < height - 1)
|
||||||
|
curHeight++;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
curHeight = 0;
|
||||||
|
curWidth++;
|
||||||
|
}
|
||||||
|
if (curWidth > width - 1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,61 @@
|
|||||||
|
using LocomativeProject.Drawnings;
|
||||||
|
using LocomotiveProject.CollectionGenericObjects;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace LocomotiveProject.CollectionGenericObjects;
|
||||||
|
|
||||||
|
public class LocomotiveStation : AbstractCompany
|
||||||
|
{
|
||||||
|
public LocomotiveStation(int picWidth, int pictureHeight, ICollectionGenericObjects<DrawningBaseLocomotive> collection) : base(picWidth, pictureHeight, collection)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void DrawBackground(Graphics g)
|
||||||
|
{
|
||||||
|
Pen pen = new Pen(Color.Black,2);
|
||||||
|
int width = _pictureWidth / _placeSizeWidth;
|
||||||
|
int height = _pictureHeight / _placeSizeHeight;
|
||||||
|
for (int i = 0; i < width; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < height; j++)
|
||||||
|
{
|
||||||
|
g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 10, i * _placeSizeWidth + 190, j * _placeSizeHeight + 10);
|
||||||
|
g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 120, i * _placeSizeWidth + 190, j * _placeSizeHeight + 120);
|
||||||
|
g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 10, i * _placeSizeWidth + 20, j * _placeSizeHeight + 120);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void SetObjectPosition()
|
||||||
|
{
|
||||||
|
int width = _pictureWidth / _placeSizeWidth;
|
||||||
|
int height = _pictureHeight / _placeSizeHeight;
|
||||||
|
|
||||||
|
int curWidth = 0;
|
||||||
|
int curHeight = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < (_collection?.Count ?? 0); i++)
|
||||||
|
{
|
||||||
|
if (_collection?.Get(i) != null)
|
||||||
|
{
|
||||||
|
_collection?.Get(i).SetPictureSize(_pictureWidth, _pictureHeight);
|
||||||
|
_collection?.Get(i).SetPosition(_placeSizeWidth * curWidth + 30, curHeight * _placeSizeHeight + 35);
|
||||||
|
}
|
||||||
|
if (curHeight < height - 1)
|
||||||
|
curHeight++;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
curHeight = 0;
|
||||||
|
curWidth++;
|
||||||
|
}
|
||||||
|
if (curWidth > width - 1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,128 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace LocomotiveProject.CollectionGenericObjects;
|
||||||
|
|
||||||
|
public class MassiveGenericObjects<T> : ICollectionGenericObjects<T>
|
||||||
|
where T : class
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
private T[] _collection;
|
||||||
|
|
||||||
|
public int Count => _collection.Length;
|
||||||
|
|
||||||
|
public int MaxCount
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _collection.Length;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value > 0)
|
||||||
|
{
|
||||||
|
if (_collection.Length > 0)
|
||||||
|
{
|
||||||
|
Array.Resize(ref _collection, value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_collection = new T?[value];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public CollectionType GetCollectionType => CollectionType.Massive;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// конструктор
|
||||||
|
/// </summary>
|
||||||
|
public MassiveGenericObjects()
|
||||||
|
{
|
||||||
|
_collection = Array.Empty<T>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public T? Get(int positon)
|
||||||
|
{
|
||||||
|
if (positon <= Count || positon > 0)
|
||||||
|
{
|
||||||
|
return _collection[positon];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int Insert(T obj)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < Count; i++)
|
||||||
|
{
|
||||||
|
if (_collection[i] == null )
|
||||||
|
{
|
||||||
|
_collection[i] = obj;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int Insert(T obj, int position)
|
||||||
|
{
|
||||||
|
if (_collection[position]== null)
|
||||||
|
{
|
||||||
|
_collection[position] = obj;
|
||||||
|
return position;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int i = position; i < Count; i++)
|
||||||
|
{
|
||||||
|
if (_collection[i] == null)
|
||||||
|
{
|
||||||
|
_collection[i] = obj;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int i = Count -1; i > 0; i--)
|
||||||
|
{
|
||||||
|
if (_collection[i] == null)
|
||||||
|
{
|
||||||
|
_collection[i] = obj;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public T? Remove(int position)
|
||||||
|
{
|
||||||
|
if (position >= Count || position < 0) return null;
|
||||||
|
if (_collection[position] != null)
|
||||||
|
{
|
||||||
|
T obj = _collection[position];
|
||||||
|
_collection[position] = null;
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool InsertingElementCollection(int index, T obj)
|
||||||
|
{
|
||||||
|
if (_collection[index] != null) return false;
|
||||||
|
|
||||||
|
_collection[index] = obj;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<T?> GetItems()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < _collection.Length; ++i)
|
||||||
|
{
|
||||||
|
yield return _collection[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,222 @@
|
|||||||
|
using LocomativeProject.Drawnings;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace LocomotiveProject.CollectionGenericObjects
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Класс-хранилище коллекций
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T"></typeparam>
|
||||||
|
public class StorageCollection<T>
|
||||||
|
where T : DrawningBaseLocomotive
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Словарь (хранилище) с коллекциями
|
||||||
|
/// </summary>
|
||||||
|
readonly Dictionary<string, ICollectionGenericObjects<T>> _storages;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Возвращение списка названий коллекций
|
||||||
|
/// </summary>
|
||||||
|
public List<string> Keys => _storages.Keys.ToList();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ключевое слово, с которого должен начинаться файл
|
||||||
|
/// </summary>
|
||||||
|
private readonly string _collectionKey = "CollectionsStorage";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Разделитель для записи ключа и значения элемента словаря
|
||||||
|
/// </summary>
|
||||||
|
private readonly string _separatorForKeyValue = "|";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Разделитель для записей коллекции данных в файл
|
||||||
|
/// </summary>
|
||||||
|
private readonly string _separatorItems = ";";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Конструктор
|
||||||
|
/// </summary>
|
||||||
|
public StorageCollection()
|
||||||
|
{
|
||||||
|
_storages = new Dictionary<string, ICollectionGenericObjects<T>>();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Добавление коллекции в хранилище
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name">Название коллекции</param>
|
||||||
|
/// <param name="collectionType">тип коллекции</param>
|
||||||
|
public void AddCollection(string name, CollectionType collectionType)
|
||||||
|
{
|
||||||
|
// TODO проверка, что name не пустой и нет в словаре записи с таким ключом
|
||||||
|
// TODO Прописать логику для добавления
|
||||||
|
if (!_storages.ContainsKey(name))
|
||||||
|
{
|
||||||
|
ICollectionGenericObjects<T> collection;
|
||||||
|
|
||||||
|
switch (collectionType)
|
||||||
|
{
|
||||||
|
case CollectionType.List:
|
||||||
|
collection = new ListGenericObjects<T>();
|
||||||
|
break;
|
||||||
|
case CollectionType.Massive:
|
||||||
|
collection = new MassiveGenericObjects<T>();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_storages.Add(name, collection);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Удаление коллекции
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name">Название коллекции</param>
|
||||||
|
public void DelCollection(string name)
|
||||||
|
{
|
||||||
|
// TODO Прописать логику для удаления коллекции
|
||||||
|
|
||||||
|
_storages.Remove(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Доступ к коллекции
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name">Название коллекции</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public ICollectionGenericObjects<T>? this[string name]
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
// TODO Продумать логику получения
|
||||||
|
|
||||||
|
if (_storages.TryGetValue(name, out var value)) return value;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Сохранение информации по автомобилям в хранилище в файл
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="filename">Путь и имя файла</param>
|
||||||
|
/// <returns>true - сохранение прошло успешно, false - ошибка при сохранении данных</returns>
|
||||||
|
public bool SaveData(string filename)
|
||||||
|
{
|
||||||
|
if (_storages.Count == 0)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (File.Exists(filename))
|
||||||
|
{
|
||||||
|
File.Delete(filename);
|
||||||
|
}
|
||||||
|
using (StreamWriter writer = new StreamWriter(filename))
|
||||||
|
{
|
||||||
|
writer.Write(_collectionKey);
|
||||||
|
foreach (KeyValuePair<string, ICollectionGenericObjects<T>> value in _storages)
|
||||||
|
{
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
stringBuilder.Append(Environment.NewLine);
|
||||||
|
|
||||||
|
if (value.Value.Count == 0)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
stringBuilder.Append(value.Key);
|
||||||
|
stringBuilder.Append(_separatorForKeyValue);
|
||||||
|
stringBuilder.Append(value.Value.GetCollectionType);
|
||||||
|
stringBuilder.Append(_separatorForKeyValue);
|
||||||
|
stringBuilder.Append(value.Value.MaxCount);
|
||||||
|
stringBuilder.Append(_separatorForKeyValue);
|
||||||
|
|
||||||
|
foreach (T? item in value.Value.GetItems())
|
||||||
|
{
|
||||||
|
string data = item?.GetDataForSave() ?? string.Empty;
|
||||||
|
if (string.IsNullOrEmpty(data))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
stringBuilder.Append(data);
|
||||||
|
stringBuilder.Append(_separatorItems);
|
||||||
|
}
|
||||||
|
writer.Write(stringBuilder);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Загрузка информации по автомобилям в хранилище из файла
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="filename">Путь и имя файла</param>
|
||||||
|
/// <returns>true - загрузка прошла успешно, false - ошибка при загрузке данных</returns>
|
||||||
|
public bool LoadData(string filename)
|
||||||
|
{
|
||||||
|
if (!File.Exists(filename))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
using (StreamReader streamRader = File.OpenText(filename))
|
||||||
|
{
|
||||||
|
string inputString = streamRader.ReadLine();
|
||||||
|
|
||||||
|
if (inputString == null || inputString.Length == 0)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!inputString.StartsWith(_collectionKey))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
_storages.Clear();
|
||||||
|
string strs = "";
|
||||||
|
while ((strs = streamRader.ReadLine()) != null)
|
||||||
|
{
|
||||||
|
string[] record = strs.Split(_separatorForKeyValue, StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
if (record.Length != 4)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
CollectionType collectionType = (CollectionType)Enum.Parse(typeof(CollectionType), record[1]);
|
||||||
|
ICollectionGenericObjects<T>? collection = StorageCollection<T>.CreateCollection(collectionType);
|
||||||
|
if (collection == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
collection.MaxCount = Convert.ToInt32(record[2]);
|
||||||
|
string[] set = record[3].Split(_separatorItems, StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
foreach (string elem in set)
|
||||||
|
{
|
||||||
|
if (elem?.CreateDrawingBaseLocomotive() is T ship)
|
||||||
|
{
|
||||||
|
if (collection.Insert(ship) == -1)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_storages.Add(record[0], collection);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ICollectionGenericObjects<T>? CreateCollection(CollectionType collectionType)
|
||||||
|
{
|
||||||
|
return collectionType switch
|
||||||
|
{
|
||||||
|
CollectionType.Massive => new MassiveGenericObjects<T>(),
|
||||||
|
CollectionType.List => new ListGenericObjects<T>(),
|
||||||
|
_ => null,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
namespace LocomativeProject.Drawnings
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Направление перемещения
|
||||||
|
/// </summary>
|
||||||
|
public enum DirectionType
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Неизвестное направление
|
||||||
|
/// </summary>
|
||||||
|
Unknow = -1,
|
||||||
|
/// <summary>
|
||||||
|
/// Вверх
|
||||||
|
/// </summary>
|
||||||
|
Up = 1,
|
||||||
|
/// <summary>
|
||||||
|
/// Вниз
|
||||||
|
/// </summary>
|
||||||
|
Down,
|
||||||
|
/// <summary>
|
||||||
|
/// Влево
|
||||||
|
/// </summary>
|
||||||
|
Left,
|
||||||
|
/// <summary>
|
||||||
|
/// Вправо
|
||||||
|
/// </summary>
|
||||||
|
Right
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,288 @@
|
|||||||
|
using LocomativeProject.Entities;
|
||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
|
namespace LocomativeProject.Drawnings
|
||||||
|
{
|
||||||
|
public class DrawningBaseLocomotive
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Класс-сущность
|
||||||
|
/// </summary>
|
||||||
|
public EntityBaseLocomotive? _EntityBaseLocomotive { get; protected set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ширина окна
|
||||||
|
/// </summary>
|
||||||
|
protected int? _pictureWidth;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Высота окна
|
||||||
|
/// </summary>
|
||||||
|
protected int? _pictureHeight;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Левая координата прорисовки тепловоза
|
||||||
|
/// </summary>
|
||||||
|
protected int? _startPosX;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Верхняя кооридната прорисовки тепловоза
|
||||||
|
/// </summary>
|
||||||
|
protected int? _startPosY;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ширина прорисовки тепловоза
|
||||||
|
/// </summary>
|
||||||
|
private readonly int _drawningBaseLocomotiveWidth = 150;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Высота прорисовки тепловоза
|
||||||
|
/// </summary>
|
||||||
|
private readonly int _drawningBaseLocomotiveHeight = 80;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Координата X объекта
|
||||||
|
/// </summary>
|
||||||
|
public int? GetPosX => _startPosX;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Координата Y объекта
|
||||||
|
/// </summary>
|
||||||
|
public int? GetPosY => _startPosY;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ширина объекта
|
||||||
|
/// </summary>
|
||||||
|
public int GetWidth => _drawningBaseLocomotiveWidth;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Высота объекта
|
||||||
|
/// </summary>
|
||||||
|
public int GetHeight => _drawningBaseLocomotiveHeight;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Пустой конструктор
|
||||||
|
/// </summary>
|
||||||
|
private DrawningBaseLocomotive()
|
||||||
|
{
|
||||||
|
_pictureWidth = null;
|
||||||
|
_pictureHeight = null;
|
||||||
|
_startPosX = null;
|
||||||
|
_startPosY = null;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Конструктор базового поезда
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="speed">Скорость</param>
|
||||||
|
/// <param name="weight">Вес</param>
|
||||||
|
/// <param name="bodyColor">Основной цвет</param>
|
||||||
|
public DrawningBaseLocomotive(int speed, double weight, Color bodyColor) : this()
|
||||||
|
{
|
||||||
|
_EntityBaseLocomotive = new EntityBaseLocomotive(speed, weight, bodyColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Конструктор
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="entityMonorail"></param>
|
||||||
|
public DrawningBaseLocomotive(EntityBaseLocomotive entityBaseLocomotive) : this()
|
||||||
|
{
|
||||||
|
Debug.WriteLine(entityBaseLocomotive.BodyColor.ToString() + " " + entityBaseLocomotive.Speed + " " + entityBaseLocomotive.Weight);
|
||||||
|
_EntityBaseLocomotive = new EntityBaseLocomotive(entityBaseLocomotive.Speed, entityBaseLocomotive.Weight, entityBaseLocomotive.BodyColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Конструктор для наследников
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="drawningLocomotiveWidth">ширина</param>
|
||||||
|
/// <param name="drawningLocomotiveHeight">высота</param>
|
||||||
|
protected DrawningBaseLocomotive(int Width, int Height) : this()
|
||||||
|
{
|
||||||
|
_drawningBaseLocomotiveWidth = Width;
|
||||||
|
_drawningBaseLocomotiveHeight = Height;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Установка границ поля
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="width">Ширина поля</param>
|
||||||
|
/// <param name="height">Высота поля</param>
|
||||||
|
/// <returns>true - границы заданы, false - проверка не пройдена, нельзя
|
||||||
|
///разместить объект в этих размерах</returns>
|
||||||
|
public bool SetPictureSize(int width, int height)
|
||||||
|
{
|
||||||
|
if (width > _drawningBaseLocomotiveWidth || height > _drawningBaseLocomotiveHeight) // если ширина и высота окна больше чем объект
|
||||||
|
{
|
||||||
|
_pictureWidth = width;
|
||||||
|
_pictureHeight = height;
|
||||||
|
if (_startPosX + _drawningBaseLocomotiveWidth > width || _startPosX < 0) // если координаты выходят за пределы, корректируем
|
||||||
|
{
|
||||||
|
_startPosX = 0;
|
||||||
|
}
|
||||||
|
if (_startPosY + _drawningBaseLocomotiveHeight > height || _startPosY < 0)
|
||||||
|
{
|
||||||
|
_startPosY = 0;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Установка позиции
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="x">Координата X</param>
|
||||||
|
/// <param name="y">Координата Y</param>
|
||||||
|
public void SetPosition(int x, int y)
|
||||||
|
{
|
||||||
|
if (!_pictureHeight.HasValue || !_pictureWidth.HasValue)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// если все нормально
|
||||||
|
if (x > 0 || x + _drawningBaseLocomotiveWidth < _pictureWidth)
|
||||||
|
{
|
||||||
|
_startPosX = x;
|
||||||
|
}
|
||||||
|
if (y > 0 || y + _drawningBaseLocomotiveHeight < _pictureHeight)
|
||||||
|
{
|
||||||
|
_startPosY = y;
|
||||||
|
}
|
||||||
|
// если не лезет, но мог бы влезть
|
||||||
|
if (x < 0 || x + _drawningBaseLocomotiveWidth > _pictureWidth)
|
||||||
|
{
|
||||||
|
_startPosX = 0;
|
||||||
|
}
|
||||||
|
if (y < 0 || y + _drawningBaseLocomotiveHeight > _pictureHeight)
|
||||||
|
{
|
||||||
|
_startPosY = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Изменение направления перемещения
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="direction">Направление</param>
|
||||||
|
/// <returns>true - перемещене выполнено, false - перемещение
|
||||||
|
/// невозможно</returns>
|
||||||
|
public bool MoveTransport(DirectionType direction)
|
||||||
|
{
|
||||||
|
if (_EntityBaseLocomotive == null || !_startPosX.HasValue ||
|
||||||
|
!_startPosY.HasValue)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
switch (direction)
|
||||||
|
{
|
||||||
|
//влево
|
||||||
|
case DirectionType.Left:
|
||||||
|
if (_startPosX.Value - _EntityBaseLocomotive.Step > 0)
|
||||||
|
{
|
||||||
|
_startPosX -= (int)_EntityBaseLocomotive.Step;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
//вверх
|
||||||
|
case DirectionType.Up:
|
||||||
|
if (_startPosY.Value - _EntityBaseLocomotive.Step > 0)
|
||||||
|
{
|
||||||
|
_startPosY -= (int)_EntityBaseLocomotive.Step;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
// вправо
|
||||||
|
case DirectionType.Right:
|
||||||
|
if (_startPosX.Value + _drawningBaseLocomotiveWidth + _EntityBaseLocomotive.Step < _pictureWidth)
|
||||||
|
{
|
||||||
|
_startPosX += (int)_EntityBaseLocomotive.Step;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
//вниз
|
||||||
|
case DirectionType.Down:
|
||||||
|
if (_startPosY.Value + _drawningBaseLocomotiveHeight + _EntityBaseLocomotive.Step < _pictureHeight)
|
||||||
|
{
|
||||||
|
_startPosY += (int)_EntityBaseLocomotive.Step;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ОТрисовка полигона
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="g">Graphics</param>
|
||||||
|
private void DrawPolygon(Graphics g, Pen pen, Brush brush, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)
|
||||||
|
{
|
||||||
|
Point point1 = new Point(x1, y1);
|
||||||
|
Point point2 = new Point(x2, y2);
|
||||||
|
Point point3 = new Point(x3, y3);
|
||||||
|
Point point4 = new Point(x4, y4);
|
||||||
|
Point[] PolygponPoints =
|
||||||
|
{
|
||||||
|
point1,
|
||||||
|
point2,
|
||||||
|
point3,
|
||||||
|
point4
|
||||||
|
};
|
||||||
|
g.FillPolygon(brush, PolygponPoints);
|
||||||
|
g.DrawPolygon(pen, PolygponPoints);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Прорисовка объекта
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="g"></param>
|
||||||
|
public virtual void DrawTransport(Graphics g)
|
||||||
|
{
|
||||||
|
if (_EntityBaseLocomotive == null || !_startPosX.HasValue || !_startPosY.HasValue)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Pen pen = new(Color.Black);
|
||||||
|
Brush bodyBrush = new SolidBrush(_EntityBaseLocomotive.BodyColor);
|
||||||
|
Brush blackBrush = new SolidBrush(Color.Black);
|
||||||
|
Brush whiteBrush = new SolidBrush(Color.White);
|
||||||
|
//границы тепловоза
|
||||||
|
DrawPolygon(g, pen, bodyBrush,
|
||||||
|
_startPosX.Value + 5, _startPosY.Value + 10,
|
||||||
|
_startPosX.Value + 105, _startPosY.Value + 10,
|
||||||
|
_startPosX.Value + 115, _startPosY.Value + 20 + 10,
|
||||||
|
_startPosX.Value + 5, _startPosY.Value + 20 + 10
|
||||||
|
);
|
||||||
|
g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + 20 + 10, 110, 20);
|
||||||
|
g.FillRectangle(blackBrush, _startPosX.Value, _startPosY.Value + 5 + 10, 5, 30);
|
||||||
|
//шасси
|
||||||
|
DrawPolygon(g, pen, blackBrush,
|
||||||
|
_startPosX.Value, _startPosY.Value + 45 + 10,
|
||||||
|
_startPosX.Value + 10, _startPosY.Value + 40 + 10,
|
||||||
|
_startPosX.Value + 50, _startPosY.Value + 40 + 10,
|
||||||
|
_startPosX.Value + 50, _startPosY.Value + 45 + 10
|
||||||
|
);
|
||||||
|
DrawPolygon(g, pen, blackBrush,
|
||||||
|
_startPosX.Value + 70, _startPosY.Value + 40 + 10,
|
||||||
|
_startPosX.Value + 110, _startPosY.Value + 40 + 10,
|
||||||
|
_startPosX.Value + 120, _startPosY.Value + 45 + 10,
|
||||||
|
_startPosX.Value + 70, _startPosY.Value + 45 + 10
|
||||||
|
);
|
||||||
|
//колеса
|
||||||
|
g.DrawEllipse(pen, _startPosX.Value + 15, _startPosY.Value + 40 + 10, 10, 10);
|
||||||
|
g.FillEllipse(whiteBrush, _startPosX.Value + 15, _startPosY.Value + 40 + 10, 10, 10);
|
||||||
|
g.DrawEllipse(pen, _startPosX.Value + 30, _startPosY.Value + 40 + 10, 10, 10);
|
||||||
|
g.FillEllipse(whiteBrush, _startPosX.Value + 30, _startPosY.Value + 40 + 10, 10, 10);
|
||||||
|
g.DrawEllipse(pen, _startPosX.Value + 80, _startPosY.Value + 40 + 10, 10, 10);
|
||||||
|
g.FillEllipse(whiteBrush, _startPosX.Value + 80, _startPosY.Value + 40 + 10, 10, 10);
|
||||||
|
g.DrawEllipse(pen, _startPosX.Value + 95, _startPosY.Value + 40 + 10, 10, 10);
|
||||||
|
g.FillEllipse(whiteBrush, _startPosX.Value + 95, _startPosY.Value + 40 + 10, 10, 10);
|
||||||
|
//дверь
|
||||||
|
g.FillRectangle(bodyBrush, _startPosX.Value + 50, _startPosY.Value + 10 + 10, 10, 20);
|
||||||
|
g.DrawRectangle(pen, _startPosX.Value + 50, _startPosY.Value + 10 + 10, 10, 20);
|
||||||
|
//окна
|
||||||
|
pen = new(Color.Blue);
|
||||||
|
g.DrawRectangle(pen, _startPosX.Value + 85, _startPosY.Value + 5 + 10, 10, 10);
|
||||||
|
g.DrawRectangle(pen, _startPosX.Value + 70, _startPosY.Value + 5 + 10, 10, 10);
|
||||||
|
g.DrawRectangle(pen, _startPosX.Value + 10, _startPosY.Value + 5 + 10, 10, 10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,60 @@
|
|||||||
|
using LocomativeProject.Drawnings;
|
||||||
|
using LocomotiveProject.Entities;
|
||||||
|
|
||||||
|
namespace LocomotiveProject.Drawnings
|
||||||
|
{
|
||||||
|
public class DrawningLocomotive : DrawningBaseLocomotive
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Конструктор
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="entityModernLocomotive"></param>
|
||||||
|
public DrawningLocomotive(EntityLocomotive entityLocomotive) : base(120, 60)
|
||||||
|
{
|
||||||
|
_EntityBaseLocomotive = new EntityLocomotive(entityLocomotive.Speed, entityLocomotive.Weight, entityLocomotive.BodyColor, entityLocomotive.AdditionalColor, entityLocomotive.FuelCompartment, entityLocomotive.ExehaustPipe);
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Конструктор
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="speed">Скорость</param>
|
||||||
|
/// <param name="weight">Вес тепловоза</param>
|
||||||
|
/// <param name="bodyColor">Основной цвет</param>
|
||||||
|
/// <param name="additionalColor">Дополнительный цвет</param>
|
||||||
|
/// <param name="exehaustPipe">Признак наличия трубы</param>
|
||||||
|
/// <param name="fuelCompartment">Признак наличия топливного отсека</param>
|
||||||
|
public DrawningLocomotive(int speed, double weight, Color bodyColor, Color additionalColor, bool exehaustPipe, bool fuelCompartment) : base(120, 60)
|
||||||
|
{
|
||||||
|
_EntityBaseLocomotive = new EntityLocomotive(speed, weight, bodyColor, additionalColor, exehaustPipe, fuelCompartment);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void DrawTransport(Graphics g)
|
||||||
|
{
|
||||||
|
if (_EntityBaseLocomotive == null || _EntityBaseLocomotive is not EntityLocomotive entityLocomotive || !_startPosX.HasValue || !_startPosY.HasValue)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Pen pen = new(Color.Black);
|
||||||
|
Brush additionalBrush = new SolidBrush(entityLocomotive.AdditionalColor);
|
||||||
|
Brush bodyBrush = new SolidBrush(entityLocomotive.BodyColor);
|
||||||
|
//Brush blackBrush = new SolidBrush(Color.Black);
|
||||||
|
//Brush whiteBrush = new SolidBrush(Color.White);
|
||||||
|
//g.FillRectangle(additionalBrush, _startPosX.Value + 5, _startPosY.Value + +10 + 20, 110, 20);
|
||||||
|
g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + 20 + 10, 110, 20);
|
||||||
|
base.DrawTransport(g);
|
||||||
|
if (entityLocomotive.ExehaustPipe)
|
||||||
|
{
|
||||||
|
Brush greyBrush = new SolidBrush(Color.Gray);
|
||||||
|
g.FillRectangle(additionalBrush, _startPosX.Value + 80, _startPosY.Value, 5, 10);
|
||||||
|
g.DrawRectangle(pen, _startPosX.Value + 80, _startPosY.Value, 5, 10);
|
||||||
|
}
|
||||||
|
// отсек для топлива
|
||||||
|
if (entityLocomotive.FuelCompartment)
|
||||||
|
{
|
||||||
|
g.FillRectangle(additionalBrush, _startPosX.Value + 25, _startPosY.Value + 10 + 10, 10, 20);
|
||||||
|
g.DrawRectangle(pen, _startPosX.Value + 25, _startPosY.Value + 10 + 10, 10, 20);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
using LocomativeProject.Drawnings;
|
||||||
|
using LocomativeProject.Entities;
|
||||||
|
using LocomotiveProject.Drawnings;
|
||||||
|
using LocomotiveProject.Entities;
|
||||||
|
|
||||||
|
namespace LocomativeProject.Drawnings
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Расширение для класса EntityMonorail
|
||||||
|
/// </summary>
|
||||||
|
public static class ExtentionDrawningMonorail
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Разделитель для записи информации по объекту в файл
|
||||||
|
/// </summary>
|
||||||
|
private static readonly string _separatorForObject = ":";
|
||||||
|
|
||||||
|
public static DrawningBaseLocomotive? CreateDrawingBaseLocomotive(this string info)
|
||||||
|
{
|
||||||
|
string[] args = info.Split(_separatorForObject);
|
||||||
|
EntityBaseLocomotive? locomotive = EntityLocomotive.CreateEntityLocomotive(args);
|
||||||
|
|
||||||
|
if (locomotive != null) return new DrawningLocomotive((EntityLocomotive)locomotive);
|
||||||
|
|
||||||
|
locomotive = EntityBaseLocomotive.CreateEntityBaseLocomotive(args);
|
||||||
|
|
||||||
|
if (locomotive != null) return new DrawningBaseLocomotive(locomotive);
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Получение данных для сохранения в файл
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="drawingMonorail"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string GetDataForSave(this DrawningBaseLocomotive drawningBaseLocomotive)
|
||||||
|
{
|
||||||
|
string[]? array = drawningBaseLocomotive?._EntityBaseLocomotive?.GetStringRepresention();
|
||||||
|
|
||||||
|
if (array == null)
|
||||||
|
return string.Empty;
|
||||||
|
|
||||||
|
return string.Join(_separatorForObject, array);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,64 @@
|
|||||||
|
namespace LocomativeProject.Entities
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Класс-сущность базовый тепловоз
|
||||||
|
/// </summary>
|
||||||
|
public class EntityBaseLocomotive
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Скорость
|
||||||
|
/// </summary>
|
||||||
|
public int Speed { get; private set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Вес
|
||||||
|
/// </summary>
|
||||||
|
public double Weight { get; private set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Основной цвет
|
||||||
|
/// </summary>
|
||||||
|
public Color BodyColor { get; private set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Установка основого цвета
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="bodyColor"></param>
|
||||||
|
public void setBodyColor(Color bodyColor) { BodyColor = bodyColor; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Шаг перемещения тепловоза
|
||||||
|
/// </summary>
|
||||||
|
public double Step => Speed * 100 / Weight;
|
||||||
|
/// <summary>
|
||||||
|
/// Конструктор
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="speed">Скорость</param>
|
||||||
|
/// <param name="weight">Вес тепловоза</param>
|
||||||
|
/// <param name="bodyColor">Основной цвет</param>
|
||||||
|
public EntityBaseLocomotive(int speed, double weight, Color bodyColor)
|
||||||
|
{
|
||||||
|
Speed = speed;
|
||||||
|
Weight = weight;
|
||||||
|
BodyColor = bodyColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Получение строк с значениями свойств объекта класса-сущности
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public virtual string[] GetStringRepresention()
|
||||||
|
{
|
||||||
|
return new string[] { nameof(EntityBaseLocomotive), Speed.ToString(), Weight.ToString(), BodyColor.Name.ToString() };
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Создание объекта из массива строк
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="args"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static EntityBaseLocomotive? CreateEntityBaseLocomotive(string[] args)
|
||||||
|
{
|
||||||
|
if (args.Length == 0 || args[0] != nameof(EntityBaseLocomotive)) return null;
|
||||||
|
|
||||||
|
return new EntityBaseLocomotive(Convert.ToInt32(args[1]), Convert.ToDouble(args[2]), Color.FromName(args[3]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,61 @@
|
|||||||
|
using LocomativeProject.Entities;
|
||||||
|
|
||||||
|
namespace LocomotiveProject.Entities
|
||||||
|
{
|
||||||
|
public class EntityLocomotive : EntityBaseLocomotive
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Дополнительный цвет
|
||||||
|
/// </summary>
|
||||||
|
public Color AdditionalColor { get; private set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Задать доп цвет
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="color"></param>
|
||||||
|
public void setAdditionalColor(Color color) { AdditionalColor = color; }
|
||||||
|
/// <summary>
|
||||||
|
/// Признак (опция) наличие трубы
|
||||||
|
/// </summary>
|
||||||
|
public bool ExehaustPipe { get; private set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Признак (опция) наличие топливного отсека
|
||||||
|
/// </summary>
|
||||||
|
public bool FuelCompartment { get; private set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Конструктор сущности
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="speed">Скорость</param>
|
||||||
|
/// <param name="weight">Вес тепловоза</param>
|
||||||
|
/// <param name="bodyColor">Основной цвет</param>
|
||||||
|
/// <param name="additionalColor">Дополнительный цвет</param>
|
||||||
|
/// <param name="exehaustPipe">Признак наличия трубы</param>
|
||||||
|
/// <param name="fuelCompartment">Признак наличия топливного отсека</param>
|
||||||
|
public EntityLocomotive(int speed, double weight, Color bodyColor, Color additionalColor, bool exehaustPipe, bool fuelCompartment) : base(speed, weight, bodyColor)
|
||||||
|
{
|
||||||
|
AdditionalColor = additionalColor;
|
||||||
|
ExehaustPipe = exehaustPipe;
|
||||||
|
FuelCompartment = fuelCompartment;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Получение строк с значениями свойств объекта класса-сущности
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override string[] GetStringRepresention()
|
||||||
|
{
|
||||||
|
return new string[] { nameof(EntityLocomotive), Speed.ToString(), Weight.ToString(), BodyColor.Name.ToString(), AdditionalColor.Name.ToString(), FuelCompartment.ToString(), ExehaustPipe.ToString() };
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Создание объекта из массива строк
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="args"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static EntityLocomotive? CreateEntityLocomotive(string[] args)
|
||||||
|
{
|
||||||
|
if (args.Length == 0 || args[0] != nameof(EntityLocomotive)) return null;
|
||||||
|
|
||||||
|
return new EntityLocomotive(Convert.ToInt32(args[1]), Convert.ToDouble(args[2]), Color.FromName(args[3]), Color.FromName(args[4]), Convert.ToBoolean(args[5]), Convert.ToBoolean(args[6]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,39 +0,0 @@
|
|||||||
namespace LocomativeProject
|
|
||||||
{
|
|
||||||
partial class Form1
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Required designer variable.
|
|
||||||
/// </summary>
|
|
||||||
private System.ComponentModel.IContainer components = null;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Clean up any resources being used.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
|
||||||
protected override void Dispose(bool disposing)
|
|
||||||
{
|
|
||||||
if (disposing && (components != null))
|
|
||||||
{
|
|
||||||
components.Dispose();
|
|
||||||
}
|
|
||||||
base.Dispose(disposing);
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Windows Form Designer generated code
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Required method for Designer support - do not modify
|
|
||||||
/// the contents of this method with the code editor.
|
|
||||||
/// </summary>
|
|
||||||
private void InitializeComponent()
|
|
||||||
{
|
|
||||||
this.components = new System.ComponentModel.Container();
|
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
|
||||||
this.ClientSize = new System.Drawing.Size(800, 450);
|
|
||||||
this.Text = "Form1";
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
namespace LocomativeProject
|
|
||||||
{
|
|
||||||
public partial class Form1 : Form
|
|
||||||
{
|
|
||||||
public Form1()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
355
LocomativeProject/LocomativeProject/FormLocomotiveCollection.Designer.cs
generated
Normal file
355
LocomativeProject/LocomativeProject/FormLocomotiveCollection.Designer.cs
generated
Normal file
@ -0,0 +1,355 @@
|
|||||||
|
namespace LocomotiveProject
|
||||||
|
{
|
||||||
|
partial class FormLocomotiveCollection
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
groupBoxTools = new GroupBox();
|
||||||
|
panelCompanyTools = new Panel();
|
||||||
|
buttonAddMonorail = new Button();
|
||||||
|
maskedTextBox = new MaskedTextBox();
|
||||||
|
buttonRefresh = new Button();
|
||||||
|
buttonRemoveMonorail = new Button();
|
||||||
|
buttonGoToCheck = new Button();
|
||||||
|
buttonCreateCompany = new Button();
|
||||||
|
panelStorage = new Panel();
|
||||||
|
buttonCollectionDelete = new Button();
|
||||||
|
listBoxCollection = new ListBox();
|
||||||
|
buttonCollectionAdd = new Button();
|
||||||
|
radioButtonList = new RadioButton();
|
||||||
|
radioButtonMassive = new RadioButton();
|
||||||
|
textBoxCollectionName = new TextBox();
|
||||||
|
labelCollectionName = new Label();
|
||||||
|
comboBoxSelectorCompany = new ComboBox();
|
||||||
|
pictureBox = new PictureBox();
|
||||||
|
menuStrip = new MenuStrip();
|
||||||
|
файлToolStripMenuItem = new ToolStripMenuItem();
|
||||||
|
saveToolStripMenuItem = new ToolStripMenuItem();
|
||||||
|
loadToolStripMenuItem = new ToolStripMenuItem();
|
||||||
|
saveFileDialog = new SaveFileDialog();
|
||||||
|
openFileDialog = new OpenFileDialog();
|
||||||
|
groupBoxTools.SuspendLayout();
|
||||||
|
panelCompanyTools.SuspendLayout();
|
||||||
|
panelStorage.SuspendLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)pictureBox).BeginInit();
|
||||||
|
menuStrip.SuspendLayout();
|
||||||
|
SuspendLayout();
|
||||||
|
//
|
||||||
|
// groupBoxTools
|
||||||
|
//
|
||||||
|
groupBoxTools.Controls.Add(panelCompanyTools);
|
||||||
|
groupBoxTools.Controls.Add(buttonCreateCompany);
|
||||||
|
groupBoxTools.Controls.Add(panelStorage);
|
||||||
|
groupBoxTools.Controls.Add(comboBoxSelectorCompany);
|
||||||
|
groupBoxTools.Dock = DockStyle.Right;
|
||||||
|
groupBoxTools.Location = new Point(970, 24);
|
||||||
|
groupBoxTools.Name = "groupBoxTools";
|
||||||
|
groupBoxTools.Size = new Size(241, 638);
|
||||||
|
groupBoxTools.TabIndex = 0;
|
||||||
|
groupBoxTools.TabStop = false;
|
||||||
|
groupBoxTools.Text = "Инструменты";
|
||||||
|
//
|
||||||
|
// panelCompanyTools
|
||||||
|
//
|
||||||
|
panelCompanyTools.Controls.Add(buttonAddMonorail);
|
||||||
|
panelCompanyTools.Controls.Add(maskedTextBox);
|
||||||
|
panelCompanyTools.Controls.Add(buttonRefresh);
|
||||||
|
panelCompanyTools.Controls.Add(buttonRemoveMonorail);
|
||||||
|
panelCompanyTools.Controls.Add(buttonGoToCheck);
|
||||||
|
panelCompanyTools.Dock = DockStyle.Bottom;
|
||||||
|
panelCompanyTools.Enabled = false;
|
||||||
|
panelCompanyTools.Location = new Point(3, 313);
|
||||||
|
panelCompanyTools.Margin = new Padding(3, 2, 3, 2);
|
||||||
|
panelCompanyTools.Name = "panelCompanyTools";
|
||||||
|
panelCompanyTools.Size = new Size(235, 322);
|
||||||
|
panelCompanyTools.TabIndex = 8;
|
||||||
|
//
|
||||||
|
// buttonAddMonorail
|
||||||
|
//
|
||||||
|
buttonAddMonorail.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||||
|
buttonAddMonorail.Location = new Point(8, 32);
|
||||||
|
buttonAddMonorail.Name = "buttonAddMonorail";
|
||||||
|
buttonAddMonorail.Size = new Size(221, 48);
|
||||||
|
buttonAddMonorail.TabIndex = 1;
|
||||||
|
buttonAddMonorail.Text = "Добавление локомотива";
|
||||||
|
buttonAddMonorail.UseVisualStyleBackColor = true;
|
||||||
|
buttonAddMonorail.Click += ButtonAddLocomotive_Click;
|
||||||
|
//
|
||||||
|
// maskedTextBox
|
||||||
|
//
|
||||||
|
maskedTextBox.Location = new Point(5, 130);
|
||||||
|
maskedTextBox.Mask = "00";
|
||||||
|
maskedTextBox.Name = "maskedTextBox";
|
||||||
|
maskedTextBox.Size = new Size(223, 23);
|
||||||
|
maskedTextBox.TabIndex = 3;
|
||||||
|
maskedTextBox.ValidatingType = typeof(int);
|
||||||
|
//
|
||||||
|
// buttonRefresh
|
||||||
|
//
|
||||||
|
buttonRefresh.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||||
|
buttonRefresh.Location = new Point(8, 267);
|
||||||
|
buttonRefresh.Name = "buttonRefresh";
|
||||||
|
buttonRefresh.Size = new Size(219, 48);
|
||||||
|
buttonRefresh.TabIndex = 6;
|
||||||
|
buttonRefresh.Text = "Обновить";
|
||||||
|
buttonRefresh.UseVisualStyleBackColor = true;
|
||||||
|
buttonRefresh.Click += ButtonRefresh_Click;
|
||||||
|
//
|
||||||
|
// buttonRemoveMonorail
|
||||||
|
//
|
||||||
|
buttonRemoveMonorail.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||||
|
buttonRemoveMonorail.Location = new Point(8, 159);
|
||||||
|
buttonRemoveMonorail.Name = "buttonRemoveMonorail";
|
||||||
|
buttonRemoveMonorail.Size = new Size(221, 48);
|
||||||
|
buttonRemoveMonorail.TabIndex = 4;
|
||||||
|
buttonRemoveMonorail.Text = "Удалить локомотив";
|
||||||
|
buttonRemoveMonorail.UseVisualStyleBackColor = true;
|
||||||
|
buttonRemoveMonorail.Click += buttonRemoveLocomotive_Click;
|
||||||
|
//
|
||||||
|
// buttonGoToCheck
|
||||||
|
//
|
||||||
|
buttonGoToCheck.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||||
|
buttonGoToCheck.Location = new Point(8, 213);
|
||||||
|
buttonGoToCheck.Name = "buttonGoToCheck";
|
||||||
|
buttonGoToCheck.Size = new Size(220, 48);
|
||||||
|
buttonGoToCheck.TabIndex = 5;
|
||||||
|
buttonGoToCheck.Text = "Передать на тесты";
|
||||||
|
buttonGoToCheck.UseVisualStyleBackColor = true;
|
||||||
|
buttonGoToCheck.Click += ButtonGoToCheck_Click;
|
||||||
|
//
|
||||||
|
// buttonCreateCompany
|
||||||
|
//
|
||||||
|
buttonCreateCompany.Location = new Point(6, 291);
|
||||||
|
buttonCreateCompany.Margin = new Padding(3, 2, 3, 2);
|
||||||
|
buttonCreateCompany.Name = "buttonCreateCompany";
|
||||||
|
buttonCreateCompany.Size = new Size(222, 22);
|
||||||
|
buttonCreateCompany.TabIndex = 7;
|
||||||
|
buttonCreateCompany.Text = "Создать компанию";
|
||||||
|
buttonCreateCompany.UseVisualStyleBackColor = true;
|
||||||
|
buttonCreateCompany.Click += ButtonCreateCompany_Click;
|
||||||
|
//
|
||||||
|
// panelStorage
|
||||||
|
//
|
||||||
|
panelStorage.Controls.Add(buttonCollectionDelete);
|
||||||
|
panelStorage.Controls.Add(listBoxCollection);
|
||||||
|
panelStorage.Controls.Add(buttonCollectionAdd);
|
||||||
|
panelStorage.Controls.Add(radioButtonList);
|
||||||
|
panelStorage.Controls.Add(radioButtonMassive);
|
||||||
|
panelStorage.Controls.Add(textBoxCollectionName);
|
||||||
|
panelStorage.Controls.Add(labelCollectionName);
|
||||||
|
panelStorage.Dock = DockStyle.Top;
|
||||||
|
panelStorage.Location = new Point(3, 19);
|
||||||
|
panelStorage.Margin = new Padding(3, 2, 3, 2);
|
||||||
|
panelStorage.Name = "panelStorage";
|
||||||
|
panelStorage.Size = new Size(235, 242);
|
||||||
|
panelStorage.TabIndex = 7;
|
||||||
|
//
|
||||||
|
// buttonCollectionDelete
|
||||||
|
//
|
||||||
|
buttonCollectionDelete.Location = new Point(5, 206);
|
||||||
|
buttonCollectionDelete.Margin = new Padding(3, 2, 3, 2);
|
||||||
|
buttonCollectionDelete.Name = "buttonCollectionDelete";
|
||||||
|
buttonCollectionDelete.Size = new Size(222, 22);
|
||||||
|
buttonCollectionDelete.TabIndex = 6;
|
||||||
|
buttonCollectionDelete.Text = "Удалить коллекцию";
|
||||||
|
buttonCollectionDelete.UseVisualStyleBackColor = true;
|
||||||
|
buttonCollectionDelete.Click += ButtonCollectionDelete_Click;
|
||||||
|
//
|
||||||
|
// listBoxCollection
|
||||||
|
//
|
||||||
|
listBoxCollection.FormattingEnabled = true;
|
||||||
|
listBoxCollection.ItemHeight = 15;
|
||||||
|
listBoxCollection.Location = new Point(5, 123);
|
||||||
|
listBoxCollection.Margin = new Padding(3, 2, 3, 2);
|
||||||
|
listBoxCollection.Name = "listBoxCollection";
|
||||||
|
listBoxCollection.Size = new Size(223, 79);
|
||||||
|
listBoxCollection.TabIndex = 5;
|
||||||
|
//
|
||||||
|
// buttonCollectionAdd
|
||||||
|
//
|
||||||
|
buttonCollectionAdd.Location = new Point(5, 97);
|
||||||
|
buttonCollectionAdd.Margin = new Padding(3, 2, 3, 2);
|
||||||
|
buttonCollectionAdd.Name = "buttonCollectionAdd";
|
||||||
|
buttonCollectionAdd.Size = new Size(222, 22);
|
||||||
|
buttonCollectionAdd.TabIndex = 4;
|
||||||
|
buttonCollectionAdd.Text = "Добавить коллекцию";
|
||||||
|
buttonCollectionAdd.UseVisualStyleBackColor = true;
|
||||||
|
buttonCollectionAdd.Click += ButtonCollectionAdd_Click;
|
||||||
|
//
|
||||||
|
// radioButtonList
|
||||||
|
//
|
||||||
|
radioButtonList.AutoSize = true;
|
||||||
|
radioButtonList.Location = new Point(113, 67);
|
||||||
|
radioButtonList.Margin = new Padding(3, 2, 3, 2);
|
||||||
|
radioButtonList.Name = "radioButtonList";
|
||||||
|
radioButtonList.Size = new Size(66, 19);
|
||||||
|
radioButtonList.TabIndex = 3;
|
||||||
|
radioButtonList.TabStop = true;
|
||||||
|
radioButtonList.Text = "Список";
|
||||||
|
radioButtonList.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// radioButtonMassive
|
||||||
|
//
|
||||||
|
radioButtonMassive.AutoSize = true;
|
||||||
|
radioButtonMassive.Location = new Point(20, 67);
|
||||||
|
radioButtonMassive.Margin = new Padding(3, 2, 3, 2);
|
||||||
|
radioButtonMassive.Name = "radioButtonMassive";
|
||||||
|
radioButtonMassive.Size = new Size(67, 19);
|
||||||
|
radioButtonMassive.TabIndex = 2;
|
||||||
|
radioButtonMassive.TabStop = true;
|
||||||
|
radioButtonMassive.Text = "Массив";
|
||||||
|
radioButtonMassive.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// textBoxCollectionName
|
||||||
|
//
|
||||||
|
textBoxCollectionName.Location = new Point(5, 28);
|
||||||
|
textBoxCollectionName.Margin = new Padding(3, 2, 3, 2);
|
||||||
|
textBoxCollectionName.Name = "textBoxCollectionName";
|
||||||
|
textBoxCollectionName.Size = new Size(223, 23);
|
||||||
|
textBoxCollectionName.TabIndex = 1;
|
||||||
|
//
|
||||||
|
// labelCollectionName
|
||||||
|
//
|
||||||
|
labelCollectionName.AutoSize = true;
|
||||||
|
labelCollectionName.Location = new Point(47, 10);
|
||||||
|
labelCollectionName.Name = "labelCollectionName";
|
||||||
|
labelCollectionName.Size = new Size(125, 15);
|
||||||
|
labelCollectionName.TabIndex = 0;
|
||||||
|
labelCollectionName.Text = "Название коллекции:";
|
||||||
|
//
|
||||||
|
// comboBoxSelectorCompany
|
||||||
|
//
|
||||||
|
comboBoxSelectorCompany.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||||
|
comboBoxSelectorCompany.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||||
|
comboBoxSelectorCompany.FormattingEnabled = true;
|
||||||
|
comboBoxSelectorCompany.Items.AddRange(new object[] { "Хранилище" });
|
||||||
|
comboBoxSelectorCompany.Location = new Point(3, 265);
|
||||||
|
comboBoxSelectorCompany.Name = "comboBoxSelectorCompany";
|
||||||
|
comboBoxSelectorCompany.Size = new Size(229, 23);
|
||||||
|
comboBoxSelectorCompany.TabIndex = 0;
|
||||||
|
comboBoxSelectorCompany.SelectedIndexChanged += ComboBoxSelectorCompany_SelectedIndexChanged;
|
||||||
|
//
|
||||||
|
// pictureBox
|
||||||
|
//
|
||||||
|
pictureBox.Dock = DockStyle.Fill;
|
||||||
|
pictureBox.Location = new Point(0, 24);
|
||||||
|
pictureBox.Name = "pictureBox";
|
||||||
|
pictureBox.Size = new Size(970, 638);
|
||||||
|
pictureBox.TabIndex = 1;
|
||||||
|
pictureBox.TabStop = false;
|
||||||
|
//
|
||||||
|
// menuStrip
|
||||||
|
//
|
||||||
|
menuStrip.Items.AddRange(new ToolStripItem[] { файлToolStripMenuItem });
|
||||||
|
menuStrip.Location = new Point(0, 0);
|
||||||
|
menuStrip.Name = "menuStrip";
|
||||||
|
menuStrip.Size = new Size(1211, 24);
|
||||||
|
menuStrip.TabIndex = 2;
|
||||||
|
menuStrip.Text = "menuStrip1";
|
||||||
|
//
|
||||||
|
// файлToolStripMenuItem
|
||||||
|
//
|
||||||
|
файлToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { saveToolStripMenuItem, loadToolStripMenuItem });
|
||||||
|
файлToolStripMenuItem.Name = "файлToolStripMenuItem";
|
||||||
|
файлToolStripMenuItem.Size = new Size(48, 20);
|
||||||
|
файлToolStripMenuItem.Text = "Файл";
|
||||||
|
//
|
||||||
|
// saveToolStripMenuItem
|
||||||
|
//
|
||||||
|
saveToolStripMenuItem.Name = "saveToolStripMenuItem";
|
||||||
|
saveToolStripMenuItem.ShortcutKeys = Keys.Control | Keys.S;
|
||||||
|
saveToolStripMenuItem.Size = new Size(184, 22);
|
||||||
|
saveToolStripMenuItem.Text = "Сохранение ";
|
||||||
|
saveToolStripMenuItem.Click += SaveToolStripMenuItem_Click;
|
||||||
|
//
|
||||||
|
// loadToolStripMenuItem
|
||||||
|
//
|
||||||
|
loadToolStripMenuItem.Name = "loadToolStripMenuItem";
|
||||||
|
loadToolStripMenuItem.ShortcutKeys = Keys.Control | Keys.L;
|
||||||
|
loadToolStripMenuItem.Size = new Size(184, 22);
|
||||||
|
loadToolStripMenuItem.Text = "Загрузка";
|
||||||
|
loadToolStripMenuItem.Click += LoadToolStripMenuItem_Click;
|
||||||
|
//
|
||||||
|
// saveFileDialog
|
||||||
|
//
|
||||||
|
saveFileDialog.Filter = "txt file | *.txt";
|
||||||
|
//
|
||||||
|
// openFileDialog
|
||||||
|
//
|
||||||
|
openFileDialog.Filter = "txt file | *.txt";
|
||||||
|
//
|
||||||
|
// FormLocomotiveCollection
|
||||||
|
//
|
||||||
|
AutoScaleDimensions = new SizeF(7F, 15F);
|
||||||
|
AutoScaleMode = AutoScaleMode.Font;
|
||||||
|
ClientSize = new Size(1211, 662);
|
||||||
|
Controls.Add(pictureBox);
|
||||||
|
Controls.Add(groupBoxTools);
|
||||||
|
Controls.Add(menuStrip);
|
||||||
|
MainMenuStrip = menuStrip;
|
||||||
|
Name = "FormLocomotiveCollection";
|
||||||
|
Text = "Коллекция локомотивов";
|
||||||
|
groupBoxTools.ResumeLayout(false);
|
||||||
|
panelCompanyTools.ResumeLayout(false);
|
||||||
|
panelCompanyTools.PerformLayout();
|
||||||
|
panelStorage.ResumeLayout(false);
|
||||||
|
panelStorage.PerformLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)pictureBox).EndInit();
|
||||||
|
menuStrip.ResumeLayout(false);
|
||||||
|
menuStrip.PerformLayout();
|
||||||
|
ResumeLayout(false);
|
||||||
|
PerformLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private GroupBox groupBoxTools;
|
||||||
|
private ComboBox comboBoxSelectorCompany;
|
||||||
|
private Button buttonRemoveMonorail;
|
||||||
|
private MaskedTextBox maskedTextBox;
|
||||||
|
private Button buttonAddMonorail;
|
||||||
|
private PictureBox pictureBox;
|
||||||
|
private Button buttonGoToCheck;
|
||||||
|
private Button buttonRefresh;
|
||||||
|
private Panel panelStorage;
|
||||||
|
private Label labelCollectionName;
|
||||||
|
private TextBox textBoxCollectionName;
|
||||||
|
private Button buttonCollectionAdd;
|
||||||
|
private RadioButton radioButtonList;
|
||||||
|
private RadioButton radioButtonMassive;
|
||||||
|
private Button buttonCollectionDelete;
|
||||||
|
private ListBox listBoxCollection;
|
||||||
|
private Button buttonCreateCompany;
|
||||||
|
private Panel panelCompanyTools;
|
||||||
|
private MenuStrip menuStrip;
|
||||||
|
private ToolStripMenuItem файлToolStripMenuItem;
|
||||||
|
private ToolStripMenuItem saveToolStripMenuItem;
|
||||||
|
private ToolStripMenuItem loadToolStripMenuItem;
|
||||||
|
private SaveFileDialog saveFileDialog;
|
||||||
|
private OpenFileDialog openFileDialog;
|
||||||
|
}
|
||||||
|
}
|
247
LocomativeProject/LocomativeProject/FormLocomotiveCollection.cs
Normal file
247
LocomativeProject/LocomativeProject/FormLocomotiveCollection.cs
Normal file
@ -0,0 +1,247 @@
|
|||||||
|
using LocomativeProject.Drawnings;
|
||||||
|
using LocomotiveProject.CollectionGenericObjects;
|
||||||
|
using LocomotiveProject.Drawnings;
|
||||||
|
namespace LocomotiveProject
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public partial class FormLocomotiveCollection : Form
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Хранилище коллекций
|
||||||
|
/// </summary>
|
||||||
|
private readonly StorageCollection<DrawningBaseLocomotive> _storageCollection;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Компания
|
||||||
|
/// </summary>
|
||||||
|
private AbstractCompany? _company = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Конструктор
|
||||||
|
/// </summary>
|
||||||
|
public FormLocomotiveCollection()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
_storageCollection = new StorageCollection<DrawningBaseLocomotive>();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void ComboBoxSelectorCompany_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
switch (comboBoxSelectorCompany.Text)
|
||||||
|
{
|
||||||
|
case "Хранилище":
|
||||||
|
_company = new LocomotiveSharingService(pictureBox.Width, pictureBox.Height, new MassiveGenericObjects<DrawningBaseLocomotive>());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ButtonAddLocomotive_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
FormLocomotiveConfig form = new FormLocomotiveConfig();
|
||||||
|
form.Show();
|
||||||
|
form.AddEventListener_Locomotive(SetLocomotive);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetLocomotive(DrawningBaseLocomotive Locomotive)
|
||||||
|
{
|
||||||
|
if (Locomotive == null || _company == null) return;
|
||||||
|
|
||||||
|
if (_company + Locomotive != -1)
|
||||||
|
{
|
||||||
|
MessageBox.Show("Объект добавлен");
|
||||||
|
pictureBox.Image = _company.Show();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MessageBox.Show("Не удалось добавить объект");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void buttonRemoveLocomotive_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(maskedTextBox.Text) || _company == null) return;
|
||||||
|
|
||||||
|
if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return;
|
||||||
|
|
||||||
|
int position = Convert.ToInt32(maskedTextBox.Text);
|
||||||
|
|
||||||
|
if (_company - position != null)
|
||||||
|
{
|
||||||
|
MessageBox.Show("Объект удален");
|
||||||
|
pictureBox.Image = _company.Show();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MessageBox.Show("Не удалось удалить объект");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ButtonGoToCheck_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (_company == null) return;
|
||||||
|
|
||||||
|
DrawningBaseLocomotive? Locomotive = null;
|
||||||
|
int coutner = 100;
|
||||||
|
|
||||||
|
while (Locomotive == null && coutner-- > 0)
|
||||||
|
{
|
||||||
|
Locomotive = _company.GetRandomObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Locomotive == null) return;
|
||||||
|
|
||||||
|
LocomotiveProjectForm form = new LocomotiveProjectForm()
|
||||||
|
{
|
||||||
|
SetLocomotive = Locomotive
|
||||||
|
};
|
||||||
|
form.ShowDialog();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ButtonRefresh_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (_company == null) return;
|
||||||
|
pictureBox.Image = _company.Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Обновление списка в listBoxCollection
|
||||||
|
/// </summary>
|
||||||
|
private void RerfreshListBoxItems()
|
||||||
|
{
|
||||||
|
listBoxCollection.Items.Clear();
|
||||||
|
for (int i = 0; i < _storageCollection.Keys?.Count; ++i)
|
||||||
|
{
|
||||||
|
string? colName = _storageCollection.Keys?[i];
|
||||||
|
if (!string.IsNullOrEmpty(colName))
|
||||||
|
{
|
||||||
|
listBoxCollection.Items.Add(colName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Добавление коллекции
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void ButtonCollectionAdd_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(textBoxCollectionName.Text) || (!radioButtonList.Checked && !radioButtonMassive.Checked))
|
||||||
|
{
|
||||||
|
MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
CollectionType collectionType = CollectionType.None;
|
||||||
|
if (radioButtonMassive.Checked)
|
||||||
|
{
|
||||||
|
collectionType = CollectionType.Massive;
|
||||||
|
}
|
||||||
|
else if (radioButtonList.Checked)
|
||||||
|
{
|
||||||
|
collectionType = CollectionType.List;
|
||||||
|
}
|
||||||
|
_storageCollection.AddCollection(textBoxCollectionName.Text,
|
||||||
|
collectionType);
|
||||||
|
RerfreshListBoxItems();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Удаление коллекции
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void ButtonCollectionDelete_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
// TODO прописать логику удаления элемента из коллекции
|
||||||
|
// нужно убедиться, что есть выбранная коллекция
|
||||||
|
// спросить у пользователя через MessageBox, что он подтверждает, что хочет удалить запись
|
||||||
|
// удалить и обновить ListBox
|
||||||
|
if (listBoxCollection.SelectedItem == null || listBoxCollection.SelectedIndex < 0)
|
||||||
|
{
|
||||||
|
MessageBox.Show("Коллекция для удаления не выбрана");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (MessageBox.Show("Удалить коллекцию?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return;
|
||||||
|
_storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString());
|
||||||
|
RerfreshListBoxItems();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Создание компании
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void ButtonCreateCompany_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItem == null)
|
||||||
|
{
|
||||||
|
MessageBox.Show("Коллекция не выбрана");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ICollectionGenericObjects<DrawningBaseLocomotive>? collection =
|
||||||
|
_storageCollection[listBoxCollection.SelectedItem.ToString() ?? string.Empty];
|
||||||
|
if (collection == null)
|
||||||
|
{
|
||||||
|
MessageBox.Show("Коллекция не проинициализирована");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
switch (comboBoxSelectorCompany.Text)
|
||||||
|
{
|
||||||
|
case "Хранилище":
|
||||||
|
_company = new LocomotiveSharingService(pictureBox.Width,
|
||||||
|
pictureBox.Height, (ICollectionGenericObjects<LocomativeProject.Drawnings.DrawningBaseLocomotive>)collection);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
panelCompanyTools.Enabled = true;
|
||||||
|
RerfreshListBoxItems();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Обработка нажатия "Сохранения"
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void SaveToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
||||||
|
{
|
||||||
|
if (_storageCollection.SaveData(saveFileDialog.FileName))
|
||||||
|
{
|
||||||
|
MessageBox.Show("Сохранение прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MessageBox.Show("Не сохранилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Обработка нажатия "Загрузки"
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void LoadToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (openFileDialog.ShowDialog() == DialogResult.OK)
|
||||||
|
{
|
||||||
|
if (_storageCollection.LoadData(openFileDialog.FileName))
|
||||||
|
{
|
||||||
|
MessageBox.Show("Загрузка прошла успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||||
|
RerfreshListBoxItems();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MessageBox.Show("Не загрузилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,129 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<metadata name="menuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>17, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="saveFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>126, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>261, 17</value>
|
||||||
|
</metadata>
|
||||||
|
</root>
|
353
LocomativeProject/LocomativeProject/FormLocomotiveConfig.Designer.cs
generated
Normal file
353
LocomativeProject/LocomativeProject/FormLocomotiveConfig.Designer.cs
generated
Normal file
@ -0,0 +1,353 @@
|
|||||||
|
namespace LocomotiveProject
|
||||||
|
{
|
||||||
|
partial class FormLocomotiveConfig
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
groupBoxConfig = new GroupBox();
|
||||||
|
groupBoxColors = new GroupBox();
|
||||||
|
panelPurple = new Panel();
|
||||||
|
panelYellow = new Panel();
|
||||||
|
panelBlack = new Panel();
|
||||||
|
panelBlue = new Panel();
|
||||||
|
panelGray = new Panel();
|
||||||
|
panelRed = new Panel();
|
||||||
|
panelGreen = new Panel();
|
||||||
|
panelWhite = new Panel();
|
||||||
|
checkBoxHelipad = new CheckBox();
|
||||||
|
checkBoxRocketMine = new CheckBox();
|
||||||
|
numericUpDownWeight = new NumericUpDown();
|
||||||
|
labelWeight = new Label();
|
||||||
|
numericUpDownSpeed = new NumericUpDown();
|
||||||
|
labelSpeed = new Label();
|
||||||
|
labelModifiedObject = new Label();
|
||||||
|
labelSimpleObject = new Label();
|
||||||
|
pictureBoxObject = new PictureBox();
|
||||||
|
buttonAdd = new Button();
|
||||||
|
buttonCancel = new Button();
|
||||||
|
panelObject = new Panel();
|
||||||
|
labelAdditionalColor = new Label();
|
||||||
|
labelBodyColor = new Label();
|
||||||
|
groupBoxConfig.SuspendLayout();
|
||||||
|
groupBoxColors.SuspendLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)numericUpDownWeight).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)numericUpDownSpeed).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)pictureBoxObject).BeginInit();
|
||||||
|
panelObject.SuspendLayout();
|
||||||
|
SuspendLayout();
|
||||||
|
//
|
||||||
|
// groupBoxConfig
|
||||||
|
//
|
||||||
|
groupBoxConfig.Controls.Add(groupBoxColors);
|
||||||
|
groupBoxConfig.Controls.Add(checkBoxHelipad);
|
||||||
|
groupBoxConfig.Controls.Add(checkBoxRocketMine);
|
||||||
|
groupBoxConfig.Controls.Add(numericUpDownWeight);
|
||||||
|
groupBoxConfig.Controls.Add(labelWeight);
|
||||||
|
groupBoxConfig.Controls.Add(numericUpDownSpeed);
|
||||||
|
groupBoxConfig.Controls.Add(labelSpeed);
|
||||||
|
groupBoxConfig.Controls.Add(labelModifiedObject);
|
||||||
|
groupBoxConfig.Controls.Add(labelSimpleObject);
|
||||||
|
groupBoxConfig.Dock = DockStyle.Left;
|
||||||
|
groupBoxConfig.Location = new Point(0, 0);
|
||||||
|
groupBoxConfig.Name = "groupBoxConfig";
|
||||||
|
groupBoxConfig.Size = new Size(581, 213);
|
||||||
|
groupBoxConfig.TabIndex = 0;
|
||||||
|
groupBoxConfig.TabStop = false;
|
||||||
|
groupBoxConfig.Text = "Параметры";
|
||||||
|
//
|
||||||
|
// groupBoxColors
|
||||||
|
//
|
||||||
|
groupBoxColors.Controls.Add(panelPurple);
|
||||||
|
groupBoxColors.Controls.Add(panelYellow);
|
||||||
|
groupBoxColors.Controls.Add(panelBlack);
|
||||||
|
groupBoxColors.Controls.Add(panelBlue);
|
||||||
|
groupBoxColors.Controls.Add(panelGray);
|
||||||
|
groupBoxColors.Controls.Add(panelRed);
|
||||||
|
groupBoxColors.Controls.Add(panelGreen);
|
||||||
|
groupBoxColors.Controls.Add(panelWhite);
|
||||||
|
groupBoxColors.Location = new Point(402, 44);
|
||||||
|
groupBoxColors.Name = "groupBoxColors";
|
||||||
|
groupBoxColors.Size = new Size(142, 109);
|
||||||
|
groupBoxColors.TabIndex = 8;
|
||||||
|
groupBoxColors.TabStop = false;
|
||||||
|
groupBoxColors.Text = "Цвета";
|
||||||
|
//
|
||||||
|
// panelPurple
|
||||||
|
//
|
||||||
|
panelPurple.BackColor = Color.Purple;
|
||||||
|
panelPurple.Location = new Point(102, 67);
|
||||||
|
panelPurple.Name = "panelPurple";
|
||||||
|
panelPurple.Size = new Size(26, 27);
|
||||||
|
panelPurple.TabIndex = 1;
|
||||||
|
//
|
||||||
|
// panelYellow
|
||||||
|
//
|
||||||
|
panelYellow.BackColor = Color.Yellow;
|
||||||
|
panelYellow.Location = new Point(102, 22);
|
||||||
|
panelYellow.Name = "panelYellow";
|
||||||
|
panelYellow.Size = new Size(26, 27);
|
||||||
|
panelYellow.TabIndex = 1;
|
||||||
|
//
|
||||||
|
// panelBlack
|
||||||
|
//
|
||||||
|
panelBlack.BackColor = Color.Black;
|
||||||
|
panelBlack.Location = new Point(70, 67);
|
||||||
|
panelBlack.Name = "panelBlack";
|
||||||
|
panelBlack.Size = new Size(26, 27);
|
||||||
|
panelBlack.TabIndex = 1;
|
||||||
|
//
|
||||||
|
// panelBlue
|
||||||
|
//
|
||||||
|
panelBlue.BackColor = Color.Blue;
|
||||||
|
panelBlue.Location = new Point(70, 22);
|
||||||
|
panelBlue.Name = "panelBlue";
|
||||||
|
panelBlue.Size = new Size(26, 27);
|
||||||
|
panelBlue.TabIndex = 1;
|
||||||
|
//
|
||||||
|
// panelGray
|
||||||
|
//
|
||||||
|
panelGray.BackColor = Color.Gray;
|
||||||
|
panelGray.Location = new Point(38, 67);
|
||||||
|
panelGray.Name = "panelGray";
|
||||||
|
panelGray.Size = new Size(26, 27);
|
||||||
|
panelGray.TabIndex = 1;
|
||||||
|
//
|
||||||
|
// panelRed
|
||||||
|
//
|
||||||
|
panelRed.BackColor = Color.Red;
|
||||||
|
panelRed.Location = new Point(6, 22);
|
||||||
|
panelRed.Name = "panelRed";
|
||||||
|
panelRed.Size = new Size(26, 27);
|
||||||
|
panelRed.TabIndex = 1;
|
||||||
|
//
|
||||||
|
// panelGreen
|
||||||
|
//
|
||||||
|
panelGreen.BackColor = Color.Green;
|
||||||
|
panelGreen.Location = new Point(38, 22);
|
||||||
|
panelGreen.Name = "panelGreen";
|
||||||
|
panelGreen.Size = new Size(26, 27);
|
||||||
|
panelGreen.TabIndex = 1;
|
||||||
|
//
|
||||||
|
// panelWhite
|
||||||
|
//
|
||||||
|
panelWhite.BackColor = Color.White;
|
||||||
|
panelWhite.Location = new Point(6, 67);
|
||||||
|
panelWhite.Name = "panelWhite";
|
||||||
|
panelWhite.Size = new Size(26, 27);
|
||||||
|
panelWhite.TabIndex = 0;
|
||||||
|
//
|
||||||
|
// checkBoxHelipad
|
||||||
|
//
|
||||||
|
checkBoxHelipad.AutoSize = true;
|
||||||
|
checkBoxHelipad.Location = new Point(6, 119);
|
||||||
|
checkBoxHelipad.Name = "checkBoxHelipad";
|
||||||
|
checkBoxHelipad.Size = new Size(256, 19);
|
||||||
|
checkBoxHelipad.TabIndex = 7;
|
||||||
|
checkBoxHelipad.Text = "Признак наличие вертолетной площадки";
|
||||||
|
checkBoxHelipad.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// checkBoxRocketMine
|
||||||
|
//
|
||||||
|
checkBoxRocketMine.AutoSize = true;
|
||||||
|
checkBoxRocketMine.Location = new Point(6, 94);
|
||||||
|
checkBoxRocketMine.Name = "checkBoxRocketMine";
|
||||||
|
checkBoxRocketMine.Size = new Size(217, 19);
|
||||||
|
checkBoxRocketMine.TabIndex = 6;
|
||||||
|
checkBoxRocketMine.Text = "Признак наличие ракетной шахты";
|
||||||
|
checkBoxRocketMine.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// numericUpDownWeight
|
||||||
|
//
|
||||||
|
numericUpDownWeight.Location = new Point(76, 55);
|
||||||
|
numericUpDownWeight.Name = "numericUpDownWeight";
|
||||||
|
numericUpDownWeight.Size = new Size(97, 23);
|
||||||
|
numericUpDownWeight.TabIndex = 5;
|
||||||
|
numericUpDownWeight.Value = new decimal(new int[] { 100, 0, 0, 0 });
|
||||||
|
//
|
||||||
|
// labelWeight
|
||||||
|
//
|
||||||
|
labelWeight.AutoSize = true;
|
||||||
|
labelWeight.Location = new Point(27, 57);
|
||||||
|
labelWeight.Name = "labelWeight";
|
||||||
|
labelWeight.Size = new Size(26, 15);
|
||||||
|
labelWeight.TabIndex = 4;
|
||||||
|
labelWeight.Text = "Вес";
|
||||||
|
//
|
||||||
|
// numericUpDownSpeed
|
||||||
|
//
|
||||||
|
numericUpDownSpeed.Location = new Point(76, 22);
|
||||||
|
numericUpDownSpeed.Name = "numericUpDownSpeed";
|
||||||
|
numericUpDownSpeed.Size = new Size(97, 23);
|
||||||
|
numericUpDownSpeed.TabIndex = 3;
|
||||||
|
numericUpDownSpeed.Value = new decimal(new int[] { 100, 0, 0, 0 });
|
||||||
|
//
|
||||||
|
// labelSpeed
|
||||||
|
//
|
||||||
|
labelSpeed.AutoSize = true;
|
||||||
|
labelSpeed.Location = new Point(11, 24);
|
||||||
|
labelSpeed.Name = "labelSpeed";
|
||||||
|
labelSpeed.Size = new Size(59, 15);
|
||||||
|
labelSpeed.TabIndex = 2;
|
||||||
|
labelSpeed.Text = "Скорость";
|
||||||
|
//
|
||||||
|
// labelModifiedObject
|
||||||
|
//
|
||||||
|
labelModifiedObject.BorderStyle = BorderStyle.FixedSingle;
|
||||||
|
labelModifiedObject.Location = new Point(475, 181);
|
||||||
|
labelModifiedObject.Name = "labelModifiedObject";
|
||||||
|
labelModifiedObject.Size = new Size(100, 23);
|
||||||
|
labelModifiedObject.TabIndex = 1;
|
||||||
|
labelModifiedObject.Text = "Продвинутый";
|
||||||
|
labelModifiedObject.TextAlign = ContentAlignment.MiddleCenter;
|
||||||
|
labelModifiedObject.MouseDown += LabelObject_MouseDown;
|
||||||
|
//
|
||||||
|
// labelSimpleObject
|
||||||
|
//
|
||||||
|
labelSimpleObject.BorderStyle = BorderStyle.FixedSingle;
|
||||||
|
labelSimpleObject.Location = new Point(369, 181);
|
||||||
|
labelSimpleObject.Name = "labelSimpleObject";
|
||||||
|
labelSimpleObject.Size = new Size(100, 23);
|
||||||
|
labelSimpleObject.TabIndex = 0;
|
||||||
|
labelSimpleObject.Text = "Обычный";
|
||||||
|
labelSimpleObject.TextAlign = ContentAlignment.MiddleCenter;
|
||||||
|
labelSimpleObject.MouseDown += LabelObject_MouseDown;
|
||||||
|
//
|
||||||
|
// pictureBoxObject
|
||||||
|
//
|
||||||
|
pictureBoxObject.Location = new Point(3, 33);
|
||||||
|
pictureBoxObject.Name = "pictureBoxObject";
|
||||||
|
pictureBoxObject.Size = new Size(198, 125);
|
||||||
|
pictureBoxObject.TabIndex = 1;
|
||||||
|
pictureBoxObject.TabStop = false;
|
||||||
|
//
|
||||||
|
// buttonAdd
|
||||||
|
//
|
||||||
|
buttonAdd.Location = new Point(604, 178);
|
||||||
|
buttonAdd.Name = "buttonAdd";
|
||||||
|
buttonAdd.Size = new Size(75, 23);
|
||||||
|
buttonAdd.TabIndex = 2;
|
||||||
|
buttonAdd.Text = "Добавить";
|
||||||
|
buttonAdd.UseVisualStyleBackColor = true;
|
||||||
|
buttonAdd.Click += ButtonAdd_Click;
|
||||||
|
//
|
||||||
|
// buttonCancel
|
||||||
|
//
|
||||||
|
buttonCancel.Location = new Point(713, 178);
|
||||||
|
buttonCancel.Name = "buttonCancel";
|
||||||
|
buttonCancel.Size = new Size(75, 23);
|
||||||
|
buttonCancel.TabIndex = 3;
|
||||||
|
buttonCancel.Text = "Отменить";
|
||||||
|
buttonCancel.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// panelObject
|
||||||
|
//
|
||||||
|
panelObject.AllowDrop = true;
|
||||||
|
panelObject.Controls.Add(labelAdditionalColor);
|
||||||
|
panelObject.Controls.Add(labelBodyColor);
|
||||||
|
panelObject.Controls.Add(pictureBoxObject);
|
||||||
|
panelObject.Location = new Point(587, 11);
|
||||||
|
panelObject.Name = "panelObject";
|
||||||
|
panelObject.Size = new Size(205, 161);
|
||||||
|
panelObject.TabIndex = 4;
|
||||||
|
panelObject.DragDrop += PanelObject_DragDrop;
|
||||||
|
panelObject.DragEnter += PanelObject_DragEnter;
|
||||||
|
//
|
||||||
|
// labelAdditionalColor
|
||||||
|
//
|
||||||
|
labelAdditionalColor.AllowDrop = true;
|
||||||
|
labelAdditionalColor.BorderStyle = BorderStyle.FixedSingle;
|
||||||
|
labelAdditionalColor.Location = new Point(133, 5);
|
||||||
|
labelAdditionalColor.Name = "labelAdditionalColor";
|
||||||
|
labelAdditionalColor.Size = new Size(69, 23);
|
||||||
|
labelAdditionalColor.TabIndex = 3;
|
||||||
|
labelAdditionalColor.Text = "Доп.Цвет";
|
||||||
|
labelAdditionalColor.TextAlign = ContentAlignment.MiddleCenter;
|
||||||
|
labelAdditionalColor.DragDrop += LabelAdditionalColor_DragDrop;
|
||||||
|
labelAdditionalColor.DragEnter += LabelAdditionalColor_DragEnter;
|
||||||
|
//
|
||||||
|
// labelBodyColor
|
||||||
|
//
|
||||||
|
labelBodyColor.AllowDrop = true;
|
||||||
|
labelBodyColor.BorderStyle = BorderStyle.FixedSingle;
|
||||||
|
labelBodyColor.Location = new Point(3, 5);
|
||||||
|
labelBodyColor.Name = "labelBodyColor";
|
||||||
|
labelBodyColor.Size = new Size(69, 23);
|
||||||
|
labelBodyColor.TabIndex = 2;
|
||||||
|
labelBodyColor.Text = "Цвет";
|
||||||
|
labelBodyColor.TextAlign = ContentAlignment.MiddleCenter;
|
||||||
|
labelBodyColor.DragDrop += LabelBodyColor_DragDrop;
|
||||||
|
labelBodyColor.DragEnter += LabelBodyColor_DragEnter;
|
||||||
|
//
|
||||||
|
// FormLocomotiveConfig
|
||||||
|
//
|
||||||
|
AutoScaleDimensions = new SizeF(7F, 15F);
|
||||||
|
AutoScaleMode = AutoScaleMode.Font;
|
||||||
|
ClientSize = new Size(800, 213);
|
||||||
|
Controls.Add(panelObject);
|
||||||
|
Controls.Add(buttonCancel);
|
||||||
|
Controls.Add(buttonAdd);
|
||||||
|
Controls.Add(groupBoxConfig);
|
||||||
|
Name = "FormLocomotiveConfig";
|
||||||
|
Text = "Создание объекта";
|
||||||
|
groupBoxConfig.ResumeLayout(false);
|
||||||
|
groupBoxConfig.PerformLayout();
|
||||||
|
groupBoxColors.ResumeLayout(false);
|
||||||
|
((System.ComponentModel.ISupportInitialize)numericUpDownWeight).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)numericUpDownSpeed).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)pictureBoxObject).EndInit();
|
||||||
|
panelObject.ResumeLayout(false);
|
||||||
|
ResumeLayout(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private GroupBox groupBoxConfig;
|
||||||
|
private Label labelModifiedObject;
|
||||||
|
private Label labelSimpleObject;
|
||||||
|
private CheckBox checkBoxRocketMine;
|
||||||
|
private NumericUpDown numericUpDownWeight;
|
||||||
|
private Label labelWeight;
|
||||||
|
private NumericUpDown numericUpDownSpeed;
|
||||||
|
private Label labelSpeed;
|
||||||
|
private CheckBox checkBoxHelipad;
|
||||||
|
private GroupBox groupBoxColors;
|
||||||
|
private Panel panelPurple;
|
||||||
|
private Panel panelYellow;
|
||||||
|
private Panel panelBlack;
|
||||||
|
private Panel panelBlue;
|
||||||
|
private Panel panelGray;
|
||||||
|
private Panel panelRed;
|
||||||
|
private Panel panelGreen;
|
||||||
|
private Panel panelWhite;
|
||||||
|
private PictureBox pictureBoxObject;
|
||||||
|
private Button buttonAdd;
|
||||||
|
private Button buttonCancel;
|
||||||
|
private Panel panelObject;
|
||||||
|
private Label labelAdditionalColor;
|
||||||
|
private Label labelBodyColor;
|
||||||
|
}
|
||||||
|
}
|
178
LocomativeProject/LocomativeProject/FormLocomotiveConfig.cs
Normal file
178
LocomativeProject/LocomativeProject/FormLocomotiveConfig.cs
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
using LocomativeProject.Drawnings;
|
||||||
|
using LocomotiveProject.Drawnings;
|
||||||
|
using LocomotiveProject.Entities;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Data;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace LocomotiveProject;
|
||||||
|
/// <summary>
|
||||||
|
/// Форма конфигурации объекта
|
||||||
|
/// </summary>
|
||||||
|
public partial class FormLocomotiveConfig : Form
|
||||||
|
{
|
||||||
|
#region Events & Delegates
|
||||||
|
private event Action<DrawningBaseLocomotive> OnSendEvent_Locomotive;
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// объект - прорисовка локомотива
|
||||||
|
/// </summary>
|
||||||
|
private DrawningBaseLocomotive? _BaseLocomotive;
|
||||||
|
/// <summary>
|
||||||
|
/// событе для передачи объекта
|
||||||
|
/// </summary>
|
||||||
|
public event LocomotiveDelegate? _LocomotiveDelegate;
|
||||||
|
/// <summary>
|
||||||
|
/// Конструктор
|
||||||
|
/// </summary>
|
||||||
|
public FormLocomotiveConfig()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
panelRed.MouseDown += Panel_MouseDown;
|
||||||
|
panelGreen.MouseDown += Panel_MouseDown;
|
||||||
|
panelBlue.MouseDown += Panel_MouseDown;
|
||||||
|
panelYellow.MouseDown += Panel_MouseDown;
|
||||||
|
panelGray.MouseDown += Panel_MouseDown;
|
||||||
|
panelBlack.MouseDown += Panel_MouseDown;
|
||||||
|
panelPurple.MouseDown += Panel_MouseDown;
|
||||||
|
panelWhite.MouseDown += Panel_MouseDown;
|
||||||
|
buttonCancel.Click += (sender, e) => Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddEventListener_Locomotive(Action<DrawningBaseLocomotive> method)
|
||||||
|
{
|
||||||
|
OnSendEvent_Locomotive += method;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// привязка метода к событию
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="LocomotiveDelegate"></param>
|
||||||
|
public void AddEvent(LocomotiveDelegate LocomotiveDelegate)
|
||||||
|
{
|
||||||
|
_LocomotiveDelegate += LocomotiveDelegate;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Прорисовка обьекта
|
||||||
|
/// </summary>
|
||||||
|
public void DrawObject()
|
||||||
|
{
|
||||||
|
Bitmap bmp = new(pictureBoxObject.Width, pictureBoxObject.Height);
|
||||||
|
Graphics g = Graphics.FromImage(bmp);
|
||||||
|
_BaseLocomotive?.SetPictureSize(pictureBoxObject.Width, pictureBoxObject.Height);
|
||||||
|
_BaseLocomotive?.SetPosition(5, 5);
|
||||||
|
_BaseLocomotive?.DrawTransport(g);
|
||||||
|
pictureBoxObject.Image = bmp;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Передаем информацию при нажатии на Label
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void LabelObject_MouseDown(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
(sender as Label)?.DoDragDrop((sender as Label)?.Name ?? string.Empty, DragDropEffects.Move | DragDropEffects.Copy);
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Действия при приеме перетаскиваемой информации
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void PanelObject_DragEnter(object sender, DragEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.Data?.GetDataPresent(DataFormats.Text) ?? false)
|
||||||
|
{
|
||||||
|
e.Effect = DragDropEffects.Copy;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
e.Effect = DragDropEffects.None;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Проверка получаемой информации (ее типо на соответсие требуемому)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void PanelObject_DragDrop(object? sender, DragEventArgs e)
|
||||||
|
{
|
||||||
|
switch (e.Data?.GetData(DataFormats.Text).ToString())
|
||||||
|
{
|
||||||
|
case "labelSimpleObject":
|
||||||
|
_BaseLocomotive = new DrawningBaseLocomotive((int)numericUpDownSpeed.Value, (double)numericUpDownWeight.Value, Color.White);
|
||||||
|
break;
|
||||||
|
case "labelModifiedObject":
|
||||||
|
_BaseLocomotive = new DrawningLocomotive((int)numericUpDownSpeed.Value, (double)numericUpDownWeight.Value, Color.White, Color.Black,
|
||||||
|
checkBoxRocketMine.Checked, checkBoxHelipad.Checked);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
DrawObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Panel_MouseDown(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
(sender as Control).DoDragDrop((sender as Control).BackColor, DragDropEffects.Move | DragDropEffects.Copy);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LabelBodyColor_DragDrop(object sender, DragEventArgs e)
|
||||||
|
{
|
||||||
|
if (_BaseLocomotive != null)
|
||||||
|
{
|
||||||
|
_BaseLocomotive._EntityBaseLocomotive.setBodyColor((Color)e.Data.GetData(typeof(Color)));
|
||||||
|
DrawObject();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LabelBodyColor_DragEnter(object sender, DragEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.Data.GetDataPresent(typeof(Color)))
|
||||||
|
{
|
||||||
|
e.Effect = DragDropEffects.Copy;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
e.Effect = DragDropEffects.None;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LabelAdditionalColor_DragDrop(object sender, DragEventArgs e)
|
||||||
|
{
|
||||||
|
if (_BaseLocomotive._EntityBaseLocomotive is EntityLocomotive entityLocomotive)
|
||||||
|
{
|
||||||
|
entityLocomotive.setAdditionalColor((Color)e.Data.GetData(typeof(Color)));
|
||||||
|
}
|
||||||
|
DrawObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LabelAdditionalColor_DragEnter(object sender, DragEventArgs e)
|
||||||
|
{
|
||||||
|
if (_BaseLocomotive is DrawningBaseLocomotive)
|
||||||
|
{
|
||||||
|
if (e.Data.GetDataPresent(typeof(Color)))
|
||||||
|
{
|
||||||
|
e.Effect = DragDropEffects.Copy;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
e.Effect = DragDropEffects.None;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Передача объекта
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void ButtonAdd_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (_BaseLocomotive != null) OnSendEvent_Locomotive?.Invoke(_BaseLocomotive);
|
||||||
|
Close();
|
||||||
|
}
|
||||||
|
}
|
120
LocomativeProject/LocomativeProject/FormLocomotiveConfig.resx
Normal file
120
LocomativeProject/LocomativeProject/FormLocomotiveConfig.resx
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
@ -1,11 +0,0 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<OutputType>WinExe</OutputType>
|
|
||||||
<TargetFramework>net6.0-windows</TargetFramework>
|
|
||||||
<Nullable>enable</Nullable>
|
|
||||||
<UseWindowsForms>true</UseWindowsForms>
|
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
</Project>
|
|
13
LocomativeProject/LocomativeProject/LocomotiveDelegate.cs
Normal file
13
LocomativeProject/LocomativeProject/LocomotiveDelegate.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using LocomativeProject.Drawnings;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace LocomotiveProject;
|
||||||
|
/// <summary>
|
||||||
|
/// Делегат передачи объекта класса-прорисовки
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="Locomotive"></param>
|
||||||
|
public delegate void LocomotiveDelegate(DrawningBaseLocomotive Locomotive);
|
26
LocomativeProject/LocomativeProject/LocomotiveProject.csproj
Normal file
26
LocomativeProject/LocomativeProject/LocomotiveProject.csproj
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<TargetFramework>net8.0-windows7.0</TargetFramework>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<UseWindowsForms>true</UseWindowsForms>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Update="Properties\Resources.Designer.cs">
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Update="Properties\Resources.resx">
|
||||||
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||||
|
</EmbeddedResource>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
160
LocomativeProject/LocomativeProject/LocomotiveProjectForm.Designer.cs
generated
Normal file
160
LocomativeProject/LocomativeProject/LocomotiveProjectForm.Designer.cs
generated
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
namespace LocomotiveProject
|
||||||
|
{
|
||||||
|
partial class LocomotiveProjectForm
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LocomotiveProjectForm));
|
||||||
|
pictureBox1 = new PictureBox();
|
||||||
|
pictureBoxLocomotive = new PictureBox();
|
||||||
|
buttonUp = new Button();
|
||||||
|
buttonDown = new Button();
|
||||||
|
buttonLeft = new Button();
|
||||||
|
buttonRight = new Button();
|
||||||
|
comboBox1 = new ComboBox();
|
||||||
|
buttonStrategyStep = new Button();
|
||||||
|
((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)pictureBoxLocomotive).BeginInit();
|
||||||
|
SuspendLayout();
|
||||||
|
//
|
||||||
|
// pictureBox1
|
||||||
|
//
|
||||||
|
pictureBox1.Location = new Point(0, 0);
|
||||||
|
pictureBox1.Name = "pictureBox1";
|
||||||
|
pictureBox1.Size = new Size(100, 50);
|
||||||
|
pictureBox1.TabIndex = 0;
|
||||||
|
pictureBox1.TabStop = false;
|
||||||
|
//
|
||||||
|
// pictureBoxLocomotive
|
||||||
|
//
|
||||||
|
pictureBoxLocomotive.Dock = DockStyle.Fill;
|
||||||
|
pictureBoxLocomotive.Location = new Point(0, 0);
|
||||||
|
pictureBoxLocomotive.Name = "pictureBoxLocomotive";
|
||||||
|
pictureBoxLocomotive.Size = new Size(880, 561);
|
||||||
|
pictureBoxLocomotive.TabIndex = 1;
|
||||||
|
pictureBoxLocomotive.TabStop = false;
|
||||||
|
//
|
||||||
|
// buttonUp
|
||||||
|
//
|
||||||
|
buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||||
|
buttonUp.BackgroundImage = (Image)resources.GetObject("buttonUp.BackgroundImage");
|
||||||
|
buttonUp.BackgroundImageLayout = ImageLayout.Stretch;
|
||||||
|
buttonUp.Location = new Point(771, 473);
|
||||||
|
buttonUp.Name = "buttonUp";
|
||||||
|
buttonUp.Size = new Size(35, 35);
|
||||||
|
buttonUp.TabIndex = 3;
|
||||||
|
buttonUp.UseVisualStyleBackColor = true;
|
||||||
|
buttonUp.Click += ButtonMove_Click;
|
||||||
|
//
|
||||||
|
// buttonDown
|
||||||
|
//
|
||||||
|
buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||||
|
buttonDown.BackgroundImage = (Image)resources.GetObject("buttonDown.BackgroundImage");
|
||||||
|
buttonDown.BackgroundImageLayout = ImageLayout.Stretch;
|
||||||
|
buttonDown.Location = new Point(771, 514);
|
||||||
|
buttonDown.Name = "buttonDown";
|
||||||
|
buttonDown.Size = new Size(35, 35);
|
||||||
|
buttonDown.TabIndex = 4;
|
||||||
|
buttonDown.UseVisualStyleBackColor = true;
|
||||||
|
buttonDown.Click += ButtonMove_Click;
|
||||||
|
//
|
||||||
|
// buttonLeft
|
||||||
|
//
|
||||||
|
buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||||
|
buttonLeft.BackgroundImage = (Image)resources.GetObject("buttonLeft.BackgroundImage");
|
||||||
|
buttonLeft.BackgroundImageLayout = ImageLayout.Stretch;
|
||||||
|
buttonLeft.Location = new Point(730, 514);
|
||||||
|
buttonLeft.Name = "buttonLeft";
|
||||||
|
buttonLeft.Size = new Size(35, 35);
|
||||||
|
buttonLeft.TabIndex = 5;
|
||||||
|
buttonLeft.UseVisualStyleBackColor = true;
|
||||||
|
buttonLeft.Click += ButtonMove_Click;
|
||||||
|
//
|
||||||
|
// buttonRight
|
||||||
|
//
|
||||||
|
buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||||
|
buttonRight.BackgroundImage = (Image)resources.GetObject("buttonRight.BackgroundImage");
|
||||||
|
buttonRight.BackgroundImageLayout = ImageLayout.Stretch;
|
||||||
|
buttonRight.Location = new Point(812, 514);
|
||||||
|
buttonRight.Name = "buttonRight";
|
||||||
|
buttonRight.Size = new Size(35, 35);
|
||||||
|
buttonRight.TabIndex = 6;
|
||||||
|
buttonRight.UseVisualStyleBackColor = true;
|
||||||
|
buttonRight.Click += ButtonMove_Click;
|
||||||
|
//
|
||||||
|
// comboBox1
|
||||||
|
//
|
||||||
|
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||||
|
comboBox1.FormattingEnabled = true;
|
||||||
|
comboBox1.Items.AddRange(new object[] { "К центру", "К краю" });
|
||||||
|
comboBox1.Location = new Point(667, 12);
|
||||||
|
comboBox1.Name = "comboBox1";
|
||||||
|
comboBox1.Size = new Size(121, 23);
|
||||||
|
comboBox1.TabIndex = 8;
|
||||||
|
//
|
||||||
|
// buttonStrategyStep
|
||||||
|
//
|
||||||
|
buttonStrategyStep.Location = new Point(713, 41);
|
||||||
|
buttonStrategyStep.Name = "buttonStrategyStep";
|
||||||
|
buttonStrategyStep.Size = new Size(75, 23);
|
||||||
|
buttonStrategyStep.TabIndex = 9;
|
||||||
|
buttonStrategyStep.Text = "Шаг";
|
||||||
|
buttonStrategyStep.UseVisualStyleBackColor = true;
|
||||||
|
buttonStrategyStep.Click += buttonStrategyStep_Click;
|
||||||
|
//
|
||||||
|
// LocomotiveProject
|
||||||
|
//
|
||||||
|
AutoScaleDimensions = new SizeF(7F, 15F);
|
||||||
|
AutoScaleMode = AutoScaleMode.Font;
|
||||||
|
ClientSize = new Size(880, 561);
|
||||||
|
Controls.Add(buttonStrategyStep);
|
||||||
|
Controls.Add(comboBox1);
|
||||||
|
Controls.Add(buttonRight);
|
||||||
|
Controls.Add(buttonLeft);
|
||||||
|
Controls.Add(buttonDown);
|
||||||
|
Controls.Add(buttonUp);
|
||||||
|
Controls.Add(pictureBoxLocomotive);
|
||||||
|
Controls.Add(pictureBox1);
|
||||||
|
Name = "LocomotiveProject";
|
||||||
|
Text = "Тепловоз";
|
||||||
|
((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)pictureBoxLocomotive).EndInit();
|
||||||
|
ResumeLayout(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private PictureBox pictureBox1;
|
||||||
|
private PictureBox pictureBoxLocomotive;
|
||||||
|
private Button buttonUp;
|
||||||
|
private Button buttonDown;
|
||||||
|
private Button buttonLeft;
|
||||||
|
private Button buttonRight;
|
||||||
|
private ComboBox comboBox1;
|
||||||
|
private Button buttonStrategyStep;
|
||||||
|
}
|
||||||
|
}
|
172
LocomativeProject/LocomativeProject/LocomotiveProjectForm.cs
Normal file
172
LocomativeProject/LocomativeProject/LocomotiveProjectForm.cs
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
using LocomotiveProject;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Data;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using LocomotiveProject.Entities;
|
||||||
|
using LocomotiveProject.Drawnings;
|
||||||
|
using LocomativeProject.Drawnings;
|
||||||
|
using LocomativeProject.MovementStrategy;
|
||||||
|
|
||||||
|
namespace LocomotiveProject
|
||||||
|
{
|
||||||
|
public partial class LocomotiveProjectForm : Form
|
||||||
|
{
|
||||||
|
private DrawningBaseLocomotive? _drawningLocomotive;
|
||||||
|
|
||||||
|
private AbstractStrategy? _strategy;
|
||||||
|
|
||||||
|
public DrawningBaseLocomotive SetLocomotive
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_drawningLocomotive = value;
|
||||||
|
_drawningLocomotive.SetPictureSize(pictureBox1.Width, pictureBox1.Height);
|
||||||
|
comboBox1.Enabled = true;
|
||||||
|
_strategy = null;
|
||||||
|
Draw();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocomotiveProjectForm()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
_strategy = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Draw()
|
||||||
|
{
|
||||||
|
if (_drawningLocomotive == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Bitmap bmp = new(pictureBoxLocomotive.Width, pictureBoxLocomotive.Height);
|
||||||
|
Graphics gr = Graphics.FromImage(bmp);
|
||||||
|
_drawningLocomotive.DrawTransport(gr);
|
||||||
|
pictureBoxLocomotive.Image = bmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Создание объекта класса-перемещения
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="type">Тип создаваемого объекта</param>
|
||||||
|
private void CreateObject(string type)
|
||||||
|
{
|
||||||
|
Random random = new();
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case nameof(DrawningBaseLocomotive):
|
||||||
|
_drawningLocomotive = new DrawningBaseLocomotive(random.Next(100, 300), random.Next(1000, 3000),
|
||||||
|
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)));
|
||||||
|
break;
|
||||||
|
case nameof(DrawningLocomotive):
|
||||||
|
_drawningLocomotive = new DrawningLocomotive(random.Next(100, 300), random.Next(1000, 3000),
|
||||||
|
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)),
|
||||||
|
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)),
|
||||||
|
Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_drawningLocomotive.SetPictureSize(pictureBoxLocomotive.Width, pictureBoxLocomotive.Height);
|
||||||
|
_drawningLocomotive.SetPosition(random.Next(10, 100), random.Next(10, 100));
|
||||||
|
_strategy = null;
|
||||||
|
comboBox1.Enabled = true;
|
||||||
|
Draw();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Обработка нажатия кнопки "Создать базовый поезд"
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void ButtonCreateBaseLocomotive_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningBaseLocomotive));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Обработка нажатия кнопки "Создать продвинутый поезд"
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void ButtonCreateLocomotive_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningLocomotive));
|
||||||
|
|
||||||
|
|
||||||
|
private void ButtonMove_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (_drawningLocomotive == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
string name = ((Button)sender)?.Name ?? string.Empty;
|
||||||
|
bool result = false;
|
||||||
|
switch (name)
|
||||||
|
{
|
||||||
|
case "buttonUp":
|
||||||
|
result = _drawningLocomotive.MoveTransport(DirectionType.Up);
|
||||||
|
break;
|
||||||
|
case "buttonDown":
|
||||||
|
result = _drawningLocomotive.MoveTransport(DirectionType.Down);
|
||||||
|
break;
|
||||||
|
case "buttonLeft":
|
||||||
|
result = _drawningLocomotive.MoveTransport(DirectionType.Left);
|
||||||
|
break;
|
||||||
|
case "buttonRight":
|
||||||
|
result = _drawningLocomotive.MoveTransport(DirectionType.Right);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
Draw();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void buttonStrategyStep_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (_drawningLocomotive == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (comboBox1.Enabled)
|
||||||
|
{
|
||||||
|
_strategy = comboBox1.SelectedIndex switch
|
||||||
|
{
|
||||||
|
0 => new MoveToCenter(),
|
||||||
|
1 => new MoveToBorder(),
|
||||||
|
_ => null,
|
||||||
|
};
|
||||||
|
if (_strategy == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_strategy.SetData(new MoveableLocomotive(_drawningLocomotive), pictureBoxLocomotive.Width, pictureBoxLocomotive.Height);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_strategy == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
comboBox1.Enabled = false;
|
||||||
|
_strategy.MakeStep();
|
||||||
|
Draw();
|
||||||
|
|
||||||
|
if (_strategy.GetStatus() == StrategyStatus.Finish)
|
||||||
|
{
|
||||||
|
comboBox1.Enabled = true;
|
||||||
|
_strategy = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
649
LocomativeProject/LocomativeProject/LocomotiveProjectForm.resx
Normal file
649
LocomativeProject/LocomativeProject/LocomotiveProjectForm.resx
Normal file
@ -0,0 +1,649 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
<data name="buttonUp.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
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
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<data name="buttonDown.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
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
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<data name="buttonLeft.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
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
|
||||||
|
AABJRU5ErkJggg==
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<data name="buttonRight.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
||||||
|
vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAABq4SURBVHhe7d1X
|
||||||
|
0F1lvcfxAOMMioCAQbBhL9jBgqKCXcCC0WgsGFSMElIgBEgU4+g4OuOV114w44W3inKBBSxYsEdFRQWj
|
||||||
|
YAkaFYMFQcjyeZKlIcmTt+z3v/deaz2fz8z3cI5Jdlkvx/9vHI9nUQMAVMcAAIAKGQAAUCEDAAAqZAAA
|
||||||
|
QIUMAACokAEAABUyAACgQgYAAFTIAACAChkAAFAhAwAAKmQAAECFDAAAqJABAAAVMgAAoEIGAABUyAAA
|
||||||
|
gAoZAABQIQMAACpkAABAhQwAAKiQAQAAFTIAAKBCBgAAVMgAAIAKGQAAUCEDAAAqZAAAQIUMAACokAEA
|
||||||
|
ABUyAACgQgYAMDHbtm1rPvWpTzXnn39+c/bZZzerV69uNm7c2Fx++eXNHXfc0f4uYBIMAGDsbrzxxub0
|
||||||
|
009vDjjggGbRokXFjjjiiGbFihXN1q1b2z8FjJMBAIzN3Xff3XzgAx9oDj744OLRL7V48eLmyiuvbF8B
|
||||||
|
GBcDABiblStXFo/8bOV/pWDTpk3tqwDjYAAAY/HBD36weNzn0yWXXNK+GhDNAADCbd68uXjQR+niiy9u
|
||||||
|
XxWIZAAA4ZYtW1Y85qN20UUXta8MRDEAgFBbtmxpDjrooOIhX0jr169v3wGIYAAAoS677LLiAY/owgsv
|
||||||
|
bN8FWCgDAAi1YcOG4vGOygiAGAYAEGrJkiXFwx3ZunXr2ncDRmUAAKFOOeWU4tGO7oILLmjfERiFAQCE
|
||||||
|
mtQAyOX/nwLAaAwAINQkB0Bu7dq17TsD82EAAKEmPQByRgDMnwEAhJrGAMitWbOm/QTAXBgAQKhpDYDc
|
||||||
|
6tWr208BzMYAAEJNcwDkVq1a1X4SYCYGABBq2gMgd95557WfBtgfAwAI1YUBkDMCYGYGABCqKwMgt3Ll
|
||||||
|
ymbHjh3tJwPuyQAAQnVpAOTOPfdcIwAKDAAgVNcGQO7d7363EQB7MQCAUF0cALl3vetdRgDcgwEAhOrq
|
||||||
|
AMgZAbCbAQCE6vIAyK1YscIIgMQAAEJ1fQDk3vnOdxoBVM8AAEL1YQDkzjnnHCOAqhkAQKi+DICcEUDN
|
||||||
|
DAAgVJ8GQO4d73iHEUCVDAAgVN8GQO7tb3+7EUB1DAAgVB8HQO5tb3tbc/fdd7ffAobPAABC9XUA5IwA
|
||||||
|
amIAAKH6PAByZ599thFAFQwAIFTfB0Bu+fLlRgCDZwAAoYYwAHJvfetbjQAGzQAAQg1lAOSMAIbMAABC
|
||||||
|
DWkA5M466ywjgEEyAIBQQxsAube85S1GAINjAAChhjgAcm9+85ubu+66q/2W0H8GABBqqAMgZwQwJAYA
|
||||||
|
EGrIAyD3pje9yQhgEAwAINTQB0DujW98oxFA7xkAQKgaBkBu2bJlRgC9ZgAAoWoZADkjgD4zAIBQNQ2A
|
||||||
|
3Bve8AYjgF4yAIBQtQ2A3Otf//rmP//5T/sEoB8MACBUjQMgZwTQNwYAEKrWAZBbunSpEUBvGABAqJoH
|
||||||
|
QO51r3udEUAvGABAqNoHQO61r32tEUDnGQBAKANgV0YAXWcAAKEMgN0tWbKkufPOO9snA91iAAChDIA9
|
||||||
|
e81rXmME0EkGABDKANg3I4AuMgCAUAZAuTPPPNMIoFMMACCUAbD/Xv3qVxsBdIYBAIQyAGbOCKArDAAg
|
||||||
|
lAEwe6961auaO+64o31iMB0GABDKAJhbr3zlK40ApsoAAEIZAHPPCGCaDAAglAEwv17xilcYAUyFAQCE
|
||||||
|
MgDm3xlnnGEEMHEGABDKABitPAL+/e9/t08Rxs8AAEIZAKN3+umnGwFMjAEAhDIAFtZpp51mBDARBgAQ
|
||||||
|
ygBYeEYAk2AAAKEMgJhe/vKXGwGMlQEAhDIA4nrZy17W3H777e2ThVgGABDKAIjNCGBcDAAglAEQ30tf
|
||||||
|
+lIjgHAGABDKABhPL3nJS4wAQhkAQCgDYHzlEfCvf/2rfdKwMAYAEMoAGG8vfvGLjQBCGABAKANg/BkB
|
||||||
|
RDAAgFAGwGR60YteZASwIAYAEMoAmFwvfOELjQBGZgAAoQyAyZZHwD//+c/26cPcGQBAKANg8r3gBS8w
|
||||||
|
Apg3AwAIZQBMp1NPPdUIYF4MACCUATC9jADmwwAAQhkA0y0//3/84x/tTwP2zwAAQhkA088IYC4MACCU
|
||||||
|
AdCNnv/85xsBzMgAAEIZAN3pec97XvP3v/+9/cnAngwAIJQB0K2MAPbHAABCGQDd67nPfa4RwD4MACCU
|
||||||
|
AdDNjAD2ZgAAoQyA7nbyySc3t912W/uTonYGABDKAOh2z3nOc4wAdjIAgFAGQPczAsgMACCUAdCPnv3s
|
||||||
|
ZxsBlTMAgFAGQH/KI2D79u3tT47aGABAKAOgX5100klGQKUMACCUAdC/jIA6GQBAKAOgnz3rWc9q/va3
|
||||||
|
v7U/RWpgAAChDID+9sxnPtMIqIgBAIQyAPqdEVAPAwAIZQD0v2c84xnNrbfe2v5EGSoDAAhlAAwjI2D4
|
||||||
|
DAAglAEwnJ7+9KcbAQNmAAChDIBhZQQMlwEAhDIAhteJJ57Y/PWvf21/wgyFAQCEMgCG2QknnGAEDIwB
|
||||||
|
AIQyAIabETAsBgAQygAYdk972tOav/zlL+1Pmz4zAIBQBsDwMwKGwQAAQhkAdfTUpz7VCOg5AwAIZQDU
|
||||||
|
Ux4Bf/7zn9ufPH1jAAChDIC6espTnmIE9JQBAIQyAOrLCOgnAwAIZQDU2ZOf/ORm27Zt7d8F9IEBAIQy
|
||||||
|
AOrNCOgXAwAIZQDU3ZOe9CQjoCcMACCUAaA8Av70pz+1f0fQVQYAEMoAUO6JT3yiEdBxBgAQygDQ/zIC
|
||||||
|
us0AAEIZALpnT3jCE5o//vGP7d8ddIkBAIQyALR3RkA3GQBAKANApY4//vjmlltuaf8uoQsMACCUAaD9
|
||||||
|
ZQR0iwEAhDIANFOPf/zjjYCOMACAUAaAZiuPgK1bt7Z/xzAtBgAQygDQXHrc4x5nBEyZAQCEMgA014yA
|
||||||
|
6TIAgFAGgObTYx/72OYPf/hD+3cPk2QAAKEMAM03I2A6DAAglAGgUXrMYx7T/P73v2//LmISZhwAv/vd
|
||||||
|
75rLL7+8ufTSS5szzjhj5/9iS9JMHX744cV/gpdmywiYrOIAuOaaa3b+SzKlH5AkSePq0Y9+tBEwIXsM
|
||||||
|
gNtvv71Zt25dc+CBBxZ/MJIkjbs8AvK/As14/X8A3HrrrTv/wxlKPwxJkibZox71KCNgzP4/AJYvX178
|
||||||
|
IUiSNI3yCPjtb3/bXimi7RwAV1xxRfHhS5I0zR75yEcaAWOyaPv27c2xxx5bfPCSJE07I2A8Fn32s58t
|
||||||
|
PnBJkrpSHgE333xze7qIsGjTpk3Fhy1JUpd6xCMeYQQEWnTaaacVH7QkSV0rj4CbbrqpPWEsxKLFixcX
|
||||||
|
H7IkSV3s4Q9/uBEQID3L8gOWJKmrGQELl55j+eFKktTlHvawhzW/+c1v2nPGfKVnWH6wkiR1PSNgdOn5
|
||||||
|
lR+qJEl96Ljjjmt+/etft2eNuUrPrvxAJUnqS0bA/KXnVn6YkiT1qTwCtmzZ0p43ZpOeWflBSpLUtx76
|
||||||
|
0IcaAXOUnlf5IUqS1MfyCPjVr37Vnjn2Jz2r8gOUJKmvPeQhDzECZpGeU/nhSZLU54yAmaVnVH5wkiT1
|
||||||
|
vTwCbrzxxvbkcU/p+ZQfmiRJQ+jBD36wEVCQnk35gUmSNJTyCLjhhhva00eWnkv5YUmSNKQe9KAHGQH3
|
||||||
|
kJ5J+UFJkjS08gj45S9/2Z7AuqXnUX5IkiQNsQc+8IFGQJKeRfkBSZI01PII+MUvftGewjql51B+OJIk
|
||||||
|
DbnaR0B6BuUHI0nS0Dv22GObn//85+1JrEv6/uWHIklSDdU6AtJ3Lz8QSZJqKY+A66+/vj2NdUjfu/ww
|
||||||
|
JEmqqWOOOaaqEZC+c/lBSJJUW3kE/OxnP2tP5LCl71t+CJIk1dgDHvCAKkZA+q7lByBJUq3lEfDTn/60
|
||||||
|
PZXDlL5n+ctLklRzQx8B6TuWv7gkSbV39NFHNz/5yU/akzks6fuVv7QkSRruCEjfrfyFJUnSrvIIuO66
|
||||||
|
69rTOQzpe5W/rCRJ2t3ixYsHNQLSdyp/UUmStGd5BPz4xz9uT2i/pe9T/pKSJGnfhjIC0ncpf0FJklTu
|
||||||
|
/ve/f/OjH/2oPaX9lL5H+ctJkqT91/cRkL5D+YtJkqSZO+qoo5of/vCH7Untl/T5y19KkiTNXl9HQPrs
|
||||||
|
5S8kSZLmVh4Bmzdvbk9rP6TPXf4ykiRp7h155JG9GgHpM5e/iCRJml95BPzgBz9oT2y3pc9b/hKSJGn+
|
||||||
|
9WUEpM9a/gKSJGm0jjjiiOb73/9+e2q7KX3O8oeXJEmj1/URkD5j+YNLkqSFlUfA9773vfbkdkv6fOUP
|
||||||
|
LUmSFl5XR0D6bOUPLEmSYrrf/e7XfPe7321Pbzekz1X+sJIkKa48Ar7zne+053f60mcqf1BJkhRbl0ZA
|
||||||
|
+jzlDylJkuI7/PDDm29/+9vtGZ6e9FnKH1CSJI2nLoyA9DnKH06SJI2vPAK+9a1vted48tJnKH8wSZI0
|
||||||
|
3g477LCpjYD0/uUPJUmSxl8eAddee217licnvXf5A0mSpMmUR8A3v/nN9jRPRnrf8oeRJEmTa9IjIL1n
|
||||||
|
+YNIkqTJduihhzbf+MY32hM9Xun9yh9CkiRNvkmNgPRe5Q8gSZKmUx4BX//619tTPR7pfcpvLkmSptd9
|
||||||
|
73vfsY6A9B7lN5YkSdMtj4Cvfe1r7cmOlV6//KaSJGn65RFwzTXXtGc7Tnrt8htKkqRuNI4RkF63/GaS
|
||||||
|
JKk7HXLIIc1Xv/rV9nwvXHrN8htJkqRuFTkC0uuV30SSJHWvPAK+8pWvtGd8dOm1ym8gSZK6WR4BX/7y
|
||||||
|
l9tTPpr0OuUXlyRJ3e0+97nPgkZAeo3yC0uSpG6XR8CXvvSl9qTPT/rz5ReVJEndb9QRkP5s+QUlSVI/
|
||||||
|
yiPg6quvbk/73KQ/V34xSZLUn+5973s3V111VXveZ5f+TPmFJElSv5rPCEi/v/wikiSpf+UR8MUvfrE9
|
||||||
|
8/uXfm/5BSRJUj/LI+ALX/hCe+rL0u8r/2FJktTfDj744BlHQPo95T8oSZL6XR4Bn//859uTv6f06+U/
|
||||||
|
JEmS+l8eAZ/73Ofas79b+rXyH5AkScOoNALSP17+zZIkaTjlf2Pg9ddf355/A0CSpGo66aSTmrvuussA
|
||||||
|
kCSptj760Y8aAJIk1Vb+9wPcdNNN+b8v/wZJkjTMPvGJT+S/ln9RkiQNszVr1uS/ln9RkiQNs5NPPjn/
|
||||||
|
tfyLkiRpmB122GH5r+VflCRJw+z444/Pfy3/oiRJGmZnnXVW/mv5FyVJ0jD72Mc+lv9a/kVJkjTMrr32
|
||||||
|
2vzX8i9KkqThdeaZZ/pPApQkqaaOPPLIZuvWrQaAJEk19clPfnLn8c/S/1z+TZIkaTitXLmyPf27pH+s
|
||||||
|
/BslSdIwOvfcc5sdO3a0p3+X9I+Xf7MkSep/peOfpV8r/wFJktTv9nf8s/Tr5T8kSZL620zHP0u/p/wH
|
||||||
|
JUlSP5vt+Gfp95X/sCRJ6l9zOf5Z+r3lF5AkSf1qrsc/S7+//CKSJKk/zef4Z+nPlF9IkiT1o/wf8jOf
|
||||||
|
45+lP1d+MUmS1P1GOf5Z+rPlF5QkSd1u1OOfpT9fflFJktTdFnL8s/Qa5ReWJEndbO//xz6jSK9TfnFJ
|
||||||
|
ktS9Io5/ll6r/AaSJKlbRR3/LL1e+U0kSVJ3ijz+WXrN8htJkqRuFH38s/S65TeTJEnTbxzHP0uvXX5D
|
||||||
|
SZI03c4777z2XMdLr19+U0mSNL3Gefyz9B7lN5YkSdNp3Mc/S+9TfnNJkjT5JnH8s/Re5Q8gSZIm26SO
|
||||||
|
f5ber/whJEnS5Jrk8c/Se5Y/iCRJmkyTPv5Zet/yh5EkSeNvGsc/S+9d/kCSJGm8Tev4Z+n9yx9KkiSN
|
||||||
|
r1WrVrWneDrSZyh/MEmSNJ6mffyz9DnKH06SJMXXheOfpc9S/oCSJCm2rhz/LH2e8oeUJElxden4Z+kz
|
||||||
|
lT+oJEmKqWvHP0ufq/xhJUnSwuvi8c/SZyt/YEmStLC6evyz9PnKH1qSJI1el49/lj5j+YNLkqTR6vrx
|
||||||
|
z9LnLH94SZI0/1avXt2e2G5Ln7X8BSRJ0vzqy/HP0uctfwlJkjT3+nT8s/SZy19EkiTNrb4d/yx97vKX
|
||||||
|
kSRJs9fH45+lz17+QpIkaeb6evyz9PnLX0qSJO2/Ph//LH2H8heTJEnl+n78s/Q9yl9OkiTt2xCOf5a+
|
||||||
|
S/kLSpKkPVuzZk17PvsvfZ/yl5QkSbsb0vHP0ncqf1FJkrSroR3/LH2v8peVJEnDPP5Z+m7lLyxJUu0N
|
||||||
|
9fhn6fuVv7QkSTU35OOfpe9Y/uKSJNXa0I9/lr5n+ctLklRjNRz/LH3X8gOQJKm2ajn+Wfq+5YcgSVJN
|
||||||
|
1XT8s/Sdyw9CkqRaWrt2bXsW65G+d/lhSJJUQzUe/yx99/IDkSRp6NV6/LP0/csPRZKkIVfz8c/SMyg/
|
||||||
|
GEmShlrtxz9Lz6H8cCRJGmKO/y7pWZQfkCRJQ8vx3y09j/JDkiRpSDn+e0rPpPygJEkaSo7/vtJzKT8s
|
||||||
|
SZKGkONflp5N+YFJktT3zj///Pbcsbf0fMoPTZKkPuf4zyw9o/KDkySprzn+s0vPqfzwJEnqY47/3KRn
|
||||||
|
VX6AkiT1Lcd/7tLzKj9ESZL6lOM/P+mZlR+kJEl9yfGfv/Tcyg9TkqQ+5PiPJj278gOVJKnrOf6jS8+v
|
||||||
|
/FAlSepyF1xwQXvKGEV6huUHK0lSV3P8F27Rve51r+LDlSSpizn+MRadcMIJxQcsSVLXcvzjLFqxYkXx
|
||||||
|
IUuS1KUc/1iLPv7xjxcftCRJXcnxj7fouuuuKz5sSZK6kOM/HovyfznnnHOKD12SpGnm+I/PzgFw2223
|
||||||
|
Nccdd1zx4UuSNI0c//HaOQCyq6++ujnggAOKPwRJkibZunXr2uvEuPx/AGSf/vSnm6OPPrr4w5AkaRI5
|
||||||
|
/pOxxwDItm3b1ixdurT4Q5EkaZw5/pOzzwD4nyuvvLJZv359c+qppzaHHnpo8QclSVJUjv9k7XcA3NOO
|
||||||
|
HTuaG264odm8ebMkzdiJJ55Y/Cd3aaYc/8mb0wAAmKtTTjml+E/w0v5y/KfDAABCGQCaT47/9BgAQCgD
|
||||||
|
QHPN8Z8uAwAIZQBoLjn+02cAAKEMAM2W498NBgAQygDQTF144YXt3ylMmwEAhDIAtL8c/24xAIBQBoBK
|
||||||
|
Of7dYwAAoQwA7Z3j300GABDKANA9c/y7ywAAQhkA+l+Of7cZAEAoA0A5x7/7DAAglAEgx78fDAAglAFQ
|
||||||
|
d45/fxgAQCgDoN7Wr1/f/l1AHxgAQCgDoM4c//4xAIBQBkB9Of79ZAAAoQyAunL8+8sAAEIZAPXk+Peb
|
||||||
|
AQCEMgDqyPHvPwMACGUADD/HfxgMACCUATDsHP/hMACAUAbAcHP8h8UAAEIZAMPM8R8eAwAIZQAMr4su
|
||||||
|
uqj96TIkBgAQygAYVo7/cBkAQCgDYDg5/sNmAAChDIBh5PgPnwEAhDIA+p/jXwcDAAhlAPQ7x78eBgAQ
|
||||||
|
ygDob45/XQwAIJQB0M8c//oYAEAoA6B/Of51MgCAUAZAv7r44ovbnxy1MQCAUAZAf3L862YAAKEMgH7k
|
||||||
|
+GMAAKEMgO7n+JMZAEAoA6DbOf78jwEAhDIAupvjzz0ZAEAoA6CbOf7szQAAQhkA3cvxp8QAAEIZAN3K
|
||||||
|
8Wd/DAAglAHQnS655JL2pwL7MgCAUAZAN3L8mY0BAIQyAKaf489cGABAKANgujn+zJUBAIQyAKaX4898
|
||||||
|
GABAKANgOjn+zJcBAIQyACaf488oDAAglAEw2Rx/RmUAAKEMgMnl+LMQBgAQygCYTBs2bGifOIzGAABC
|
||||||
|
GQDjz/EnggEAhDIAxpvjTxQDAAhlAIwvx59IBgAQygAYT44/0QwAIJQBEJ/jzzgYAEAoAyA2x59xMQCA
|
||||||
|
UAZAXI4/42QAAKEMgJgcf8bNAABCGQALb+PGje3ThPExAIBQBsDCcvyZFAMACGUAjJ7jzyQZAEAoA2C0
|
||||||
|
HH8mzQAAQhkA88/xZxoMACCUATC/HH+mxQAAQhkAc8/xZ5oMACCUATC3HH+mzQAAQhkAs+f40wUGABDK
|
||||||
|
AJg5x5+uMACAUAbA/nvPe97TPiWYPgMACGUAlHP86RoDAAhlAOyb408XGQBAKANgzxx/usoAAEIZALtz
|
||||||
|
/OkyAwAIZQDsyvGn6wwAIJQB4PjTDwYAEKr2AeD40xcGABCq5gHg+NMnBgAQqtYB8N73vrd9AtAPBgAQ
|
||||||
|
qsYB4PjTRwYAEKq2AeD401cGABCqpgHg+NNnBgAQqpYB4PjTdwYAEKqGAeD4MwQGABBq6APA8WcoDAAg
|
||||||
|
1JAHgOPPkBgAQKihDgDHn6ExAIBQQxwAl156afvtYDgMACDU0AaA489QGQBAqCENAMefITMAgFBDGQCO
|
||||||
|
P0NnAAChhjAAHH9qYAAAofo+ABx/amEAAKH6PAAcf2piAACh+joAHH9qYwAAofo4ABx/amQAAKH6NgDe
|
||||||
|
9773tZ8c6mIAAKH6NAAcf2pmAACh+jIAHH9qZwAAofowABx/MACAYF0fAI4/7GIAAKG6PAAcf9jNAABC
|
||||||
|
dXUAOP6wJwMACNXFAeD4w74MACBU1waA4w9lBgAQqksDYNOmTe2nAvZmAAChujIAHH+YmQEAhOrCAHD8
|
||||||
|
YXYGABBq2gPA8Ye5MQCAUNMcAI4/zJ0BAISa1gBw/GF+DAAg1DQGgOMP82cAAKEmPQAcfxiNAQCEmuQA
|
||||||
|
cPxhdAYAEGpSA+D9739/+47AKAwAINSSJUuKBzsyxx8WzgAAQm3YsKF4tKNy/CGGAQCEuuyyy4qHOyLH
|
||||||
|
H+IYAECoLVu2NAcddFDxgC8kxx9iGQBAuGXLlhWP+Kg5/hDPAADCbd68uXjIR8nxh/EwAICx+NCHPlQ8
|
||||||
|
6PPJ8YfxMQCAsVm7dm3xsM/WgQce2Hz4wx9uXwUYBwMAGJsdO3Y0H/nIR5pDDjmkeOhLHXPMMc1VV13V
|
||||||
|
vgIwLgYAMHY333xzs3Tp0hn/rwOOOuqoZuXKlc0tt9zS/ilgnAwAYGK2b9/eXHHFFc26deua5cuXN6tW
|
||||||
|
rWo2btzYfOYzn2nuvPPO9ncBk2AAAECFDAAAqJABAAAVMgAAoEIGAABUyAAAgAoZAABQIQMAACpkAABA
|
||||||
|
hQwAAKiQAQAAFTIAAKBCBgAAVMgAAIAKGQAAUCEDAAAqZAAAQIUMAACokAEAABUyAACgQgYAAFTIAACA
|
||||||
|
ChkAAFAhAwAAKmQAAECFDAAAqJABAAAVMgAAoEIGAABUyAAAgAoZAABQIQMAAKrTNP8Fbm4o1JEIUpcA
|
||||||
|
AAAASUVORK5CYII=
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
@ -0,0 +1,140 @@
|
|||||||
|
namespace LocomativeProject.MovementStrategy
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Класс-стратегия перемещения объекта
|
||||||
|
/// </summary>
|
||||||
|
public abstract class AbstractStrategy
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Перемещаемый объект
|
||||||
|
/// </summary>
|
||||||
|
private IMoveableObject? _moveableObject;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Статус перемещения
|
||||||
|
/// </summary>
|
||||||
|
private StrategyStatus _state = StrategyStatus.NotInit;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ширина поля
|
||||||
|
/// </summary>
|
||||||
|
protected int FieldWidth { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Высота поля
|
||||||
|
/// </summary>
|
||||||
|
protected int FieldHeight { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Получение статуса перемещения
|
||||||
|
/// </summary
|
||||||
|
public StrategyStatus GetStatus() { return _state; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Установка данных
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="moveableObject">Перемещаемый объект</param>
|
||||||
|
/// <param name="width">Ширина поля</param>
|
||||||
|
/// <param name="height">Высота поля</param>
|
||||||
|
public void SetData(IMoveableObject moveableObject, int width, int height)
|
||||||
|
{
|
||||||
|
if (moveableObject == null)
|
||||||
|
{
|
||||||
|
_state = StrategyStatus.NotInit;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_state = StrategyStatus.InProgress;
|
||||||
|
_moveableObject = moveableObject;
|
||||||
|
FieldWidth = width;
|
||||||
|
FieldHeight = height;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Шаг перемещения
|
||||||
|
/// </summary>
|
||||||
|
public void MakeStep()
|
||||||
|
{
|
||||||
|
if (_state != StrategyStatus.InProgress)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsTargetDestinaion())
|
||||||
|
{
|
||||||
|
_state = StrategyStatus.Finish;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
MoveToTarget();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Перемещение влево
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>Результат перемещения (true - удалось переместиться, false - неудача)</returns>
|
||||||
|
protected bool MoveLeft() => MoveTo(MovementDirection.Left);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Перемещение вправо
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>Результат перемещения (true - удалось переместиться, false - неудача)</returns>
|
||||||
|
protected bool MoveRight() => MoveTo(MovementDirection.Right);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Перемещение вверх
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>Результат перемещения (true - удалось переместиться, false - неудача)</returns>
|
||||||
|
protected bool MoveUp() => MoveTo(MovementDirection.Up);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Перемещение вниз
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>Результат перемещения (true - удалось переместиться, false - неудача)</returns>
|
||||||
|
protected bool MoveDown() => MoveTo(MovementDirection.Down);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Параметры объекта
|
||||||
|
/// </summary>
|
||||||
|
protected ObjectParameters? GetObjectParameters => _moveableObject?.GetObjectPosition;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Шаг объекта
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
protected int? GetStep()
|
||||||
|
{
|
||||||
|
if (_state != StrategyStatus.InProgress)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return _moveableObject?.GetStep;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Перемещение к цели
|
||||||
|
/// </summary>
|
||||||
|
protected abstract void MoveToTarget();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Достигнута ли цель
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
protected abstract bool IsTargetDestinaion();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Попытка перемещения в требуемом направлении
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="movementDirection">Направление</param>
|
||||||
|
/// <returns>Результат попытки (true - удалось переместиться, false - неудача)</returns>
|
||||||
|
private bool MoveTo(MovementDirection movementDirection)
|
||||||
|
{
|
||||||
|
if (_state != StrategyStatus.InProgress)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _moveableObject?.TryMoveObject(movementDirection) ?? false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
namespace LocomativeProject.MovementStrategy;
|
||||||
|
/// <summary>
|
||||||
|
/// Интерфейс для работы с перемещаемым объектом
|
||||||
|
/// </summary>
|
||||||
|
public interface IMoveableObject
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Получение координаты объекта
|
||||||
|
/// </summary>
|
||||||
|
ObjectParameters? GetObjectPosition { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Шаг объекта
|
||||||
|
/// </summary>
|
||||||
|
int GetStep { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Попытка переместить объект в указанном направлении
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="direction">Направление</param>
|
||||||
|
/// <returns>true - объект перемещен, false - перемещение невозможно</returns>
|
||||||
|
bool TryMoveObject(MovementDirection direction);
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace LocomativeProject.MovementStrategy;
|
||||||
|
|
||||||
|
public class MoveToBorder : AbstractStrategy
|
||||||
|
{
|
||||||
|
protected override bool IsTargetDestinaion()
|
||||||
|
{
|
||||||
|
ObjectParameters? objParams = GetObjectParameters;
|
||||||
|
if (objParams == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return objParams.RightBorder - GetStep() <= FieldWidth && objParams.DownBorder - GetStep() < FieldHeight &&
|
||||||
|
objParams.RightBorder + GetStep() >= FieldWidth && objParams.DownBorder + GetStep() >= FieldHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void MoveToTarget()
|
||||||
|
{
|
||||||
|
ObjectParameters? objParams = GetObjectParameters;
|
||||||
|
if (objParams == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (objParams.RightBorder + GetStep() <= FieldWidth)
|
||||||
|
{
|
||||||
|
MoveRight();
|
||||||
|
}
|
||||||
|
if (objParams.DownBorder + GetStep() <= FieldHeight)
|
||||||
|
{
|
||||||
|
MoveDown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,54 @@
|
|||||||
|
namespace LocomativeProject.MovementStrategy;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Стратегия перемещения объекта в центр экрана
|
||||||
|
/// </summary>
|
||||||
|
public class MoveToCenter : AbstractStrategy
|
||||||
|
{
|
||||||
|
protected override bool IsTargetDestinaion()
|
||||||
|
{
|
||||||
|
ObjectParameters? objParams = GetObjectParameters;
|
||||||
|
if (objParams == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return objParams.ObjectMiddleHorizontal - GetStep() <= FieldWidth / 2 && objParams.ObjectMiddleHorizontal + GetStep() >= FieldWidth / 2 &&
|
||||||
|
objParams.ObjectMiddleVertical - GetStep() <= FieldHeight / 2 && objParams.ObjectMiddleVertical + GetStep() >= FieldHeight / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void MoveToTarget()
|
||||||
|
{
|
||||||
|
ObjectParameters? objParams = GetObjectParameters;
|
||||||
|
if (objParams == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int diffX = objParams.ObjectMiddleHorizontal - FieldWidth / 2;
|
||||||
|
if (Math.Abs(diffX) > GetStep())
|
||||||
|
{
|
||||||
|
if (diffX > 0)
|
||||||
|
{
|
||||||
|
MoveLeft();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MoveRight();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int diffY = objParams.ObjectMiddleVertical - FieldHeight / 2;
|
||||||
|
if (Math.Abs(diffY) > GetStep())
|
||||||
|
{
|
||||||
|
if (diffY > 0)
|
||||||
|
{
|
||||||
|
MoveUp();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MoveDown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,64 @@
|
|||||||
|
using LocomativeProject.Drawnings;
|
||||||
|
namespace LocomativeProject.MovementStrategy;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Класс-реализация IMoveableObject с использованием DrawningLocomotive
|
||||||
|
/// </summary>
|
||||||
|
public class MoveableLocomotive : IMoveableObject
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Поле-объект класса DrawningBaseLocomotive или его наследника
|
||||||
|
/// </summary>
|
||||||
|
private readonly DrawningBaseLocomotive? _locomotive = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Конструктор
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="_locomotive">Объект класса DrawningBaseLocomotive</param>
|
||||||
|
public MoveableLocomotive(DrawningBaseLocomotive locomotive)
|
||||||
|
{
|
||||||
|
_locomotive = locomotive;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ObjectParameters? GetObjectPosition
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_locomotive == null || _locomotive._EntityBaseLocomotive == null || !_locomotive.GetPosX.HasValue || !_locomotive.GetPosY.HasValue)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new ObjectParameters(_locomotive.GetPosX.Value, _locomotive.GetPosY.Value, _locomotive.GetWidth, _locomotive.GetHeight);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int GetStep => (int)(_locomotive?._EntityBaseLocomotive?.Step ?? 0);
|
||||||
|
|
||||||
|
public bool TryMoveObject(MovementDirection direction)
|
||||||
|
{
|
||||||
|
if (_locomotive == null || _locomotive._EntityBaseLocomotive == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _locomotive.MoveTransport(GetDirectionType(direction));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Конвертация из MovementDirection в DirectionType
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="direction">MovementDirection</param>
|
||||||
|
/// <returns>DirectionType</returns>
|
||||||
|
private static DirectionType GetDirectionType(MovementDirection direction)
|
||||||
|
{
|
||||||
|
return direction switch
|
||||||
|
{
|
||||||
|
MovementDirection.Left => DirectionType.Left,
|
||||||
|
MovementDirection.Right => DirectionType.Right,
|
||||||
|
MovementDirection.Up => DirectionType.Up,
|
||||||
|
MovementDirection.Down => DirectionType.Down,
|
||||||
|
_ => DirectionType.Unknow,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,26 @@
|
|||||||
|
namespace LocomativeProject.MovementStrategy;
|
||||||
|
/// <summary>
|
||||||
|
/// Направление перемещения
|
||||||
|
/// </summary>
|
||||||
|
public enum MovementDirection : byte
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Вверх
|
||||||
|
/// </summary>
|
||||||
|
Up = 1,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Вниз
|
||||||
|
/// </summary>
|
||||||
|
Down,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Влево
|
||||||
|
/// </summary>
|
||||||
|
Left,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Вправо
|
||||||
|
/// </summary>
|
||||||
|
Right
|
||||||
|
}
|
@ -0,0 +1,71 @@
|
|||||||
|
namespace LocomativeProject.MovementStrategy;
|
||||||
|
/// <summary>
|
||||||
|
/// Параметры-координаты объекта
|
||||||
|
/// </summary>
|
||||||
|
public class ObjectParameters
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Координата X
|
||||||
|
/// </summary>
|
||||||
|
private readonly int _x;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Координата Y
|
||||||
|
/// </summary>
|
||||||
|
private readonly int _y;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ширина объекта
|
||||||
|
/// </summary>
|
||||||
|
private readonly int _width;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Высота объекта
|
||||||
|
/// </summary>
|
||||||
|
private readonly int _height;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Левая граница
|
||||||
|
/// </summary>
|
||||||
|
public int LeftBorder => _x;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Верхняя граница
|
||||||
|
/// </summary>
|
||||||
|
public int TopBorder => _y;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Правая граница
|
||||||
|
/// </summary>
|
||||||
|
public int RightBorder => _x + _width;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Нижняя граница
|
||||||
|
/// </summary>
|
||||||
|
public int DownBorder => _y + _height;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Середина объекта
|
||||||
|
/// </summary>
|
||||||
|
public int ObjectMiddleHorizontal => _x + _width / 2;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Середина объекта
|
||||||
|
/// </summary>
|
||||||
|
public int ObjectMiddleVertical => _y + _height / 2;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Конструктор
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="x">Координата X</param>
|
||||||
|
/// <param name="y">Координата Y</param>
|
||||||
|
/// <param name="width">Ширина объекта</param>
|
||||||
|
/// <param name="height">Высота объекта</param>
|
||||||
|
public ObjectParameters(int x, int y, int width, int height)
|
||||||
|
{
|
||||||
|
_x = x;
|
||||||
|
_y = y;
|
||||||
|
_width = width;
|
||||||
|
_height = height;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
namespace LocomativeProject.MovementStrategy;
|
||||||
|
/// <summary>
|
||||||
|
/// Статус выполнения операции перемещения
|
||||||
|
/// </summary>
|
||||||
|
public enum StrategyStatus
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Все готово к началу
|
||||||
|
/// </summary>
|
||||||
|
NotInit,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Выполняется
|
||||||
|
/// </summary>
|
||||||
|
InProgress,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Завершено
|
||||||
|
/// </summary>
|
||||||
|
Finish
|
||||||
|
}
|
@ -1,4 +1,6 @@
|
|||||||
namespace LocomativeProject
|
using LocomativeProject;
|
||||||
|
|
||||||
|
namespace LocomotiveProject
|
||||||
{
|
{
|
||||||
internal static class Program
|
internal static class Program
|
||||||
{
|
{
|
||||||
@ -11,7 +13,7 @@ namespace LocomativeProject
|
|||||||
// To customize application configuration such as set high DPI settings or default font,
|
// To customize application configuration such as set high DPI settings or default font,
|
||||||
// see https://aka.ms/applicationconfiguration.
|
// see https://aka.ms/applicationconfiguration.
|
||||||
ApplicationConfiguration.Initialize();
|
ApplicationConfiguration.Initialize();
|
||||||
Application.Run(new Form1());
|
Application.Run(new FormLocomotiveCollection());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
73
LocomativeProject/LocomativeProject/Properties/Resources.Designer.cs
generated
Normal file
73
LocomativeProject/LocomativeProject/Properties/Resources.Designer.cs
generated
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// Этот код создан программой.
|
||||||
|
// Исполняемая версия:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
|
||||||
|
// повторной генерации кода.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace LocomotiveProject.Properties {
|
||||||
|
using System;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
|
||||||
|
/// </summary>
|
||||||
|
// Этот класс создан автоматически классом StronglyTypedResourceBuilder
|
||||||
|
// с помощью такого средства, как ResGen или Visual Studio.
|
||||||
|
// Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen
|
||||||
|
// с параметром /str или перестройте свой проект VS.
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
internal class Resources {
|
||||||
|
|
||||||
|
private static global::System.Resources.ResourceManager resourceMan;
|
||||||
|
|
||||||
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
|
internal Resources() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||||
|
get {
|
||||||
|
if (object.ReferenceEquals(resourceMan, null)) {
|
||||||
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("LocomotiveProject.Properties.Resources", typeof(Resources).Assembly);
|
||||||
|
resourceMan = temp;
|
||||||
|
}
|
||||||
|
return resourceMan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Перезаписывает свойство CurrentUICulture текущего потока для всех
|
||||||
|
/// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Globalization.CultureInfo Culture {
|
||||||
|
get {
|
||||||
|
return resourceCulture;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
resourceCulture = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
internal static System.Drawing.Bitmap up_arrow {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("up-arrow", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -117,4 +117,8 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="up-arrow" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\up-arrow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
BIN
LocomativeProject/LocomativeProject/Resources/up-arrow.png
Normal file
BIN
LocomativeProject/LocomativeProject/Resources/up-arrow.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.5 KiB |
2
desktop.ini
Normal file
2
desktop.ini
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
[.ShellClassInfo]
|
||||||
|
LocalizedResourceName=ÎÎÏ Êèðèëèí ÏÈáä11(final version)
|
BIN
source/img/arrow_down.png
Normal file
BIN
source/img/arrow_down.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.6 KiB |
BIN
source/img/arrow_left.png
Normal file
BIN
source/img/arrow_left.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.5 KiB |
BIN
source/img/arrow_right.png
Normal file
BIN
source/img/arrow_right.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.2 KiB |
BIN
source/img/arrow_up.png
Normal file
BIN
source/img/arrow_up.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.5 KiB |
Loading…
Reference in New Issue
Block a user