From 333d23721d450dd283130269f66671e5fc0eba04 Mon Sep 17 00:00:00 2001 From: Asval Date: Tue, 12 Mar 2019 14:14:33 +0100 Subject: [PATCH] new merge image button --- FModel/Button/SplitButtonControl.cs | 71 ++++++++++++ FModel/FModel.csproj | 3 + FModel/PAKWindow.Designer.cs | 61 +++++++--- FModel/PAKWindow.cs | 168 ++++++++++++++-------------- FModel/PAKWindow.resx | 3 + 5 files changed, 207 insertions(+), 99 deletions(-) create mode 100644 FModel/Button/SplitButtonControl.cs diff --git a/FModel/Button/SplitButtonControl.cs b/FModel/Button/SplitButtonControl.cs new file mode 100644 index 00000000..25a684b0 --- /dev/null +++ b/FModel/Button/SplitButtonControl.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FModel +{ + public class SplitButton : Button + { + [DefaultValue(null), Browsable(true), + DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + public ContextMenuStrip Menu { get; set; } + + [DefaultValue(20), Browsable(true), + DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + public int SplitWidth { get; set; } + + public SplitButton() + { + SplitWidth = 20; + } + + protected override void OnMouseDown(MouseEventArgs mevent) + { + var splitRect = new Rectangle(this.Width - this.SplitWidth, 0, this.SplitWidth, this.Height); + + // Figure out if the button click was on the button itself or the menu split + if (Menu != null && + mevent.Button == MouseButtons.Left && + splitRect.Contains(mevent.Location)) + { + Menu.Show(this, 0, this.Height); // Shows menu under button + //Menu.Show(this, mevent.Location); // Shows menu at click location + } + else + { + base.OnMouseDown(mevent); + } + } + + protected override void OnPaint(PaintEventArgs pevent) + { + base.OnPaint(pevent); + + if (this.Menu != null && this.SplitWidth > 0) + { + // Draw the arrow glyph on the right side of the button + int arrowX = ClientRectangle.Width - 14; + int arrowY = ClientRectangle.Height / 2 - 1; + + var arrowBrush = Enabled ? SystemBrushes.ControlText : SystemBrushes.ButtonShadow; + var arrows = new[] { new Point(arrowX, arrowY), new Point(arrowX + 7, arrowY), new Point(arrowX + 3, arrowY + 4) }; + pevent.Graphics.FillPolygon(arrowBrush, arrows); + + // Draw a dashed separator on the left of the arrow + int lineX = ClientRectangle.Width - this.SplitWidth; + int lineYFrom = arrowY - 4; + int lineYTo = arrowY + 8; + using (var separatorPen = new Pen(Brushes.DarkGray) { DashStyle = DashStyle.Dot }) + { + pevent.Graphics.DrawLine(separatorPen, lineX, lineYFrom, lineX, lineYTo); + } + } + } + } +} diff --git a/FModel/FModel.csproj b/FModel/FModel.csproj index db64752c..86284da1 100644 --- a/FModel/FModel.csproj +++ b/FModel/FModel.csproj @@ -101,6 +101,9 @@ + + Component + PAKWindow.cs diff --git a/FModel/PAKWindow.Designer.cs b/FModel/PAKWindow.Designer.cs index b61c474c..01e21a2d 100644 --- a/FModel/PAKWindow.Designer.cs +++ b/FModel/PAKWindow.Designer.cs @@ -31,7 +31,6 @@ this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PAKWindow)); this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.PAKsLoad = new System.Windows.Forms.Button(); this.AESKeyLabel = new System.Windows.Forms.Label(); this.AESKeyTextBox = new System.Windows.Forms.TextBox(); this.PAKsComboBox = new System.Windows.Forms.ComboBox(); @@ -50,16 +49,20 @@ this.ItemRichTextBox = new System.Windows.Forms.RichTextBox(); this.FilterLabel = new System.Windows.Forms.Label(); this.FilterTextBox = new System.Windows.Forms.TextBox(); + this.LoadButton = new FModel.SplitButton(); + this.LoadContext = new System.Windows.Forms.ContextMenuStrip(this.components); + this.mergeGeneratedImagesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.groupBox1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.ItemIconPictureBox)).BeginInit(); this.groupBox2.SuspendLayout(); this.ImageContext.SuspendLayout(); this.ExtractAsset.SuspendLayout(); + this.LoadContext.SuspendLayout(); this.SuspendLayout(); // // groupBox1 // - this.groupBox1.Controls.Add(this.PAKsLoad); + this.groupBox1.Controls.Add(this.LoadButton); this.groupBox1.Controls.Add(this.AESKeyLabel); this.groupBox1.Controls.Add(this.AESKeyTextBox); this.groupBox1.Controls.Add(this.PAKsComboBox); @@ -70,16 +73,6 @@ this.groupBox1.TabStop = false; this.groupBox1.Text = "PAK"; // - // PAKsLoad - // - this.PAKsLoad.Location = new System.Drawing.Point(296, 18); - this.PAKsLoad.Name = "PAKsLoad"; - this.PAKsLoad.Size = new System.Drawing.Size(106, 23); - this.PAKsLoad.TabIndex = 3; - this.PAKsLoad.Text = "Load"; - this.PAKsLoad.UseVisualStyleBackColor = true; - this.PAKsLoad.Click += new System.EventHandler(this.PAKsLoad_Click); - // // AESKeyLabel // this.AESKeyLabel.AutoSize = true; @@ -161,16 +154,17 @@ // // ImageContext // + this.ImageContext.ImageScalingSize = new System.Drawing.Size(18, 18); this.ImageContext.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.OpenImageTS}); this.ImageContext.Name = "ImageContext"; - this.ImageContext.Size = new System.Drawing.Size(140, 26); + this.ImageContext.Size = new System.Drawing.Size(155, 28); // // OpenImageTS // this.OpenImageTS.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; this.OpenImageTS.Name = "OpenImageTS"; - this.OpenImageTS.Size = new System.Drawing.Size(139, 22); + this.OpenImageTS.Size = new System.Drawing.Size(154, 24); this.OpenImageTS.Text = "Open Image"; this.OpenImageTS.Click += new System.EventHandler(this.OpenImageTS_Click); // @@ -188,11 +182,12 @@ // // ExtractAsset // + this.ExtractAsset.ImageScalingSize = new System.Drawing.Size(18, 18); this.ExtractAsset.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.LoadDataTS, this.SaveImageTS}); this.ExtractAsset.Name = "ExtractAsset"; - this.ExtractAsset.Size = new System.Drawing.Size(223, 48); + this.ExtractAsset.Size = new System.Drawing.Size(252, 52); // // LoadDataTS // @@ -202,7 +197,7 @@ this.LoadDataTS.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; this.LoadDataTS.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; this.LoadDataTS.Name = "LoadDataTS"; - this.LoadDataTS.Size = new System.Drawing.Size(222, 22); + this.LoadDataTS.Size = new System.Drawing.Size(251, 24); this.LoadDataTS.Text = "Load Data After Serialization"; // // SaveImageTS @@ -210,7 +205,7 @@ this.SaveImageTS.CheckOnClick = true; this.SaveImageTS.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; this.SaveImageTS.Name = "SaveImageTS"; - this.SaveImageTS.Size = new System.Drawing.Size(222, 22); + this.SaveImageTS.Size = new System.Drawing.Size(251, 24); this.SaveImageTS.Text = "Save Generated Image"; // // ConsoleRichTextBox @@ -251,6 +246,33 @@ this.FilterTextBox.TabIndex = 5; this.FilterTextBox.TextChanged += new System.EventHandler(this.FilterTextBox_TextChanged); // + // LoadButton + // + this.LoadButton.Location = new System.Drawing.Point(296, 18); + this.LoadButton.Menu = this.LoadContext; + this.LoadButton.Name = "LoadButton"; + this.LoadButton.Size = new System.Drawing.Size(106, 23); + this.LoadButton.TabIndex = 12; + this.LoadButton.Text = " Load"; + this.LoadButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.LoadButton.UseVisualStyleBackColor = true; + this.LoadButton.Click += new System.EventHandler(this.LoadButton_Click); + // + // LoadContext + // + this.LoadContext.ImageScalingSize = new System.Drawing.Size(18, 18); + this.LoadContext.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.mergeGeneratedImagesToolStripMenuItem}); + this.LoadContext.Name = "LoadContext"; + this.LoadContext.Size = new System.Drawing.Size(235, 28); + // + // mergeGeneratedImagesToolStripMenuItem + // + this.mergeGeneratedImagesToolStripMenuItem.Name = "mergeGeneratedImagesToolStripMenuItem"; + this.mergeGeneratedImagesToolStripMenuItem.Size = new System.Drawing.Size(234, 24); + this.mergeGeneratedImagesToolStripMenuItem.Text = "Merge Generated Images"; + this.mergeGeneratedImagesToolStripMenuItem.Click += new System.EventHandler(this.mergeGeneratedImagesToolStripMenuItem_Click); + // // PAKWindow // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -276,6 +298,7 @@ this.groupBox2.ResumeLayout(false); this.ImageContext.ResumeLayout(false); this.ExtractAsset.ResumeLayout(false); + this.LoadContext.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); @@ -284,7 +307,6 @@ #endregion private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.Button PAKsLoad; private System.Windows.Forms.Label AESKeyLabel; private System.Windows.Forms.TextBox AESKeyTextBox; private System.Windows.Forms.ComboBox PAKsComboBox; @@ -303,6 +325,9 @@ private System.Windows.Forms.ToolStripMenuItem OpenImageTS; private SplitButton SaveImageButton; private System.Windows.Forms.ToolStripMenuItem SaveImageTS; + private SplitButton LoadButton; + private System.Windows.Forms.ContextMenuStrip LoadContext; + private System.Windows.Forms.ToolStripMenuItem mergeGeneratedImagesToolStripMenuItem; } } diff --git a/FModel/PAKWindow.cs b/FModel/PAKWindow.cs index 7296607d..646dff12 100644 --- a/FModel/PAKWindow.cs +++ b/FModel/PAKWindow.cs @@ -210,18 +210,18 @@ namespace FModel private static string currentPAK; private static string currentGUID; - private async void PAKsLoad_Click(object sender, EventArgs e) + private async void LoadButton_Click(object sender, EventArgs e) { PAKTreeView.Nodes.Clear(); ItemsListBox.Items.Clear(); File.WriteAllText("key.txt", AESKeyTextBox.Text.Substring(2)); currentPAK = PAKsComboBox.SelectedItem.ToString(); - PAKsLoad.Enabled = false; + LoadButton.Enabled = false; await Task.Run(() => { jwpmProcess("filelist \"" + Config.conf.pathToFortnitePAKs + "\\" + currentPAK + "\" \"" + docPath + "\""); }); - PAKsLoad.Enabled = true; + LoadButton.Enabled = true; currentGUID = readPAKGuid(Config.conf.pathToFortnitePAKs + "\\" + PAKsComboBox.SelectedItem); if (!File.Exists(docPath + "\\" + PAKsComboBox.SelectedItem + ".txt")) @@ -461,10 +461,6 @@ namespace FModel byte[] buffer = new byte[srcUBULK.Length]; using (FileStream fs1 = new FileStream(Path.GetDirectoryName(file) + "\\" + isUBULKFound.ToString(), FileMode.Open, FileAccess.ReadWrite)) { - AppendText("✔ ", Color.Green); - AppendText("Writing ", Color.Black); - AppendText("UBULK Data", Color.DarkRed, true); - fs1.Read(buffer, 0, buffer.Length); FileStream fs2 = new FileStream(Path.GetFileNameWithoutExtension(file) + ".temp", FileMode.Open, FileAccess.ReadWrite); @@ -472,6 +468,10 @@ namespace FModel fs2.Write(buffer, 0, buffer.Length); fs2.Close(); fs1.Close(); + + AppendText("✔ ", Color.Green); + AppendText("Writing ", Color.Black); + AppendText("UBULK Data", Color.DarkRed, true); } byte[] srcFinal = File.ReadAllBytes(Path.GetFileNameWithoutExtension(file) + ".temp"); @@ -570,23 +570,6 @@ namespace FModel } } - private void SaveImageButton_Click(object sender, EventArgs e) - { - SaveFileDialog saveTheDialog = new SaveFileDialog(); - saveTheDialog.Title = "Save Icon"; - saveTheDialog.Filter = "PNG Files (*.png)|*.png"; - saveTheDialog.InitialDirectory = docPath + "\\Generated Icons\\"; - saveTheDialog.FileName = ItemName; - if (saveTheDialog.ShowDialog() == DialogResult.OK) - { - ItemIconPictureBox.Image.Save(saveTheDialog.FileName, ImageFormat.Png); - AppendText("✔ ", Color.Green); - AppendText(ItemName, Color.DarkRed); - AppendText(" successfully saved to ", Color.Black); - AppendText(saveTheDialog.FileName, Color.SteelBlue, true); - } - } - public static string currentItem; private async void ExtractAssetButton_Click(object sender, EventArgs e) { @@ -673,7 +656,7 @@ namespace FModel ItemName = IDParser[iii].DisplayName; Bitmap bmp = new Bitmap(522, 522); Graphics g = Graphics.FromImage(bmp); - g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit; + g.TextRenderingHint = TextRenderingHint.AntiAlias; getItemRarity(IDParser[iii], g); @@ -1062,7 +1045,7 @@ namespace FModel try { - g.DrawString(ItemName, new Font(pfc.Families[0], 40), new SolidBrush(Color.White), new Point(522 / 2, 390), centeredString); + g.DrawString(ItemName, new Font(pfc.Families[0], 35), new SolidBrush(Color.White), new Point(522 / 2, 395), centeredString); } catch (NullReferenceException) { @@ -1073,7 +1056,7 @@ namespace FModel } //NAME try { - g.DrawString(IDParser[iii].Description, new Font("Arial", 11), new SolidBrush(Color.White), new Point(522 / 2, 465), centeredStringLine); + g.DrawString(IDParser[iii].Description, new Font("Arial", 9), new SolidBrush(Color.White), new Point(522 / 2, 465), centeredStringLine); } catch (NullReferenceException) { @@ -1084,7 +1067,7 @@ namespace FModel } //DESCRIPTION try { - g.DrawString(IDParser[iii].ShortDescription, new Font(pfc.Families[0], 15), new SolidBrush(Color.White), new Point(5, 498)); + g.DrawString(IDParser[iii].ShortDescription, new Font(pfc.Families[0], 13), new SolidBrush(Color.White), new Point(5, 498)); } catch (NullReferenceException) { @@ -1095,7 +1078,7 @@ namespace FModel } //TYPE try { - g.DrawString(IDParser[iii].GameplayTags.GameplayTagsGameplayTags[Array.FindIndex(IDParser[iii].GameplayTags.GameplayTagsGameplayTags, x => x.StartsWith("Cosmetics.Source."))].Substring(17), new Font(pfc.Families[0], 15), new SolidBrush(Color.White), new Point(522 - 5, 498), rightString); + g.DrawString(IDParser[iii].GameplayTags.GameplayTagsGameplayTags[Array.FindIndex(IDParser[iii].GameplayTags.GameplayTagsGameplayTags, x => x.StartsWith("Cosmetics.Source."))].Substring(17), new Font(pfc.Families[0], 13), new SolidBrush(Color.White), new Point(522 - 5, 498), rightString); } catch (NullReferenceException) { @@ -1295,6 +1278,22 @@ namespace FModel AppendText("\nDone\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tTime elapsed: " + elapsedTime, Color.Green, true); } + private void SaveImageButton_Click(object sender, EventArgs e) + { + SaveFileDialog saveTheDialog = new SaveFileDialog(); + saveTheDialog.Title = "Save Icon"; + saveTheDialog.Filter = "PNG Files (*.png)|*.png"; + saveTheDialog.InitialDirectory = docPath + "\\Generated Icons\\"; + saveTheDialog.FileName = ItemName; + if (saveTheDialog.ShowDialog() == DialogResult.OK) + { + ItemIconPictureBox.Image.Save(saveTheDialog.FileName, ImageFormat.Png); + AppendText("✔ ", Color.Green); + AppendText(ItemName, Color.DarkRed); + AppendText(" successfully saved to ", Color.Black); + AppendText(saveTheDialog.FileName, Color.SteelBlue, true); + } + } private void OpenImageTS_Click(object sender, EventArgs e) { var newForm = new Form(); @@ -1305,69 +1304,76 @@ namespace FModel pb.SizeMode = PictureBoxSizeMode.Zoom; newForm.Size = ItemIconPictureBox.Image.Size; - newForm.Icon = FModel.Properties.Resources.FNTools_Logo; + newForm.Icon = Properties.Resources.FNTools_Logo; newForm.Text = currentItem; newForm.StartPosition = FormStartPosition.CenterScreen; newForm.Controls.Add(pb); newForm.Show(); } - } - public class SplitButton : Button - { - [DefaultValue(null), Browsable(true), - DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] - public ContextMenuStrip Menu { get; set; } - - [DefaultValue(20), Browsable(true), - DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] - public int SplitWidth { get; set; } - - public SplitButton() + private void mergeGeneratedImagesToolStripMenuItem_Click(object sender, EventArgs e) { - SplitWidth = 20; - } + OpenFileDialog theDialog = new OpenFileDialog(); + theDialog.Multiselect = true; + theDialog.InitialDirectory = docPath + "\\Generated Icons\\"; + theDialog.Title = "Choose your images"; + theDialog.Filter = "PNG Files (*.png)|*.png|JPEG Files (*.jpg)|*.jpg|BMP Files (*.bmp)|*.bmp|All Files (*.*)|*.*"; - protected override void OnMouseDown(MouseEventArgs mevent) - { - var splitRect = new Rectangle(this.Width - this.SplitWidth, 0, this.SplitWidth, this.Height); - - // Figure out if the button click was on the button itself or the menu split - if (Menu != null && - mevent.Button == MouseButtons.Left && - splitRect.Contains(mevent.Location)) + if (theDialog.ShowDialog() == DialogResult.OK) { - Menu.Show(this, 0, this.Height); // Shows menu under button - //Menu.Show(this, mevent.Location); // Shows menu at click location - } - else - { - base.OnMouseDown(mevent); - } - } - - protected override void OnPaint(PaintEventArgs pevent) - { - base.OnPaint(pevent); - - if (this.Menu != null && this.SplitWidth > 0) - { - // Draw the arrow glyph on the right side of the button - int arrowX = ClientRectangle.Width - 14; - int arrowY = ClientRectangle.Height / 2 - 1; - - var arrowBrush = Enabled ? SystemBrushes.ControlText : SystemBrushes.ButtonShadow; - var arrows = new[] { new Point(arrowX, arrowY), new Point(arrowX + 7, arrowY), new Point(arrowX + 3, arrowY + 4) }; - pevent.Graphics.FillPolygon(arrowBrush, arrows); - - // Draw a dashed separator on the left of the arrow - int lineX = ClientRectangle.Width - this.SplitWidth; - int lineYFrom = arrowY - 4; - int lineYTo = arrowY + 8; - using (var separatorPen = new Pen(Brushes.DarkGray) { DashStyle = DashStyle.Dot }) + List selectedImages = new List(); + foreach (var files in theDialog.FileNames) { - pevent.Graphics.DrawLine(separatorPen, lineX, lineYFrom, lineX, lineYTo); + selectedImages.Add(Image.FromFile(files)); } + + var numperrow = 7; + var w = 530 * numperrow; + int h = int.Parse(Math.Ceiling(double.Parse(selectedImages.Count.ToString()) / numperrow).ToString()) * 530; + Bitmap bmp = new Bitmap(w - 8, h - 8); + + if (selectedImages.Count * 530 < 530 * numperrow) + { + w = selectedImages.Count * 530; + } + + var num = 1; + var cur_w = 0; + var cur_h = 0; + + for (int i = 0; i < selectedImages.Count; i++) + { + using (Graphics g = Graphics.FromImage(bmp)) + { + g.DrawImage(selectedImages[i], new PointF(cur_w, cur_h)); + if (num % numperrow == 0) + { + cur_w = 0; + cur_h += 530; + num += 1; + } + else + { + cur_w += 530; + num += 1; + } + } + } + bmp.Save(docPath + "\\Merger.png"); + var newForm = new Form(); + + PictureBox pb = new PictureBox(); + pb.Dock = DockStyle.Fill; + pb.Image = bmp; + pb.SizeMode = PictureBoxSizeMode.Zoom; + + newForm.WindowState = FormWindowState.Maximized; + newForm.Size = bmp.Size; + newForm.Icon = Properties.Resources.FNTools_Logo; + newForm.Text = docPath + "\\Merger.png"; + newForm.StartPosition = FormStartPosition.CenterScreen; + newForm.Controls.Add(pb); + newForm.Show(); } } } diff --git a/FModel/PAKWindow.resx b/FModel/PAKWindow.resx index ebea627a..64bda541 100644 --- a/FModel/PAKWindow.resx +++ b/FModel/PAKWindow.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 277, 17 + True