From 99942d34fd422fb5cd870d6fc5429e25026cee14 Mon Sep 17 00:00:00 2001 From: Danila_Mochalov Date: Mon, 12 Sep 2022 20:33:01 +0400 Subject: [PATCH] =?UTF-8?q?=D0=93=D0=BE=D1=82=D0=BE=D0=B2=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=BB=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82=D0=BE=D1=80=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=E2=84=96?= =?UTF-8?q?1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + Locomotive/Locomotive/Direction.cs | 17 ++ Locomotive/Locomotive/DrawningLocomotive.cs | 138 +++++++++++++ Locomotive/Locomotive/EntityLocomotive.cs | 28 +++ Locomotive/Locomotive/Form1.Designer.cs | 39 ---- Locomotive/Locomotive/Form1.cs | 10 - .../Locomotive/FormLocomotive.Designer.cs | 182 ++++++++++++++++++ Locomotive/Locomotive/FormLocomotive.cs | 62 ++++++ Locomotive/Locomotive/FormLocomotive.resx | 63 ++++++ Locomotive/Locomotive/Locomotive.csproj | 15 ++ Locomotive/Locomotive/Program.cs | 2 +- .../Properties/Resources.Designer.cs | 103 ++++++++++ .../{Form1.resx => Properties/Resources.resx} | 13 ++ .../Locomotive/Resources/down-arrow.png | Bin 0 -> 4917 bytes .../Locomotive/Resources/left-arrow.png | Bin 0 -> 4719 bytes .../Locomotive/Resources/right-arrow.png | Bin 0 -> 2601 bytes Locomotive/Locomotive/Resources/up-arrow.png | Bin 0 -> 4899 bytes 17 files changed, 623 insertions(+), 50 deletions(-) create mode 100644 Locomotive/Locomotive/Direction.cs create mode 100644 Locomotive/Locomotive/DrawningLocomotive.cs create mode 100644 Locomotive/Locomotive/EntityLocomotive.cs delete mode 100644 Locomotive/Locomotive/Form1.Designer.cs delete mode 100644 Locomotive/Locomotive/Form1.cs create mode 100644 Locomotive/Locomotive/FormLocomotive.Designer.cs create mode 100644 Locomotive/Locomotive/FormLocomotive.cs create mode 100644 Locomotive/Locomotive/FormLocomotive.resx create mode 100644 Locomotive/Locomotive/Properties/Resources.Designer.cs rename Locomotive/Locomotive/{Form1.resx => Properties/Resources.resx} (83%) create mode 100644 Locomotive/Locomotive/Resources/down-arrow.png create mode 100644 Locomotive/Locomotive/Resources/left-arrow.png create mode 100644 Locomotive/Locomotive/Resources/right-arrow.png create mode 100644 Locomotive/Locomotive/Resources/up-arrow.png diff --git a/.gitignore b/.gitignore index 8e7a151..520d2b5 100644 --- a/.gitignore +++ b/.gitignore @@ -398,3 +398,4 @@ FodyWeavers.xsd # JetBrains Rider *.sln.iml +/Locomotive/source diff --git a/Locomotive/Locomotive/Direction.cs b/Locomotive/Locomotive/Direction.cs new file mode 100644 index 0000000..c9c339e --- /dev/null +++ b/Locomotive/Locomotive/Direction.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Locomotive +{ + //Направление перемещения + internal enum Direction + { + Up = 1, + Down = 2, + Left = 3, + Right = 4, + } +} diff --git a/Locomotive/Locomotive/DrawningLocomotive.cs b/Locomotive/Locomotive/DrawningLocomotive.cs new file mode 100644 index 0000000..775bd03 --- /dev/null +++ b/Locomotive/Locomotive/DrawningLocomotive.cs @@ -0,0 +1,138 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Locomotive +{ + //Класс, отвечающий за отрисовку + internal class DrawningLocomotive + { + /// Класс-сущность + public EntityLocomotive Locomotive { get; private set; } + /// Левая координата отрисовки локомотива + private float _startPosX; + /// Верхняя координата отрисовки локомотива + private float _startPosY; + /// Ширина окна отрисовки + private int? _pictureWidth = null; + /// Высота окна отрисовки + private int? _pictureHeight = null; + /// Ширина отрисовки локомотива + private readonly int _locomotiveWidth = 110; + /// Высота отрисовки локомотива + private readonly int _locomotiveHeight = 50; + + /// Инициализация свойств + public void Init(int speed, float weight, Color bodyColor) + { + Locomotive = new EntityLocomotive(); + Locomotive.Init(speed, weight, bodyColor); + } + /// Установка позиции локомотива + public void SetPosition(int x, int y, int width, int height) + { + if (x < 0 || x + _locomotiveWidth >= width) + { + return; + } + if (y < 0 || y + _locomotiveHeight >= height) + { + return; + } + _startPosX = x; + _startPosY = y; + _pictureWidth = width; + _pictureHeight = height; + } + + public void MoveTransport(Direction direction) + { + if (!_pictureWidth.HasValue || !_pictureHeight.HasValue) + { + return; + } + switch (direction) + { + // вправо + case Direction.Right: + if (_startPosX + _locomotiveWidth + Locomotive.Step < _pictureWidth) + { + _startPosX += Locomotive.Step; + } + else _startPosX = (int)_pictureWidth - _locomotiveWidth; + break; + //влево + case Direction.Left: + if (_startPosX - Locomotive.Step >= 0) + { + _startPosX -= Locomotive.Step; + } + else _startPosX = 0; + break; + //вверх + case Direction.Up: + if (_startPosY - Locomotive.Step >= 0) + { + _startPosY -= Locomotive.Step; + } + else _startPosY = 0; + break; + //вниз + case Direction.Down: + if (_startPosY + _locomotiveHeight + Locomotive.Step < _pictureHeight) + { + _startPosY += Locomotive.Step; + } + else _startPosY = (int)_pictureHeight - _locomotiveHeight; + break; + } + } + + public void DrawTransport(Graphics g) + { + if (_startPosX < 0 || _startPosY < 0 + || !_pictureHeight.HasValue || !_pictureWidth.HasValue) + { + return; + } + Pen pen = new(Color.Black); + //тело + g.DrawRectangle(pen, _startPosX , _startPosY, _locomotiveWidth - 10, _locomotiveHeight - 10); + //окна + g.DrawRectangle(pen, _startPosX + 10, _startPosY + 10, 10, 10); + g.DrawRectangle(pen, _startPosX + 30, _startPosY + 10, 10, 10); + g.DrawRectangle(pen, _startPosX + 80, _startPosY + 10, 10, 10); + //дверь + g.DrawRectangle(pen, _startPosX + 50, _startPosY + 10, 10, 20); + //колеса + g.DrawEllipse(pen, _startPosX, _startPosY + 40, 10, 10); + g.DrawEllipse(pen, _startPosX + 20, _startPosY + 40, 10, 10); + g.DrawEllipse(pen, _startPosX + 70, _startPosY + 40, 10, 10); + g.DrawEllipse(pen, _startPosX + 90, _startPosY + 40, 10, 10); + //черный прямоугольник + g.FillRectangle(new SolidBrush(Color.Black), _startPosX + 100, _startPosY + 10, 10, 30); + } + + public void ChangeBorders(int width, int height) + { + _pictureWidth = width; + _pictureHeight = height; + if (_pictureWidth <= _locomotiveWidth || _pictureHeight <= _locomotiveHeight) + { + _pictureWidth = null; + _pictureHeight = null; + return; + } + if (_startPosX + _locomotiveWidth > _pictureWidth) + { + _startPosX = _pictureWidth.Value - _locomotiveWidth; + } + if (_startPosY + _locomotiveHeight > _pictureHeight) + { + _startPosY = _pictureHeight.Value - _locomotiveHeight; + } + } + } +} diff --git a/Locomotive/Locomotive/EntityLocomotive.cs b/Locomotive/Locomotive/EntityLocomotive.cs new file mode 100644 index 0000000..1e407d0 --- /dev/null +++ b/Locomotive/Locomotive/EntityLocomotive.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Locomotive +{ + internal class EntityLocomotive + { + /// Скорость + public int Speed { get; private set; } + /// Вес + public float Weight { get; private set; } + /// Цвет + public Color BodyColor { get; private set; } + /// Шаг перемещения локомотива + public float Step => Speed * 100 / Weight; + + public void Init(int speed, float weight, Color bodyColor) + { + Random rnd = new(); + Speed = speed <= 0 ? rnd.Next(50, 150) : speed; + Weight = weight <= 0 ? rnd.Next(40, 70) : weight; + BodyColor = bodyColor; + } + } +} diff --git a/Locomotive/Locomotive/Form1.Designer.cs b/Locomotive/Locomotive/Form1.Designer.cs deleted file mode 100644 index 406617d..0000000 --- a/Locomotive/Locomotive/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace Locomotive -{ - partial class Form1 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - 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 - } -} \ No newline at end of file diff --git a/Locomotive/Locomotive/Form1.cs b/Locomotive/Locomotive/Form1.cs deleted file mode 100644 index c96f8c0..0000000 --- a/Locomotive/Locomotive/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace Locomotive -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} \ No newline at end of file diff --git a/Locomotive/Locomotive/FormLocomotive.Designer.cs b/Locomotive/Locomotive/FormLocomotive.Designer.cs new file mode 100644 index 0000000..0ca27bc --- /dev/null +++ b/Locomotive/Locomotive/FormLocomotive.Designer.cs @@ -0,0 +1,182 @@ +namespace Locomotive +{ + partial class FormLocomotive + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.pictureBoxLocomotive = new System.Windows.Forms.PictureBox(); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.toolStripStatusLabelSpeed = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabelWeight = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabelColor = new System.Windows.Forms.ToolStripStatusLabel(); + this.buttonCreate = new System.Windows.Forms.Button(); + this.buttonUp = new System.Windows.Forms.Button(); + this.buttonLeft = new System.Windows.Forms.Button(); + this.buttonDown = new System.Windows.Forms.Button(); + this.buttonRight = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxLocomotive)).BeginInit(); + this.statusStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // pictureBoxLocomotive + // + this.pictureBoxLocomotive.Dock = System.Windows.Forms.DockStyle.Fill; + this.pictureBoxLocomotive.Location = new System.Drawing.Point(0, 0); + this.pictureBoxLocomotive.Name = "pictureBoxLocomotive"; + this.pictureBoxLocomotive.Size = new System.Drawing.Size(778, 416); + this.pictureBoxLocomotive.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.pictureBoxLocomotive.TabIndex = 0; + this.pictureBoxLocomotive.TabStop = false; + //this.pictureBoxLocomotive.Click += new System.EventHandler(this.pictureBoxLocomotive_Click); + this.pictureBoxLocomotive.Resize += new System.EventHandler(this.pictureBoxLocomotive_Resize); + // + // statusStrip1 + // + this.statusStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripStatusLabelSpeed, + this.toolStripStatusLabelWeight, + this.toolStripStatusLabelColor}); + this.statusStrip1.Location = new System.Drawing.Point(0, 416); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Size = new System.Drawing.Size(778, 26); + this.statusStrip1.TabIndex = 1; + this.statusStrip1.Text = "statusStrip1"; + // + // toolStripStatusLabelSpeed + // + this.toolStripStatusLabelSpeed.Name = "toolStripStatusLabelSpeed"; + this.toolStripStatusLabelSpeed.Size = new System.Drawing.Size(51, 20); + this.toolStripStatusLabelSpeed.Text = "Speed"; + // + // toolStripStatusLabelWeight + // + this.toolStripStatusLabelWeight.Name = "toolStripStatusLabelWeight"; + this.toolStripStatusLabelWeight.Size = new System.Drawing.Size(56, 20); + this.toolStripStatusLabelWeight.Text = "Weight"; + // + // toolStripStatusLabelColor + // + this.toolStripStatusLabelColor.Name = "toolStripStatusLabelColor"; + this.toolStripStatusLabelColor.Size = new System.Drawing.Size(45, 20); + this.toolStripStatusLabelColor.Text = "Color"; + // + // buttonCreate + // + this.buttonCreate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonCreate.Location = new System.Drawing.Point(12, 377); + this.buttonCreate.Name = "buttonCreate"; + this.buttonCreate.Size = new System.Drawing.Size(94, 29); + this.buttonCreate.TabIndex = 2; + this.buttonCreate.Text = "Create "; + this.buttonCreate.UseVisualStyleBackColor = true; + this.buttonCreate.Click += new System.EventHandler(this.buttonCreate_Click); + // + // buttonUp + // + this.buttonUp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonUp.BackgroundImage = global::Locomotive.Properties.Resources.up_arrow; + this.buttonUp.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonUp.Location = new System.Drawing.Point(680, 320); + this.buttonUp.Name = "buttonUp"; + this.buttonUp.Size = new System.Drawing.Size(40, 40); + this.buttonUp.TabIndex = 3; + this.buttonUp.UseVisualStyleBackColor = true; + this.buttonUp.Click += new System.EventHandler(this.ButtonMove_Click); + // + // buttonLeft + // + this.buttonLeft.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonLeft.BackgroundImage = global::Locomotive.Properties.Resources.left_arrow; + this.buttonLeft.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonLeft.Location = new System.Drawing.Point(634, 366); + this.buttonLeft.Name = "buttonLeft"; + this.buttonLeft.Size = new System.Drawing.Size(40, 40); + this.buttonLeft.TabIndex = 4; + this.buttonLeft.UseVisualStyleBackColor = true; + this.buttonLeft.Click += new System.EventHandler(this.ButtonMove_Click); + // + // buttonDown + // + this.buttonDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonDown.BackgroundImage = global::Locomotive.Properties.Resources.down_arrow; + this.buttonDown.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonDown.Location = new System.Drawing.Point(680, 366); + this.buttonDown.Name = "buttonDown"; + this.buttonDown.Size = new System.Drawing.Size(40, 40); + this.buttonDown.TabIndex = 5; + this.buttonDown.UseVisualStyleBackColor = true; + this.buttonDown.Click += new System.EventHandler(this.ButtonMove_Click); + // + // buttonRight + // + this.buttonRight.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonRight.BackgroundImage = global::Locomotive.Properties.Resources.right_arrow; + this.buttonRight.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.buttonRight.Location = new System.Drawing.Point(726, 366); + this.buttonRight.Name = "buttonRight"; + this.buttonRight.Size = new System.Drawing.Size(40, 40); + this.buttonRight.TabIndex = 6; + this.buttonRight.UseVisualStyleBackColor = true; + this.buttonRight.Click += new System.EventHandler(this.ButtonMove_Click); + // + // FormLocomotive + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(778, 442); + this.Controls.Add(this.buttonRight); + this.Controls.Add(this.buttonDown); + this.Controls.Add(this.buttonLeft); + this.Controls.Add(this.buttonUp); + this.Controls.Add(this.buttonCreate); + this.Controls.Add(this.pictureBoxLocomotive); + this.Controls.Add(this.statusStrip1); + this.Name = "FormLocomotive"; + this.Text = "Locomotive"; + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxLocomotive)).EndInit(); + this.statusStrip1.ResumeLayout(false); + this.statusStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private PictureBox pictureBoxLocomotive; + private StatusStrip statusStrip1; + private ToolStripStatusLabel toolStripStatusLabelSpeed; + private ToolStripStatusLabel toolStripStatusLabelWeight; + private ToolStripStatusLabel toolStripStatusLabelColor; + private Button buttonCreate; + private Button buttonUp; + private Button buttonLeft; + private Button buttonDown; + private Button buttonRight; + } +} \ No newline at end of file diff --git a/Locomotive/Locomotive/FormLocomotive.cs b/Locomotive/Locomotive/FormLocomotive.cs new file mode 100644 index 0000000..8bd2853 --- /dev/null +++ b/Locomotive/Locomotive/FormLocomotive.cs @@ -0,0 +1,62 @@ +namespace Locomotive +{ + public partial class FormLocomotive : Form + { + private DrawningLocomotive _locomotive; + + public FormLocomotive() + { + InitializeComponent(); + } + + /// + private void Draw() + { + Bitmap bmp = new(pictureBoxLocomotive.Width, pictureBoxLocomotive.Height); + Graphics gr = Graphics.FromImage(bmp); + _locomotive?.DrawTransport(gr); + pictureBoxLocomotive.Image = bmp; + } + + private void buttonCreate_Click(object sender, EventArgs e) + { + Random rnd = new(); + _locomotive = new DrawningLocomotive(); + _locomotive.Init(rnd.Next(100, 300), rnd.Next(1000, 2000), Color.FromArgb(rnd.Next(0, 256), rnd.Next(0, 256), rnd.Next(0, 256))); + _locomotive.SetPosition(rnd.Next(10, 100), rnd.Next(10, 100), pictureBoxLocomotive.Width, pictureBoxLocomotive.Height); + toolStripStatusLabelSpeed.Text = $"Speed: {_locomotive.Locomotive.Speed}"; + toolStripStatusLabelWeight.Text = $"Weight: {_locomotive.Locomotive.Weight}"; + toolStripStatusLabelColor.Text = $"Color: {_locomotive.Locomotive.BodyColor.Name}"; + Draw(); + } + + private void ButtonMove_Click(object sender, EventArgs e) + { + // + string name = ((Button)sender)?.Name ?? string.Empty; + switch (name) + { + case "buttonUp": + _locomotive?.MoveTransport(Direction.Up); + break; + case "buttonDown": + _locomotive?.MoveTransport(Direction.Down); + break; + case "buttonLeft": + _locomotive?.MoveTransport(Direction.Left); + break; + case "buttonRight": + _locomotive?.MoveTransport(Direction.Right); + break; + } + Draw(); + } + + private void pictureBoxLocomotive_Click() { } + private void pictureBoxLocomotive_Resize(object sender, EventArgs e) + { + _locomotive?.ChangeBorders(pictureBoxLocomotive.Width, pictureBoxLocomotive.Height); + Draw(); + } + } +} \ No newline at end of file diff --git a/Locomotive/Locomotive/FormLocomotive.resx b/Locomotive/Locomotive/FormLocomotive.resx new file mode 100644 index 0000000..5cb320f --- /dev/null +++ b/Locomotive/Locomotive/FormLocomotive.resx @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Locomotive/Locomotive/Locomotive.csproj b/Locomotive/Locomotive/Locomotive.csproj index b57c89e..13ee123 100644 --- a/Locomotive/Locomotive/Locomotive.csproj +++ b/Locomotive/Locomotive/Locomotive.csproj @@ -8,4 +8,19 @@ enable + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/Locomotive/Locomotive/Program.cs b/Locomotive/Locomotive/Program.cs index 1b9db46..36de08b 100644 --- a/Locomotive/Locomotive/Program.cs +++ b/Locomotive/Locomotive/Program.cs @@ -11,7 +11,7 @@ namespace Locomotive // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new Form1()); + Application.Run(new FormLocomotive()); } } } \ No newline at end of file diff --git a/Locomotive/Locomotive/Properties/Resources.Designer.cs b/Locomotive/Locomotive/Properties/Resources.Designer.cs new file mode 100644 index 0000000..ad0b884 --- /dev/null +++ b/Locomotive/Locomotive/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Locomotive.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [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() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [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("Locomotive.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap down_arrow { + get { + object obj = ResourceManager.GetObject("down-arrow", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap left_arrow { + get { + object obj = ResourceManager.GetObject("left-arrow", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap right_arrow { + get { + object obj = ResourceManager.GetObject("right-arrow", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap up_arrow { + get { + object obj = ResourceManager.GetObject("up-arrow", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Locomotive/Locomotive/Form1.resx b/Locomotive/Locomotive/Properties/Resources.resx similarity index 83% rename from Locomotive/Locomotive/Form1.resx rename to Locomotive/Locomotive/Properties/Resources.resx index 1af7de1..62f89c1 100644 --- a/Locomotive/Locomotive/Form1.resx +++ b/Locomotive/Locomotive/Properties/Resources.resx @@ -117,4 +117,17 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\down-arrow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\left-arrow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\right-arrow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\up-arrow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Locomotive/Locomotive/Resources/down-arrow.png b/Locomotive/Locomotive/Resources/down-arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..f29232b022fddd1c0df87f14e153a88d3ff14b29 GIT binary patch literal 4917 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 literal 0 HcmV?d00001 diff --git a/Locomotive/Locomotive/Resources/left-arrow.png b/Locomotive/Locomotive/Resources/left-arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..8176032ee591f79b38097f6e3f3f997a25135e27 GIT binary patch literal 4719 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