diff --git a/ProjectWarmlyShip/ProjectWarmlyShip/ExtentionDrawingShip.cs b/ProjectWarmlyShip/ProjectWarmlyShip/ExtentionDrawingShip.cs
new file mode 100644
index 0000000..73f3216
--- /dev/null
+++ b/ProjectWarmlyShip/ProjectWarmlyShip/ExtentionDrawingShip.cs
@@ -0,0 +1,49 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using ProjectWarmlyShip.DrawingObjects;
+using ProjectWarmlyShip.Entities;
+
+namespace ProjectWarmlyShip
+{
+ public static class ExtentionDrawingShip
+ {
+ public static DrawingShip? CreateDrawingShip(this string info,
+ char separatorForObjects, int width, int height)
+ {
+ string[] strs = info.Split(separatorForObjects);
+ if (strs.Length == 3)
+ {
+ return new DrawingShip(Convert.ToInt32(strs[0]), Convert.ToInt32(strs[1]),
+ Color.FromName(strs[2]), width, height);
+ }
+ if (strs.Length == 6)
+ {
+ return new DrawingWarmlyShip(Convert.ToInt32(strs[0]), Convert.ToInt32(strs[1]),
+ Color.FromName(strs[2]), Color.FromName(strs[3]), Convert.ToBoolean(strs[4]),
+ Convert.ToBoolean(strs[5]), width, height);
+ }
+ return null;
+ }
+
+ public static string GetDataForSave(this DrawingShip drawingShip, char separatorForObjects)
+ {
+ var ship = drawingShip.EntityShip;
+ if (ship == null)
+ {
+ return string.Empty;
+ }
+ var str =
+ $"{ship.Speed}{separatorForObjects}{ship.Weight}{separatorForObjects}{ship.MainColor.Name}";
+ if (ship is not EntityWarmlyShip warmlyShip)
+ {
+ return str;
+ }
+ return
+ $"{str}{separatorForObjects}{warmlyShip.OptionalColor.Name}{separatorForObjects}" +
+ $"{warmlyShip.Pipes}{separatorForObjects}{warmlyShip.FuelCompartment}";
+ }
+ }
+}
diff --git a/ProjectWarmlyShip/ProjectWarmlyShip/FormShipCollection.Designer.cs b/ProjectWarmlyShip/ProjectWarmlyShip/FormShipCollection.Designer.cs
index 5d47a03..5641a7b 100644
--- a/ProjectWarmlyShip/ProjectWarmlyShip/FormShipCollection.Designer.cs
+++ b/ProjectWarmlyShip/ProjectWarmlyShip/FormShipCollection.Designer.cs
@@ -39,14 +39,21 @@
buttonRefresh = new Button();
buttonDeleteShip = new Button();
buttonAddShip = new Button();
+ StripMenu = new MenuStrip();
+ fileToolStripMenuItem = new ToolStripMenuItem();
+ saveToolStripMenuItem = new ToolStripMenuItem();
+ loadToolStripMenuItem = new ToolStripMenuItem();
+ SaveFileDialog = new SaveFileDialog();
+ OpenFileDialog = new OpenFileDialog();
((System.ComponentModel.ISupportInitialize)pictureBoxCollection).BeginInit();
Tools.SuspendLayout();
Sets.SuspendLayout();
+ StripMenu.SuspendLayout();
SuspendLayout();
//
// pictureBoxCollection
//
- pictureBoxCollection.Location = new Point(0, 0);
+ pictureBoxCollection.Location = new Point(0, 25);
pictureBoxCollection.Name = "pictureBoxCollection";
pictureBoxCollection.Size = new Size(700, 460);
pictureBoxCollection.TabIndex = 0;
@@ -59,7 +66,7 @@
Tools.Controls.Add(buttonRefresh);
Tools.Controls.Add(buttonDeleteShip);
Tools.Controls.Add(buttonAddShip);
- Tools.Location = new Point(700, 0);
+ Tools.Location = new Point(700, 25);
Tools.Name = "Tools";
Tools.Size = new Size(180, 460);
Tools.TabIndex = 1;
@@ -153,13 +160,54 @@
buttonAddShip.UseVisualStyleBackColor = true;
buttonAddShip.Click += ButtonAddShip_Click;
//
+ // StripMenu
+ //
+ StripMenu.Items.AddRange(new ToolStripItem[] { fileToolStripMenuItem });
+ StripMenu.Location = new Point(0, 0);
+ StripMenu.Name = "StripMenu";
+ StripMenu.Size = new Size(884, 24);
+ StripMenu.TabIndex = 2;
+ StripMenu.Text = "menuStrip1";
+ //
+ // fileToolStripMenuItem
+ //
+ fileToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { saveToolStripMenuItem, loadToolStripMenuItem });
+ fileToolStripMenuItem.Name = "fileToolStripMenuItem";
+ fileToolStripMenuItem.Size = new Size(37, 20);
+ fileToolStripMenuItem.Text = "File";
+ //
+ // saveToolStripMenuItem
+ //
+ saveToolStripMenuItem.Name = "saveToolStripMenuItem";
+ saveToolStripMenuItem.Size = new Size(180, 22);
+ saveToolStripMenuItem.Text = "Save";
+ saveToolStripMenuItem.Click += SaveToolStripMenu_Click;
+ //
+ // loadToolStripMenuItem
+ //
+ loadToolStripMenuItem.Name = "loadToolStripMenuItem";
+ loadToolStripMenuItem.Size = new Size(180, 22);
+ loadToolStripMenuItem.Text = "Load";
+ loadToolStripMenuItem.Click += LoadToolStripMenu_Click;
+ //
+ // SaveFileDialog
+ //
+ SaveFileDialog.Filter = "txt file | *.txt";
+ //
+ // OpenFileDialog
+ //
+ OpenFileDialog.FileName = "openFileDialog1";
+ OpenFileDialog.Filter = "txt file | *.txt";
+ //
// FormShipCollection
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
- ClientSize = new Size(884, 461);
+ ClientSize = new Size(884, 491);
Controls.Add(Tools);
Controls.Add(pictureBoxCollection);
+ Controls.Add(StripMenu);
+ MainMenuStrip = StripMenu;
Name = "FormShipCollection";
Text = "FormShipCollection";
((System.ComponentModel.ISupportInitialize)pictureBoxCollection).EndInit();
@@ -167,7 +215,10 @@
Tools.PerformLayout();
Sets.ResumeLayout(false);
Sets.PerformLayout();
+ StripMenu.ResumeLayout(false);
+ StripMenu.PerformLayout();
ResumeLayout(false);
+ PerformLayout();
}
#endregion
@@ -183,5 +234,11 @@
private Button DeleteSetButton;
private Button AddSetButton;
private TextBox textBoxStorageName;
+ private MenuStrip StripMenu;
+ private ToolStripMenuItem fileToolStripMenuItem;
+ private ToolStripMenuItem saveToolStripMenuItem;
+ private ToolStripMenuItem loadToolStripMenuItem;
+ private SaveFileDialog SaveFileDialog;
+ private OpenFileDialog OpenFileDialog;
}
}
\ No newline at end of file
diff --git a/ProjectWarmlyShip/ProjectWarmlyShip/FormShipCollection.cs b/ProjectWarmlyShip/ProjectWarmlyShip/FormShipCollection.cs
index 2a03159..2fd283e 100644
--- a/ProjectWarmlyShip/ProjectWarmlyShip/FormShipCollection.cs
+++ b/ProjectWarmlyShip/ProjectWarmlyShip/FormShipCollection.cs
@@ -156,5 +156,38 @@ namespace ProjectWarmlyShip
}
pictureBoxCollection.Image = obj.ShowShips();
}
+ private void SaveToolStripMenu_Click(object sender, EventArgs e)
+ {
+ if (SaveFileDialog.ShowDialog() == DialogResult.OK)
+ {
+ if (_storage.SaveData(SaveFileDialog.FileName))
+ {
+ MessageBox.Show("Save Complete", "Result",
+ MessageBoxButtons.OK, MessageBoxIcon.Information);
+ }
+ else
+ {
+ MessageBox.Show("Save Not Complete", "Result",
+ MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+ }
+ private void LoadToolStripMenu_Click(object sender, EventArgs args)
+ {
+ if (OpenFileDialog.ShowDialog() == DialogResult.OK)
+ {
+ if (_storage.LoadData(OpenFileDialog.FileName))
+ {
+ MessageBox.Show("Load Complete", "Result",
+ MessageBoxButtons.OK, MessageBoxIcon.Information);
+ ReloadObjects();
+ }
+ else
+ {
+ MessageBox.Show("Load Not Complete", "Result",
+ MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+ }
}
}
diff --git a/ProjectWarmlyShip/ProjectWarmlyShip/FormShipCollection.resx b/ProjectWarmlyShip/ProjectWarmlyShip/FormShipCollection.resx
index f298a7b..9bcb1ac 100644
--- a/ProjectWarmlyShip/ProjectWarmlyShip/FormShipCollection.resx
+++ b/ProjectWarmlyShip/ProjectWarmlyShip/FormShipCollection.resx
@@ -57,4 +57,13 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ 17, 17
+
+
+ 125, 17
+
+
+ 256, 17
+
\ No newline at end of file
diff --git a/ProjectWarmlyShip/ProjectWarmlyShip/ShipsGenericCollection.cs b/ProjectWarmlyShip/ProjectWarmlyShip/ShipsGenericCollection.cs
index ed0fcdd..aafd3c9 100644
--- a/ProjectWarmlyShip/ProjectWarmlyShip/ShipsGenericCollection.cs
+++ b/ProjectWarmlyShip/ProjectWarmlyShip/ShipsGenericCollection.cs
@@ -85,5 +85,6 @@ namespace ProjectWarmlyShip.Generics
i++;
}
}
+ public IEnumerable GetShips => _collection.GetShips();
}
}
diff --git a/ProjectWarmlyShip/ProjectWarmlyShip/ShipsGenericStorage.cs b/ProjectWarmlyShip/ProjectWarmlyShip/ShipsGenericStorage.cs
index 992d1cd..245c43f 100644
--- a/ProjectWarmlyShip/ProjectWarmlyShip/ShipsGenericStorage.cs
+++ b/ProjectWarmlyShip/ProjectWarmlyShip/ShipsGenericStorage.cs
@@ -15,6 +15,9 @@ namespace ProjectWarmlyShip.Generics
public List Keys => _shipStorages.Keys.ToList();
private readonly int _pictuteWidth;
private readonly int _pictuteHeight;
+ private static readonly char _separatorForKeyValue = '|';
+ private readonly char _separatorRecords = ';';
+ private static readonly char _separatorForObjects = ':';
public ShipsGenericStorage(int pictureWidth, int pictureHeight)
{
_shipStorages = new Dictionary>();
@@ -47,5 +50,82 @@ namespace ProjectWarmlyShip.Generics
return null;
}
}
+ public bool SaveData(string filename)
+ {
+ if (File.Exists(filename))
+ {
+ File.Delete(filename);
+ }
+ StringBuilder data = new();
+ foreach (KeyValuePair> record in _shipStorages)
+ {
+ StringBuilder records = new();
+ foreach (DrawingShip? elem in record.Value.GetShips)
+ {
+ records.Append($"{elem?.GetDataForSave(_separatorForObjects)}{_separatorRecords}");
+ }
+ data.AppendLine($"{record.Key}{_separatorForKeyValue}{records}");
+ }
+ if (data.Length == 0)
+ {
+ return false;
+ }
+ using (StreamWriter writer = new StreamWriter(filename))
+ {
+ writer.Write($"ShipStorage{Environment.NewLine}{data}");
+ }
+ return true;
+ }
+
+ public bool LoadData(string filename)
+ {
+ if (!File.Exists(filename))
+ {
+ return false;
+ }
+ string bufferTextFromFile = "";
+ using (StreamReader reader = new StreamReader(filename))
+ {
+ string str;
+ while ((str = reader.ReadLine()) != null)
+ {
+ bufferTextFromFile += str + '\r' + '\n';
+ }
+ }
+ var strs = bufferTextFromFile.Split(new char[] { '\n', '\r' },
+ StringSplitOptions.RemoveEmptyEntries);
+ if (strs.Length == 0 || strs == null)
+ {
+ return false;
+ }
+ if (!strs[0].StartsWith("ShipStorage"))
+ {
+ return false;
+ }
+ _shipStorages.Clear();
+ foreach (string data in strs)
+ {
+ string[] record = data.Split(_separatorForKeyValue, StringSplitOptions.RemoveEmptyEntries);
+ if (record.Length != 2)
+ {
+ continue;
+ }
+ ShipsGenericCollection collection = new(_pictuteWidth, _pictuteHeight);
+ string[] set = record[1].Split(_separatorRecords, StringSplitOptions.RemoveEmptyEntries);
+ foreach (string elem in set)
+ {
+ DrawingShip? ship = elem.CreateDrawingShip(_separatorForObjects, _pictuteWidth, _pictuteHeight);
+ if (ship != null)
+ {
+ if (!(collection + ship))
+ {
+ return false;
+ }
+ }
+ }
+ _shipStorages.Add(record[0], collection);
+ }
+ return true;
+ }
}
}