From 4c587a27a2faa3bb9be378d6448c1d500963263d Mon Sep 17 00:00:00 2001 From: MattNL Date: Sat, 10 Jun 2023 07:29:39 -0400 Subject: [PATCH] Expanded pack icon feature --- PCK-Studio/MainForm.Designer.cs | 44 ++++++++-------- PCK-Studio/MainForm.cs | 93 +++++++++++++++++++++++++++------ PCK-Studio/MainForm.resx | 47 ++++++++--------- 3 files changed, 121 insertions(+), 63 deletions(-) diff --git a/PCK-Studio/MainForm.Designer.cs b/PCK-Studio/MainForm.Designer.cs index e7ae73a6..7334b025 100644 --- a/PCK-Studio/MainForm.Designer.cs +++ b/PCK-Studio/MainForm.Designer.cs @@ -117,6 +117,9 @@ this.settingsToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.contextMenuMetaTree = new System.Windows.Forms.ContextMenuStrip(this.components); this.addEntryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.addEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.addBOXEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.addANIMEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.addMultipleEntriesToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.deleteEntryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.editAllEntriesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -143,9 +146,6 @@ this.treeViewMain = new System.Windows.Forms.TreeView(); this.imageList = new System.Windows.Forms.ImageList(this.components); this.LittleEndianCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.addEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.addBOXEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.addANIMEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.pictureBoxImagePreview = new PckStudio.PictureBoxWithInterpolationMode(); this.contextMenuPCKEntries.SuspendLayout(); this.menuStrip.SuspendLayout(); @@ -559,8 +559,8 @@ // // addCustomPackImageToolStripMenuItem // - resources.ApplyResources(this.addCustomPackImageToolStripMenuItem, "addCustomPackImageToolStripMenuItem"); this.addCustomPackImageToolStripMenuItem.Name = "addCustomPackImageToolStripMenuItem"; + resources.ApplyResources(this.addCustomPackImageToolStripMenuItem, "addCustomPackImageToolStripMenuItem"); this.addCustomPackImageToolStripMenuItem.Click += new System.EventHandler(this.addCustomPackIconToolStripMenuItem_Click); // // openPckManagerToolStripMenuItem @@ -780,6 +780,24 @@ resources.ApplyResources(this.addEntryToolStripMenuItem, "addEntryToolStripMenuItem"); this.addEntryToolStripMenuItem.Name = "addEntryToolStripMenuItem"; // + // addEntryToolStripMenuItem1 + // + this.addEntryToolStripMenuItem1.Name = "addEntryToolStripMenuItem1"; + resources.ApplyResources(this.addEntryToolStripMenuItem1, "addEntryToolStripMenuItem1"); + this.addEntryToolStripMenuItem1.Click += new System.EventHandler(this.addEntryToolStripMenuItem_Click_1); + // + // addBOXEntryToolStripMenuItem1 + // + this.addBOXEntryToolStripMenuItem1.Name = "addBOXEntryToolStripMenuItem1"; + resources.ApplyResources(this.addBOXEntryToolStripMenuItem1, "addBOXEntryToolStripMenuItem1"); + this.addBOXEntryToolStripMenuItem1.Click += new System.EventHandler(this.addBOXEntryToolStripMenuItem1_Click); + // + // addANIMEntryToolStripMenuItem1 + // + this.addANIMEntryToolStripMenuItem1.Name = "addANIMEntryToolStripMenuItem1"; + resources.ApplyResources(this.addANIMEntryToolStripMenuItem1, "addANIMEntryToolStripMenuItem1"); + this.addANIMEntryToolStripMenuItem1.Click += new System.EventHandler(this.addANIMEntryToolStripMenuItem1_Click); + // // addMultipleEntriesToolStripMenuItem1 // resources.ApplyResources(this.addMultipleEntriesToolStripMenuItem1, "addMultipleEntriesToolStripMenuItem1"); @@ -1074,24 +1092,6 @@ this.LittleEndianCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; this.LittleEndianCheckBox.UseSelectable = true; // - // addEntryToolStripMenuItem1 - // - this.addEntryToolStripMenuItem1.Name = "addEntryToolStripMenuItem1"; - resources.ApplyResources(this.addEntryToolStripMenuItem1, "addEntryToolStripMenuItem1"); - this.addEntryToolStripMenuItem1.Click += new System.EventHandler(this.addEntryToolStripMenuItem_Click_1); - // - // addBOXEntryToolStripMenuItem1 - // - this.addBOXEntryToolStripMenuItem1.Name = "addBOXEntryToolStripMenuItem1"; - resources.ApplyResources(this.addBOXEntryToolStripMenuItem1, "addBOXEntryToolStripMenuItem1"); - this.addBOXEntryToolStripMenuItem1.Click += new System.EventHandler(this.addBOXEntryToolStripMenuItem1_Click); - // - // addANIMEntryToolStripMenuItem1 - // - this.addANIMEntryToolStripMenuItem1.Name = "addANIMEntryToolStripMenuItem1"; - resources.ApplyResources(this.addANIMEntryToolStripMenuItem1, "addANIMEntryToolStripMenuItem1"); - this.addANIMEntryToolStripMenuItem1.Click += new System.EventHandler(this.addANIMEntryToolStripMenuItem1_Click); - // // pictureBoxImagePreview // resources.ApplyResources(this.pictureBoxImagePreview, "pictureBoxImagePreview"); diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index f2adfa59..f0dd7eb7 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -8,9 +8,11 @@ using System.Drawing.Drawing2D; using System.Diagnostics; using System.Drawing.Imaging; +using OMI.Formats.Archive; using OMI.Formats.Pck; using OMI.Formats.GameRule; using OMI.Formats.Languages; +using OMI.Workers.Archive; using OMI.Workers.Pck; using OMI.Workers.GameRule; using OMI.Workers.Language; @@ -2065,29 +2067,88 @@ namespace PckStudio private void addCustomPackIconToolStripMenuItem_Click(object sender, EventArgs e) { - if (!currentPCK.TryGetFile("0", PckFile.FileData.FileType.InfoFile, out PckFile.FileData file) || - string.IsNullOrEmpty(file.Properties.GetPropertyValue("PACKID")) - ) + string packID = "0"; + + using NumericPrompt numericPrompt = new NumericPrompt(0); + numericPrompt.ValueUpDown.Minimum = 0; // TODO: put min pack ID value (keeping this 0 just to be safe) + numericPrompt.ValueUpDown.Maximum = 999999999; // TODO: put max pack ID value + numericPrompt.ContextLabel.Text = "Please insert the desired Pack ID"; + numericPrompt.TextLabel.Text = "Pack ID"; + + if (currentPCK is not null) { - MessageBox.Show("No PackID is present in this pack. To avoid this error, please open a PCK with a PackID before trying again.", "Operation Aborted", MessageBoxButtons.OK, MessageBoxIcon.Error); + DialogResult prompt = MessageBox.Show(this, + "Would you like to use the current PackID? You can enter any PackID if not.", + "", + MessageBoxButtons.YesNoCancel); + + switch (prompt) + { + case DialogResult.Yes: + if (!currentPCK.TryGetFile("0", PckFile.FileData.FileType.InfoFile, out PckFile.FileData file) || + string.IsNullOrEmpty(file.Properties.GetPropertyValue("PACKID"))) + { + MessageBox.Show(this, + "No PackID is present in this PCK. " + + "To avoid this error, ensure that the PCK has a proper PackID property on the \"0\" Info file before trying again.", + "Operation Aborted", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + packID = file.Properties.GetPropertyValue("PACKID"); + break; + case DialogResult.No: + break; + case DialogResult.Cancel: + default: + MessageBox.Show(this, "Operation cancelled"); + return; + } + } + else if (numericPrompt.ShowDialog(this) == DialogResult.OK) packID = numericPrompt.NewValue.ToString(); + else + { + MessageBox.Show(this, "Operation cancelled"); return; } - OpenFileDialog dialog = new OpenFileDialog(); - dialog.Filter = "Minecraft Archive|*.arc"; - if (dialog.ShowDialog(this) == DialogResult.OK) + OpenFileDialog arcDialog = new OpenFileDialog(); + OpenFileDialog iconDialog = new OpenFileDialog(); + arcDialog.Filter = "Minecraft Archive|*.arc"; + iconDialog.Filter = "Pack Icon|*.png"; + if (arcDialog.ShowDialog(this) == DialogResult.OK) { - string filepath = dialog.FileName; - dialog.Filter = "Pack Icon|*.png"; - if (dialog.ShowDialog(this) == DialogResult.OK) + using (var fs = File.OpenRead(arcDialog.FileName)) { - using (var fs = File.OpenRead(filepath)) + var reader = new ARCFileReader(); + ConsoleArchive archive = reader.FromStream(fs); + + if (iconDialog.ShowDialog(this) == DialogResult.OK) { - ARCUtil.Inject(fs, ( - string.Format("Graphics\\PackGraphics\\{0}.png", file.Properties.GetPropertyValue("PACKID")), - File.ReadAllBytes(dialog.FileName)) - ); - MessageBox.Show("Successfully added Pack Icon to Archive!", "Successfully Added", MessageBoxButtons.OK, MessageBoxIcon.Information); + string key = string.Format("Graphics\\PackGraphics\\{0}.png", packID); + + if (archive.Keys.Contains(key)) + { + DialogResult prompt = MessageBox.Show(this, + "This pack already has a pack icon present in the chosen file. Would you like to replace the pack icon?", + "Icon already exists", + MessageBoxButtons.YesNoCancel); + switch (prompt) + { + case DialogResult.Yes: + archive.Remove(key); // remove file so it can be injected + break; + case DialogResult.No: + case DialogResult.Cancel: + default: + MessageBox.Show(this, "Operation cancelled"); + return; + } + } + archive.Add(key, File.ReadAllBytes(iconDialog.FileName)); + var writer = new ARCFileWriter(archive); + writer.WriteToFile(arcDialog.FileName); + MessageBox.Show($"Successfully added {key} to Archive!", "Successfully Added", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } diff --git a/PCK-Studio/MainForm.resx b/PCK-Studio/MainForm.resx index ded14920..b5c4e4b6 100644 --- a/PCK-Studio/MainForm.resx +++ b/PCK-Studio/MainForm.resx @@ -673,9 +673,6 @@ Edit - - False - 195, 22 @@ -24172,19 +24169,19 @@ 298, 17 - 180, 22 + 160, 22 Add Entry - 180, 22 + 160, 22 Add BOX Entry - 180, 22 + 160, 22 Add ANIM Entry @@ -24239,7 +24236,7 @@ Edit All Entries - 182, 114 + 182, 92 contextMenuMetaTree @@ -29617,6 +29614,24 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + addEntryToolStripMenuItem1 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + addBOXEntryToolStripMenuItem1 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + addANIMEntryToolStripMenuItem1 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + addMultipleEntriesToolStripMenuItem1 @@ -29641,24 +29656,6 @@ System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - addEntryToolStripMenuItem1 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - addBOXEntryToolStripMenuItem1 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - addANIMEntryToolStripMenuItem1 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - MainForm