Add setting to set Compression Level on grf files

This commit is contained in:
miku-666
2023-03-04 16:30:33 +01:00
parent 22bffbf878
commit 1ea67a5cc7
4 changed files with 38 additions and 6 deletions

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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;
}
}

View File

@@ -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!");
}