diff --git a/RPP/RPP/AirbusGenericCollection.cs b/RPP/RPP/AirbusGenericCollection.cs index d1d2e86..317749f 100644 --- a/RPP/RPP/AirbusGenericCollection.cs +++ b/RPP/RPP/AirbusGenericCollection.cs @@ -1,10 +1,9 @@ - -using RPP.DrawningObjects; +using RPP.DrawningObjects; using RPP.MovementStrategy; namespace RPP.Generics { - public class AirbusGenericCollection + public class AirbusGenericCollection where T : DrawningAirbus where U : IMoveableObject { @@ -28,31 +27,31 @@ namespace RPP.Generics _collection = new SetGeneric(width * height); } - public static int? operator +(AirbusGenericCollection collect, T? obj) + public static bool operator +(AirbusGenericCollection collect, T? obj) { if (obj == null) { - return -1; + return false; } - return collect?._collection.Insert(obj); - } - - public static bool operator -(AirbusGenericCollection collect, int - pos) - { - T? obj = collect._collection.Get(pos); - if (obj != null) - { - return collect._collection.Remove(pos); - } - return false; + return (bool)collect?._collection.Insert(obj); } - + public static T? operator -(AirbusGenericCollection collect, int + pos) + { + T? obj = collect._collection[pos]; + if (obj != null) + { + collect._collection.Remove(pos); + } + return obj; + } + + public U? GetU(int pos) { - return (U?)_collection.Get(pos)?.GetMoveableObject; + return (U?)_collection[pos]?.GetMoveableObject; } public Bitmap ShowCars() @@ -85,17 +84,15 @@ namespace RPP.Generics { int width = _pictureWidth / _placeSizeWidth; int height = _pictureHeight / _placeSizeHeight; - for (int i = 0; i < _collection.Count; i++) + int i = 0; + foreach (var airbus in _collection.GetAirbus()) { - - DrawningAirbus accept = _collection.Get(i); - if (accept == null) { - continue; + if (airbus != null) + { + airbus.SetPosition((width - 1 - (i % width)) * _placeSizeWidth + 12, (height - 1 - (i / width)) * _placeSizeHeight + 10); + airbus.DrawTransport(g); } - - accept.SetPosition((width - 1 - (i % width)) * _placeSizeWidth + 12, (height - 1 - (i / width)) * _placeSizeHeight + 10); - - accept.DrawTransport(g); + i++; } } } diff --git a/RPP/RPP/AirbusGenericStorage.cs b/RPP/RPP/AirbusGenericStorage.cs new file mode 100644 index 0000000..8b0b220 --- /dev/null +++ b/RPP/RPP/AirbusGenericStorage.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using RPP.MovementStrategy; +using RPP.DrawningObjects; + + +namespace RPP.Generics +{ + internal class AirbusGenericStorage + { + readonly Dictionary> _airbusStorages; + + public List Keys => _airbusStorages.Keys.ToList(); + + private readonly int _pictureWidth; + + private readonly int _pictureHeight; + + public AirbusGenericStorage(int pictureWidth, int pictureHeight) + { + _airbusStorages = new Dictionary>(); + _pictureWidth = pictureWidth; + _pictureHeight = pictureHeight; + } + + public void AddSet(string name) + { + // TODO Прописать логику для добавления + if (_airbusStorages.ContainsKey(name)) return; + _airbusStorages[name] = new AirbusGenericCollection(_pictureWidth, _pictureHeight); + } + + public void DelSet(string name) + { + // TODO Прописать логику для удаления + if (!_airbusStorages.ContainsKey(name)) return; + _airbusStorages.Remove(name); + } + + public AirbusGenericCollection? + this[string ind] + { + get + { + // TODO Продумать логику получения набора + if(_airbusStorages.ContainsKey(ind)) return _airbusStorages[ind]; + return null; + } + } + } +} diff --git a/RPP/RPP/Airbus.Designer.cs b/RPP/RPP/FormAirbus.Designer.cs similarity index 100% rename from RPP/RPP/Airbus.Designer.cs rename to RPP/RPP/FormAirbus.Designer.cs diff --git a/RPP/RPP/Airbus.cs b/RPP/RPP/FormAirbus.cs similarity index 100% rename from RPP/RPP/Airbus.cs rename to RPP/RPP/FormAirbus.cs diff --git a/RPP/RPP/Airbus.resx b/RPP/RPP/FormAirbus.resx similarity index 100% rename from RPP/RPP/Airbus.resx rename to RPP/RPP/FormAirbus.resx diff --git a/RPP/RPP/FormAirbusCollection.Designer.cs b/RPP/RPP/FormAirbusCollection.Designer.cs index 7c7aab6..349195b 100644 --- a/RPP/RPP/FormAirbusCollection.Designer.cs +++ b/RPP/RPP/FormAirbusCollection.Designer.cs @@ -29,34 +29,109 @@ private void InitializeComponent() { panel1 = new Panel(); + panel2 = new Panel(); + buttonDelObject = new Button(); + listBoxStorages = new ListBox(); + buttonAddObject = new Button(); + textBoxStorageName = new TextBox(); + label2 = new Label(); ButtonRefreshCollection = new Button(); ButtonRemoveAirbus = new Button(); maskedTextBoxNumber = new TextBox(); AddAirbusButton = new Button(); - label = new Label(); + label1 = new Label(); pictureBoxCollection = new PictureBox(); panel1.SuspendLayout(); + panel2.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)pictureBoxCollection).BeginInit(); SuspendLayout(); // // panel1 // + panel1.Controls.Add(panel2); panel1.Controls.Add(ButtonRefreshCollection); panel1.Controls.Add(ButtonRemoveAirbus); panel1.Controls.Add(maskedTextBoxNumber); panel1.Controls.Add(AddAirbusButton); - panel1.Controls.Add(label); + panel1.Controls.Add(label1); panel1.Dock = DockStyle.Right; - panel1.Location = new Point(600, 0); + panel1.Location = new Point(685, 0); + panel1.Margin = new Padding(3, 4, 3, 4); panel1.Name = "panel1"; - panel1.Size = new Size(200, 450); + panel1.Size = new Size(229, 600); panel1.TabIndex = 0; // + // panel2 + // + panel2.Controls.Add(buttonDelObject); + panel2.Controls.Add(listBoxStorages); + panel2.Controls.Add(buttonAddObject); + panel2.Controls.Add(textBoxStorageName); + panel2.Controls.Add(label2); + panel2.Location = new Point(3, 36); + panel2.Margin = new Padding(3, 4, 3, 4); + panel2.Name = "panel2"; + panel2.Size = new Size(219, 292); + panel2.TabIndex = 5; + panel2.Paint += panel2_Paint; + // + // buttonDelObject + // + buttonDelObject.Location = new Point(15, 240); + buttonDelObject.Margin = new Padding(3, 4, 3, 4); + buttonDelObject.Name = "buttonDelObject"; + buttonDelObject.Size = new Size(197, 48); + buttonDelObject.TabIndex = 4; + buttonDelObject.Text = "Удалить набор"; + buttonDelObject.UseVisualStyleBackColor = true; + buttonDelObject.Click += ButtonDelObject_Click; + // + // listBoxStorages + // + listBoxStorages.FormattingEnabled = true; + listBoxStorages.ItemHeight = 20; + listBoxStorages.Location = new Point(15, 127); + listBoxStorages.Margin = new Padding(3, 4, 3, 4); + listBoxStorages.Name = "listBoxStorages"; + listBoxStorages.Size = new Size(196, 104); + listBoxStorages.TabIndex = 3; + listBoxStorages.SelectedIndexChanged += ListBoxObjects_SelectedIndexChanged; + // + // buttonAddObject + // + buttonAddObject.Location = new Point(15, 64); + buttonAddObject.Margin = new Padding(3, 4, 3, 4); + buttonAddObject.Name = "buttonAddObject"; + buttonAddObject.Size = new Size(197, 55); + buttonAddObject.TabIndex = 2; + buttonAddObject.Text = "Добавить набор"; + buttonAddObject.UseVisualStyleBackColor = true; + buttonAddObject.Click += ButtonAddObject_Click; + // + // textBoxStorageName + // + textBoxStorageName.Location = new Point(15, 25); + textBoxStorageName.Margin = new Padding(3, 4, 3, 4); + textBoxStorageName.Name = "textBoxStorageName"; + textBoxStorageName.Size = new Size(196, 27); + textBoxStorageName.TabIndex = 1; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(17, 0); + label2.Name = "label2"; + label2.Size = new Size(66, 20); + label2.TabIndex = 0; + label2.Text = "Наборы"; + label2.Click += label2_Click; + // // ButtonRefreshCollection // - ButtonRefreshCollection.Location = new Point(5, 236); + ButtonRefreshCollection.Location = new Point(6, 543); + ButtonRefreshCollection.Margin = new Padding(3, 4, 3, 4); ButtonRefreshCollection.Name = "ButtonRefreshCollection"; - ButtonRefreshCollection.Size = new Size(190, 40); + ButtonRefreshCollection.Size = new Size(217, 53); ButtonRefreshCollection.TabIndex = 4; ButtonRefreshCollection.Text = "Обновить коллекцию"; ButtonRefreshCollection.UseVisualStyleBackColor = true; @@ -64,9 +139,10 @@ // // ButtonRemoveAirbus // - ButtonRemoveAirbus.Location = new Point(5, 154); + ButtonRemoveAirbus.Location = new Point(6, 436); + ButtonRemoveAirbus.Margin = new Padding(3, 4, 3, 4); ButtonRemoveAirbus.Name = "ButtonRemoveAirbus"; - ButtonRemoveAirbus.Size = new Size(190, 40); + ButtonRemoveAirbus.Size = new Size(217, 53); ButtonRemoveAirbus.TabIndex = 3; ButtonRemoveAirbus.Text = "Удалить аэробус"; ButtonRemoveAirbus.UseVisualStyleBackColor = true; @@ -74,51 +150,57 @@ // // maskedTextBoxNumber // - maskedTextBoxNumber.Location = new Point(45, 125); + maskedTextBoxNumber.Location = new Point(46, 397); + maskedTextBoxNumber.Margin = new Padding(3, 4, 3, 4); maskedTextBoxNumber.Name = "maskedTextBoxNumber"; - maskedTextBoxNumber.Size = new Size(98, 23); + maskedTextBoxNumber.Size = new Size(111, 27); maskedTextBoxNumber.TabIndex = 2; // // AddAirbusButton // - AddAirbusButton.Location = new Point(5, 36); + AddAirbusButton.Location = new Point(6, 336); + AddAirbusButton.Margin = new Padding(3, 4, 3, 4); AddAirbusButton.Name = "AddAirbusButton"; - AddAirbusButton.Size = new Size(190, 40); + AddAirbusButton.Size = new Size(217, 53); AddAirbusButton.TabIndex = 1; AddAirbusButton.Text = "Добавить аэробус"; AddAirbusButton.UseVisualStyleBackColor = true; AddAirbusButton.Click += AddAirbusButton_Click; // - // label + // label1 // - label.AutoSize = true; - label.Location = new Point(5, 0); - label.Name = "label"; - label.Size = new Size(83, 15); - label.TabIndex = 0; - label.Text = "Инструменты"; + label1.AutoSize = true; + label1.Location = new Point(6, 0); + label1.Name = "label1"; + label1.Size = new Size(103, 20); + label1.TabIndex = 0; + label1.Text = "Инструменты"; // // pictureBoxCollection // pictureBoxCollection.Dock = DockStyle.Fill; pictureBoxCollection.Location = new Point(0, 0); + pictureBoxCollection.Margin = new Padding(3, 4, 3, 4); pictureBoxCollection.Name = "pictureBoxCollection"; - pictureBoxCollection.Size = new Size(600, 450); + pictureBoxCollection.Size = new Size(685, 600); pictureBoxCollection.TabIndex = 1; pictureBoxCollection.TabStop = false; // // FormAirbusCollection // - AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(800, 450); + ClientSize = new Size(914, 600); Controls.Add(pictureBoxCollection); Controls.Add(panel1); + Margin = new Padding(3, 4, 3, 4); Name = "FormAirbusCollection"; Text = "FormFlyAirbus"; Load += FormFlyAirbus_Load; panel1.ResumeLayout(false); panel1.PerformLayout(); + panel2.ResumeLayout(false); + panel2.PerformLayout(); ((System.ComponentModel.ISupportInitialize)pictureBoxCollection).EndInit(); ResumeLayout(false); } @@ -127,10 +209,16 @@ private Panel panel1; private Button AddAirbusButton; - private Label label; + private Label label1; private PictureBox pictureBoxCollection; private Button ButtonRefreshCollection; private Button ButtonRemoveAirbus; private TextBox maskedTextBoxNumber; + private Panel panel2; + private Label label2; + private TextBox textBoxStorageName; + private ListBox listBoxStorages; + private Button buttonAddObject; + private Button buttonDelObject; } } \ No newline at end of file diff --git a/RPP/RPP/FormAirbusCollection.cs b/RPP/RPP/FormAirbusCollection.cs index 1e174c1..8dc7fe1 100644 --- a/RPP/RPP/FormAirbusCollection.cs +++ b/RPP/RPP/FormAirbusCollection.cs @@ -1,19 +1,18 @@ using RPP.DrawningObjects; -using RPP.MovementStrategy; using RPP.Generics; +using RPP.MovementStrategy; namespace RPP { public partial class FormAirbusCollection : Form { - private readonly AirbusGenericCollection _Airbus; + private readonly AirbusGenericStorage _storage; public FormAirbusCollection() { InitializeComponent(); - _Airbus = new AirbusGenericCollection(pictureBoxCollection.Width, pictureBoxCollection.Height); - + _storage = new AirbusGenericStorage(pictureBoxCollection.Width, pictureBoxCollection.Height); } private void FormFlyAirbus_Load(object sender, EventArgs e) @@ -23,33 +22,99 @@ namespace RPP private void AddAirbusButton_Click(object sender, EventArgs e) { + if (listBoxStorages.SelectedIndex == -1) + { + return; + } + var obj = _storage[listBoxStorages.SelectedItem.ToString() ?? string.Empty]; + if (obj == null) + { + return; + } FormAirbus form = new(); if (form.ShowDialog() == DialogResult.OK) { - if (_Airbus + form.SelectedAirbus > -1) + if (obj + form.SelectedAirbus) { MessageBox.Show("Объект добавлен"); - pictureBoxCollection.Image = _Airbus.ShowCars(); + pictureBoxCollection.Image = obj.ShowCars(); } else { MessageBox.Show("Не удалось добавить объект"); } } + + } + private void ReloadObjects() + { + int index = listBoxStorages.SelectedIndex; + listBoxStorages.Items.Clear(); + foreach (var key in _storage.Keys) + { + listBoxStorages.Items.Add(key); + } + if (listBoxStorages.Items.Count > 0 && (index == -1 || index + >= listBoxStorages.Items.Count)) + { + listBoxStorages.SelectedIndex = 0; + } + else if (listBoxStorages.Items.Count > 0 && index > -1 && + index < listBoxStorages.Items.Count) + { + listBoxStorages.SelectedIndex = index; + } + } + + private void ButtonAddObject_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(textBoxStorageName.Text)) + { + MessageBox.Show("Не все данные заполнены", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + _storage.AddSet(textBoxStorageName.Text); + ReloadObjects(); + } + private void ListBoxObjects_SelectedIndexChanged(object sender, EventArgs e) + { + pictureBoxCollection.Image = _storage[listBoxStorages.SelectedItem?.ToString() ?? string.Empty]?.ShowCars(); + } + + private void ButtonDelObject_Click(object sender, EventArgs e) + { + if (listBoxStorages.SelectedIndex == -1) + { + return; + } + if (MessageBox.Show($"Удалить объект {listBoxStorages.SelectedItem}?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) + { + _storage.DelSet(listBoxStorages.SelectedItem.ToString() ?? string.Empty); + ReloadObjects(); + } } private void ButtonRemoveAirbus_Click(object sender, EventArgs e) { - if (MessageBox.Show("Удалить объект?", "Удаление", - MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) + if (listBoxStorages.SelectedIndex == -1) + { + return; + } + var obj = _storage[listBoxStorages.SelectedItem.ToString() ?? string.Empty]; + if (obj == null) + { + return; + } + if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { return; } int pos = Convert.ToInt32(maskedTextBoxNumber.Text); - if (_Airbus - pos != null) + if (obj - pos != null) { MessageBox.Show("Объект удален"); - pictureBoxCollection.Image = _Airbus.ShowCars(); + pictureBoxCollection.Image = obj.ShowCars(); } else { @@ -59,7 +124,26 @@ namespace RPP private void ButtonRefreshCollection_Click(object sender, EventArgs e) { - pictureBoxCollection.Image = _Airbus.ShowCars(); + if (listBoxStorages.SelectedIndex == -1) + { + return; + } + var obj = _storage[listBoxStorages.SelectedItem.ToString() ?? string.Empty]; + if (obj == null) + { + return; + } + pictureBoxCollection.Image = obj.ShowCars(); + } + + private void panel2_Paint(object sender, PaintEventArgs e) + { + + } + + private void label2_Click(object sender, EventArgs e) + { + } } } diff --git a/RPP/RPP/FormAirbusCollection.resx b/RPP/RPP/FormAirbusCollection.resx index af32865..a395bff 100644 --- a/RPP/RPP/FormAirbusCollection.resx +++ b/RPP/RPP/FormAirbusCollection.resx @@ -18,7 +18,7 @@ System.Resources.ResXResourceReader, System.Windows.Forms, ... System.Resources.ResXResourceWriter, System.Windows.Forms, ... this is my long stringthis is a comment - Blue + Blue [base64 mime encoded serialized .NET Framework object] diff --git a/RPP/RPP/SetGeneric.cs b/RPP/RPP/SetGeneric.cs index ac03965..0487579 100644 --- a/RPP/RPP/SetGeneric.cs +++ b/RPP/RPP/SetGeneric.cs @@ -7,67 +7,81 @@ using System.Threading.Tasks; namespace RPP.Generics { - internal class SetGeneric where T : class + public class SetGeneric where T : class { - - private readonly T?[] _places; - - public int Count => _places.Length; - + + private readonly List _places; + + public int Count => _places.Count; + private readonly int _maxCount; public SetGeneric(int count) { - _places = new T?[count]; + _maxCount = count; + _places = new List(_maxCount); } - - public int Insert(T airbus) + + public bool Insert(T airbus) { return Insert(airbus, 0); } - - public int Insert(T airbus, int position) + + public bool Insert(T airbus, int position) { - - if(position < 0 && position > Count) { - return -1; - } - if (_places[position] != null) - { - int d = 0; - for (int j = 1; j < Count - position; j++) - { - if (_places[position + j] == null) - { - d = position + j; - break; - } - } - if (d == 0) { - return -1; - } - for(int j = d; j > position; j--) { - _places[j] = _places[j - 1]; - } - } - - _places[position] = airbus; - return position; - } - - public bool Remove(int position) - { - - if (position < 0 && position > Count) + + if (position < 0 || position >= _maxCount) { return false; } - _places[position] = null; + if (Count >= _maxCount) + { + return false; + } + + _places.Insert(0, airbus); return true; } - - public T? Get(int position) + + public bool Remove(int position) { - return _places[position]; + + if (position < 0 || position > _maxCount) + { + return false; + } + if (position >= Count) + { + return false; + } + _places.RemoveAt(position); + return true; + } + + public T? this[int position] + { + get + { + if (position < 0 || position > _maxCount) + return null; + return _places[position]; + } + set + { + if (position < 0 || position > _maxCount) + return; + _places[position] = value; + } + } + public IEnumerable GetAirbus(int? maxAirbus = null) + { + for (int i = 0; i < _places.Count; ++i) + { + yield return _places[i]; + if (maxAirbus.HasValue && i == maxAirbus.Value) + { + yield break; + } + } } } }