From 694ca3bf2514708e5f928c28ea18bcfac766477b Mon Sep 17 00:00:00 2001 From: ww-rm Date: Fri, 21 Mar 2025 13:32:03 +0800 Subject: [PATCH] refactor --- SpineViewer/Controls/SpineListView.cs | 77 --------------------------- SpineViewer/MainForm.cs | 74 ++++++++++++++++++++++++- 2 files changed, 73 insertions(+), 78 deletions(-) diff --git a/SpineViewer/Controls/SpineListView.cs b/SpineViewer/Controls/SpineListView.cs index 79df6c1..cdaef7c 100644 --- a/SpineViewer/Controls/SpineListView.cs +++ b/SpineViewer/Controls/SpineListView.cs @@ -64,30 +64,6 @@ namespace SpineViewer.Controls progressDialog.ShowDialog(); } - /// - /// 弹出对话框导出列表预览图 - /// - public void ExportPreviews() - { - lock (Spines) - { - if (spines.Count <= 0) - { - MessageBox.Show("请至少打开一个骨骼文件", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); - return; - } - } - - var saveDialog = new Dialogs.ExportPreviewDialog(); - if (saveDialog.ShowDialog() != DialogResult.OK) - return; - - var progressDialog = new Dialogs.ProgressDialog(); - progressDialog.DoWork += ExportPreview_Work; - progressDialog.RunWorkerAsync(saveDialog); - progressDialog.ShowDialog(); - } - private void listView_SelectedIndexChanged(object sender, EventArgs e) { if (PropertyGrid is not null) @@ -558,58 +534,5 @@ namespace SpineViewer.Controls Insert(new Dialogs.OpenSpineDialogResult(Spine.Version.Auto, validPaths[0])); } } - - private void ExportPreview_Work(object? sender, DoWorkEventArgs e) - { - var worker = sender as BackgroundWorker; - var arguments = e.Argument as Dialogs.ExportPreviewDialog; - var outputDir = arguments.OutputDir; - var width = arguments.PreviewWidth; - var height = arguments.PreviewHeight; - - int success = 0; - int error = 0; - lock (Spines) - { - int totalCount = spines.Count; - worker.ReportProgress(0, $"已处理 0/{totalCount}"); - for (int i = 0; i < totalCount; i++) - { - if (worker.CancellationPending) - { - e.Cancel = true; - break; - } - - var spine = spines[i]; - try - { - var preview = spine.GetPreview(width, height); - var savePath = Path.Combine(outputDir, $"{spine.Name}.png"); - preview.SaveToFile(savePath); - success++; - } - catch (Exception ex) - { - Program.Logger.Error(ex.ToString()); - Program.Logger.Error("Failed to save preview {}", spine.SkelPath); - error++; - } - - worker.ReportProgress((int)((i + 1) * 100.0) / totalCount, $"已处理 {i + 1}/{totalCount}"); - } - } - - if (error > 0) - { - Program.Logger.Warn("Preview save {} successfully, {} failed", success, error); - } - else - { - Program.Logger.Info("{} preview saved successfully", success); - } - - Program.Logger.Info($"Current memory usage: {Program.Process.WorkingSet64 / 1024.0 / 1024.0:F2} MB"); - } } } diff --git a/SpineViewer/MainForm.cs b/SpineViewer/MainForm.cs index 3ad7e31..be03131 100644 --- a/SpineViewer/MainForm.cs +++ b/SpineViewer/MainForm.cs @@ -86,7 +86,23 @@ namespace SpineViewer private void toolStripMenuItem_ExportPreview_Click(object sender, EventArgs e) { - spineListView.ExportPreviews(); + lock (spineListView.Spines) + { + if (spineListView.Spines.Count <= 0) + { + MessageBox.Show("请至少打开一个骨骼文件", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + } + + var saveDialog = new Dialogs.ExportPreviewDialog(); + if (saveDialog.ShowDialog() != DialogResult.OK) + return; + + var progressDialog = new Dialogs.ProgressDialog(); + progressDialog.DoWork += ExportPreview_Work; + progressDialog.RunWorkerAsync(saveDialog); + progressDialog.ShowDialog(); } private void toolStripMenuItem_Exit_Click(object sender, EventArgs e) @@ -200,6 +216,62 @@ namespace SpineViewer spinePreviewer.StartPreview(); } + private void ExportPreview_Work(object? sender, DoWorkEventArgs e) + { + var worker = sender as BackgroundWorker; + var arguments = e.Argument as Dialogs.ExportPreviewDialog; + var outputDir = arguments.OutputDir; + var width = arguments.PreviewWidth; + var height = arguments.PreviewHeight; + + int success = 0; + int error = 0; + spinePreviewer.StopPreview(); + lock (spineListView.Spines) + { + var spines = spineListView.Spines; + int totalCount = spines.Count; + worker.ReportProgress(0, $"已处理 0/{totalCount}"); + for (int i = 0; i < totalCount; i++) + { + if (worker.CancellationPending) + { + e.Cancel = true; + break; + } + + var spine = spines[i]; + try + { + var preview = spine.GetPreview(width, height); + var savePath = Path.Combine(outputDir, $"{spine.Name}.png"); + preview.SaveToFile(savePath); + success++; + } + catch (Exception ex) + { + Program.Logger.Error(ex.ToString()); + Program.Logger.Error("Failed to save preview {}", spine.SkelPath); + error++; + } + + worker.ReportProgress((int)((i + 1) * 100.0) / totalCount, $"已处理 {i + 1}/{totalCount}"); + } + } + spinePreviewer.StartPreview(); + + if (error > 0) + { + Program.Logger.Warn("Preview save {} successfully, {} failed", success, error); + } + else + { + Program.Logger.Info("{} preview saved successfully", success); + } + + Program.Logger.Info($"Current memory usage: {Program.Process.WorkingSet64 / 1024.0 / 1024.0:F2} MB"); + } + private void ConvertFileFormat_Work(object? sender, DoWorkEventArgs e) { var worker = sender as BackgroundWorker;