From b17ba5665b6bd49b4f520011b8f35c5215569f1d Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 4 Aug 2024 13:51:19 +0100 Subject: [PATCH] Fixed save icons not always working --- BookmarkManager.csproj | 2 +- MainForm.cs | 27 ++++++--- Windows/Forms/BookmarkTreeView.cs | 92 +++++++++++++++++-------------- 3 files changed, 72 insertions(+), 49 deletions(-) diff --git a/BookmarkManager.csproj b/BookmarkManager.csproj index 5fe18a2..5cefae5 100644 --- a/BookmarkManager.csproj +++ b/BookmarkManager.csproj @@ -14,7 +14,7 @@ Ray Lam 1.0.0.0 1.0.0.0 - 0.6.1.0244 + 0.6.1.0249 bukkubuddy True 8.0 diff --git a/MainForm.cs b/MainForm.cs index edbd077..305fc89 100644 --- a/MainForm.cs +++ b/MainForm.cs @@ -15,6 +15,7 @@ using FizzyLauncher.Models; using RyzStudio; using RyzStudio.Windows.Forms; using RyzStudio.Windows.ThemedForms; +using static RyzStudio.Windows.Forms.BookmarkTreeView; namespace FizzyLauncher { @@ -784,7 +785,7 @@ namespace FizzyLauncher if (result.IsSuccess) { // Add icons to save file - var result2 = AddImagesToZipFile(filename, this.CurrentSession.Items); + var result2 = AddImagesToZipFile(filename, nodeList); if (!result2.IsSuccess) { if (showNotices) @@ -978,7 +979,7 @@ namespace FizzyLauncher }); } - private GenericResult AddImagesToZipFile(string zipFilename, List items) + private GenericResult AddImagesToZipFile(string zipFilename, List> items) { if (string.IsNullOrWhiteSpace(zipFilename)) { @@ -1006,26 +1007,38 @@ namespace FizzyLauncher { foreach (var item in items) { - var key = "icon\\" + item.Id.ToString() + ".png"; + var key = "icon\\" + item.Value.Id.ToString() + ".png"; + var zipEntry = archive.GetEntry(key); if (zipEntry != null) { zipEntry.Delete(); } - if (item.Icon == null) + if (item.Key.ImageIndex == (int)NodeIcon.Default) + { + continue; + } + + if (!treeView1.ImageList.Images.ContainsKey(item.Value.Id.ToString())) + { + continue; + } + + var icon = treeView1.ImageList.Images[item.Value.Id.ToString()]; + if (icon == null) { continue; } try { - if (item.Icon.Width <= 0) + if (icon.Width <= 0) { continue; } } - catch + catch (Exception) { continue; } @@ -1036,7 +1049,7 @@ namespace FizzyLauncher { using (Stream entryStream = zipEntry.Open()) { - using (Image image = item.Icon) + using (Image image = icon) { image.Save(entryStream, ImageFormat.Png); } diff --git a/Windows/Forms/BookmarkTreeView.cs b/Windows/Forms/BookmarkTreeView.cs index 5d3b3c3..528b987 100644 --- a/Windows/Forms/BookmarkTreeView.cs +++ b/Windows/Forms/BookmarkTreeView.cs @@ -1,5 +1,7 @@ -using System.ComponentModel; +using System; +using System.ComponentModel; using System.Drawing; +using System.Reflection; using System.Windows.Forms; using bzit.bomg.Models; using FizzyLauncher; @@ -125,6 +127,8 @@ namespace RyzStudio.Windows.Forms if (MessageBox.Show("Delete?", "Delete?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes) { this.DeleteNode(); + + this.HasChanged = true; } } @@ -243,6 +247,8 @@ namespace RyzStudio.Windows.Forms this.EditNode(treeNode); } + this.HasChanged = true; + return treeNode; } @@ -272,6 +278,8 @@ namespace RyzStudio.Windows.Forms this.SelectedNode = newNode; + this.HasChanged = true; + return newNode; } } @@ -282,29 +290,11 @@ namespace RyzStudio.Windows.Forms public TreeNode AddNode(BookmarkModel model) { var parentNode = this.CreateNodePath(model?.Path?.Trim() ?? string.Empty, (int)NodeIcon.Folder1, (int)NodeIcon.Folder2); - int iconIndex = (int)NodeIcon.Default; // Add custom favicon - if (model.Icon != null) - { - var iconKey = model.Id.ToString(); - if (!string.IsNullOrWhiteSpace(iconKey)) - { - if (this.ImageList.Images.ContainsKey(iconKey)) - { - this.ImageList.Images.RemoveByKey(iconKey); - } + var n = AddImage(model.Id.ToString(), model.Icon); - UIControl.Invoke(this, (x) => - { - this.ImageList.Images.Add(iconKey, model.Icon); - }); - - iconIndex = this.ImageList.Images.IndexOfKey(iconKey); - } - } - - TreeNode newNode = new TreeNode(model?.Title?.Trim() ?? string.Empty, iconIndex, iconIndex); + TreeNode newNode = new TreeNode(model?.Title?.Trim() ?? string.Empty, n, n); newNode.Tag = model; newNode.ToolTipText = model.ToString(); @@ -404,10 +394,6 @@ namespace RyzStudio.Windows.Forms if (node == null) { node = this.SelectedNode; - } - - if (node == null) - { return; } @@ -416,28 +402,18 @@ namespace RyzStudio.Windows.Forms return; } - var iconKey = "default"; + if (model.Id == Guid.Empty) + { + return; + } // Update custom favicon - var key = model.Id.ToString(); - if (!string.IsNullOrWhiteSpace(key)) - { - if (model.Icon != null) - { - UIControl.Invoke(this, (x) => - { - this.ImageList.Images.Add(key, model.Icon); - }); - - iconKey = key; - } - } + var n = AddImage(model.Id.ToString(), model.Icon); UIControl.Invoke(this, (x) => { node.Text = model.Title; - node.ImageKey = iconKey; - node.SelectedImageKey = iconKey; + node.ImageIndex = node.SelectedImageIndex = n; node.Tag = model; node.ToolTipText = model.ToString(); }); @@ -458,5 +434,39 @@ namespace RyzStudio.Windows.Forms }); } + private int AddImage(string key, Image image) + { + if (image == null) + { + return (int)NodeIcon.Default; + } + + try + { + if (image.Width <= 0) + { + return (int)NodeIcon.Default; + } + } + catch (Exception) + { + return (int)NodeIcon.Default; + } + + UIControl.Invoke(this, (x) => + { + if (this.ImageList.Images.ContainsKey(key)) + { + var n = this.ImageList.Images.IndexOfKey(key); + + this.ImageList.Images.SetKeyName(n, ".deleted"); + } + + this.ImageList.Images.Add(key, image); + }); + + return this.ImageList.Images.IndexOfKey(key); + } + } } \ No newline at end of file