From 1ea67a5cc7419f5f52daf5f6d47d3b628346c835 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sat, 4 Mar 2023 16:30:33 +0100 Subject: [PATCH] Add setting to set Compression Level on grf files --- PCK-Studio/Classes/FileTypes/GRFFile.cs | 8 ++++- PCK-Studio/Classes/IO/GRF/GRFFileReader.cs | 2 +- PCK-Studio/Forms/Editor/GRFEditor.Designer.cs | 31 +++++++++++++++++-- PCK-Studio/Forms/Editor/GRFEditor.cs | 3 +- 4 files changed, 38 insertions(+), 6 deletions(-) diff --git a/PCK-Studio/Classes/FileTypes/GRFFile.cs b/PCK-Studio/Classes/FileTypes/GRFFile.cs index 12bd5381..5489f874 100644 --- a/PCK-Studio/Classes/FileTypes/GRFFile.cs +++ b/PCK-Studio/Classes/FileTypes/GRFFile.cs @@ -88,11 +88,14 @@ namespace PckStudio.Classes.FileTypes }; public readonly GameRule Root = null; + public int Crc => _crc; public bool IsWorld => _isWorld; + public eCompressionType CompressionLevel => _compressionLevel; private int _crc = 0; private bool _isWorld = false; + private eCompressionType _compressionLevel = eCompressionType.None; public enum eCompressionType : byte { @@ -108,9 +111,12 @@ namespace PckStudio.Classes.FileTypes public GRFFile() : this(-1, false) {} - public GRFFile(int crc, bool isWolrd) + public GRFFile(int crc, bool isWolrd) : this(crc, isWolrd, eCompressionType.None) + {} + public GRFFile(int crc, bool isWolrd, eCompressionType compressionLevel) { Root = new GameRule("__ROOT__", null); + _compressionLevel = compressionLevel; _crc = crc; _isWorld = isWolrd; } diff --git a/PCK-Studio/Classes/IO/GRF/GRFFileReader.cs b/PCK-Studio/Classes/IO/GRF/GRFFileReader.cs index d8ddd3ab..29649c63 100644 --- a/PCK-Studio/Classes/IO/GRF/GRFFileReader.cs +++ b/PCK-Studio/Classes/IO/GRF/GRFFileReader.cs @@ -50,7 +50,7 @@ namespace PckStudio.Classes.IO.GRF { compression_type = (GRFFile.eCompressionType)byte4; } - _file = new GRFFile(crc, byte4 > 0); + _file = new GRFFile(crc, byte4 > 0, compression_type); if (compression_type == GRFFile.eCompressionType.None && byte4 == 0) return stream; diff --git a/PCK-Studio/Forms/Editor/GRFEditor.Designer.cs b/PCK-Studio/Forms/Editor/GRFEditor.Designer.cs index 75f48280..375a9638 100644 --- a/PCK-Studio/Forms/Editor/GRFEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/GRFEditor.Designer.cs @@ -45,6 +45,8 @@ this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.metroPanel1 = new MetroFramework.Controls.MetroPanel(); + this.compressionLvlToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripComboBox1 = new System.Windows.Forms.ToolStripComboBox(); this.MessageContextMenu.SuspendLayout(); this.DetailContextMenu.SuspendLayout(); this.menuStrip1.SuspendLayout(); @@ -150,7 +152,8 @@ // this.menuStrip1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.fileToolStripMenuItem}); + this.fileToolStripMenuItem, + this.compressionLvlToolStripMenuItem}); this.menuStrip1.Location = new System.Drawing.Point(25, 60); this.menuStrip1.Name = "menuStrip1"; this.menuStrip1.Size = new System.Drawing.Size(450, 24); @@ -171,14 +174,14 @@ // this.openToolStripMenuItem.Enabled = false; this.openToolStripMenuItem.Name = "openToolStripMenuItem"; - this.openToolStripMenuItem.Size = new System.Drawing.Size(103, 22); + this.openToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.openToolStripMenuItem.Text = "Open"; // // saveToolStripMenuItem // this.saveToolStripMenuItem.BackColor = System.Drawing.Color.Transparent; this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; - this.saveToolStripMenuItem.Size = new System.Drawing.Size(103, 22); + this.saveToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.saveToolStripMenuItem.Text = "Save"; this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click); // @@ -202,6 +205,26 @@ this.metroPanel1.VerticalScrollbarSize = 10; this.metroPanel1.Resize += new System.EventHandler(this.metroPanel1_Resize); // + // compressionLvlToolStripMenuItem + // + this.compressionLvlToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripComboBox1}); + this.compressionLvlToolStripMenuItem.ForeColor = System.Drawing.SystemColors.Menu; + this.compressionLvlToolStripMenuItem.Name = "compressionLvlToolStripMenuItem"; + this.compressionLvlToolStripMenuItem.Size = new System.Drawing.Size(106, 20); + this.compressionLvlToolStripMenuItem.Text = "Compression Lvl"; + // + // toolStripComboBox1 + // + this.toolStripComboBox1.Items.AddRange(new object[] { + "None", + "Compressed", + "Compressed + RLE", + "Compressed + RLE + CRC"}); + this.toolStripComboBox1.Name = "toolStripComboBox1"; + this.toolStripComboBox1.Size = new System.Drawing.Size(121, 23); + this.toolStripComboBox1.Text = "Zlib"; + // // GRFEditor // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -249,5 +272,7 @@ private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem; private MetroFramework.Controls.MetroPanel metroPanel1; + private System.Windows.Forms.ToolStripMenuItem compressionLvlToolStripMenuItem; + private System.Windows.Forms.ToolStripComboBox toolStripComboBox1; } } \ No newline at end of file diff --git a/PCK-Studio/Forms/Editor/GRFEditor.cs b/PCK-Studio/Forms/Editor/GRFEditor.cs index a24ddcf0..299ff8e8 100644 --- a/PCK-Studio/Forms/Editor/GRFEditor.cs +++ b/PCK-Studio/Forms/Editor/GRFEditor.cs @@ -55,6 +55,7 @@ namespace PckStudio.Forms.Editor private void OnLoad(object sender, EventArgs e) { RPC.SetPresence("GRF Editor", "Editing a GRF File"); + toolStripComboBox1.SelectedIndex = (int)_file.CompressionLevel; loadGRFTreeView(GrfTreeView.Nodes, _file.Root); } @@ -192,7 +193,7 @@ namespace PckStudio.Forms.Editor { try { - GRFFileWriter.Write(stream, _file, GRFFile.eCompressionType.ZlibRleCrc); + GRFFileWriter.Write(stream, _file, (GRFFile.eCompressionType)toolStripComboBox1.SelectedIndex/*GRFFile.eCompressionType.ZlibRleCrc*/); _pckfile?.SetData(stream.ToArray()); MessageBox.Show("Saved!"); }