diff --git a/SpineViewer/Services/AboutDialogService.cs b/SpineViewer/Services/AboutDialogService.cs deleted file mode 100644 index f8cdf30..0000000 --- a/SpineViewer/Services/AboutDialogService.cs +++ /dev/null @@ -1,18 +0,0 @@ -using SpineViewer.Views; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace SpineViewer.Services -{ - public static class AboutDialogService - { - public static bool ShowAboutDialog() - { - var dialog = new AboutDialog() { Owner = App.Current.MainWindow }; - return dialog.ShowDialog() ?? false; - } - } -} diff --git a/SpineViewer/Services/DiagnosticsDialogService.cs b/SpineViewer/Services/DiagnosticsDialogService.cs deleted file mode 100644 index c14300c..0000000 --- a/SpineViewer/Services/DiagnosticsDialogService.cs +++ /dev/null @@ -1,18 +0,0 @@ -using SpineViewer.Views; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace SpineViewer.Services -{ - public static class DiagnosticsDialogService - { - public static bool ShowDiagnosticsDialog() - { - var dialog = new DiagnosticsDialog() { Owner = App.Current.MainWindow }; - return dialog.ShowDialog() ?? false; - } - } -} diff --git a/SpineViewer/Services/DialogService.cs b/SpineViewer/Services/DialogService.cs new file mode 100644 index 0000000..120fc89 --- /dev/null +++ b/SpineViewer/Services/DialogService.cs @@ -0,0 +1,85 @@ +using Microsoft.Win32; +using SpineViewer.ViewModels.Exporters; +using SpineViewer.Views; +using SpineViewer.Views.ExporterDialogs; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SpineViewer.Services +{ + /// + /// 用于弹出各种对话框的服务 + /// + public static class DialogService + { + public static bool ShowDiagnosticsDialog() + { + var dialog = new DiagnosticsDialog() { Owner = App.Current.MainWindow }; + return dialog.ShowDialog() ?? false; + } + + public static bool ShowAboutDialog() + { + var dialog = new AboutDialog() { Owner = App.Current.MainWindow }; + return dialog.ShowDialog() ?? false; + } + + public static bool ShowFrameExporterDialog(FrameExporterViewModel vm) + { + var dialog = new FrameExporterDialog() { DataContext = vm, Owner = App.Current.MainWindow }; + return dialog.ShowDialog() ?? false; + } + + public static bool ShowFrameSequenceExporterDialog(FrameSequenceExporterViewModel vm) + { + var dialog = new FrameSequenceExporterDialog() { DataContext = vm, Owner = App.Current.MainWindow }; + return dialog.ShowDialog() ?? false; + } + + public static bool ShowFFmpegVideoExporterDialog(FFmpegVideoExporterViewModel vm) + { + var dialog = new FFmpegVideoExporterDialog() { DataContext = vm, Owner = App.Current.MainWindow }; + return dialog.ShowDialog() ?? false; + } + + public static bool ShowCustomFFmpegExporterDialog(CustomFFmpegExporterViewModel vm) + { + var dialog = new CustomFFmpegExporterDialog() { DataContext = vm, Owner = App.Current.MainWindow }; + return dialog.ShowDialog() ?? false; + } + + /// + /// 获取用户选择的文件夹 + /// + /// + /// 是否确认了选择 + public static bool ShowOpenFolderDialog(out string? folderName) + { + // XXX: 此处使用了 System.Windows.Forms 的文件夹浏览对话框 + var folderDialog = new OpenFolderDialog() { Multiselect = false }; + if (folderDialog.ShowDialog() is true) + { + folderName = folderDialog.FolderName; + return true; + } + folderName = null; + return false; + } + + /// + /// 获取用户选择的文件夹 + /// + /// + /// 是否确认了选择 + public static bool ShowSaveFileDialog(out string? selectedPath) + { + var dialog = new SaveFileDialog() { }; + selectedPath = null; + // TODO + return false; + } + } +} diff --git a/SpineViewer/Services/ExporterDialogService.cs b/SpineViewer/Services/ExporterDialogService.cs deleted file mode 100644 index 2088d1b..0000000 --- a/SpineViewer/Services/ExporterDialogService.cs +++ /dev/null @@ -1,38 +0,0 @@ -using SpineViewer.ViewModels.Exporters; -using SpineViewer.Views; -using SpineViewer.Views.ExporterDialogs; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace SpineViewer.Services -{ - public static class ExporterDialogService - { - public static bool ShowFrameExporterDialog(FrameExporterViewModel vm) - { - var dialog = new FrameExporterDialog() { DataContext = vm, Owner = App.Current.MainWindow }; - return dialog.ShowDialog() ?? false; - } - - public static bool ShowFrameSequenceExporterDialog(FrameSequenceExporterViewModel vm) - { - var dialog = new FrameSequenceExporterDialog() { DataContext = vm, Owner = App.Current.MainWindow }; - return dialog.ShowDialog() ?? false; - } - - public static bool ShowFFmpegVideoExporterDialog(FFmpegVideoExporterViewModel vm) - { - var dialog = new FFmpegVideoExporterDialog() { DataContext = vm, Owner = App.Current.MainWindow }; - return dialog.ShowDialog() ?? false; - } - - public static bool ShowCustomFFmpegExporterDialog(CustomFFmpegExporterViewModel vm) - { - var dialog = new CustomFFmpegExporterDialog() { DataContext = vm, Owner = App.Current.MainWindow }; - return dialog.ShowDialog() ?? false; - } - } -} diff --git a/SpineViewer/Services/OpenFolderService.cs b/SpineViewer/Services/OpenFolderService.cs deleted file mode 100644 index 58973eb..0000000 --- a/SpineViewer/Services/OpenFolderService.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace SpineViewer.Services -{ - public static class OpenFolderService - { - /// - /// 获取用户选择的文件夹 - /// - /// - /// 是否确认了选择 - public static bool OpenFolder(out string? selectedPath) - { - // XXX: 此处使用了 System.Windows.Forms 的文件夹浏览对话框 - using var folderDialog = new System.Windows.Forms.FolderBrowserDialog(); - if (folderDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) - { - selectedPath = folderDialog.SelectedPath; - return true; - } - selectedPath = null; - return false; - } - } -} diff --git a/SpineViewer/Services/SaveFileService.cs b/SpineViewer/Services/SaveFileService.cs deleted file mode 100644 index 640bad7..0000000 --- a/SpineViewer/Services/SaveFileService.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Microsoft.Win32; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace SpineViewer.Services -{ - public static class SaveService - { - /// - /// 获取用户选择的文件夹 - /// - /// - /// 是否确认了选择 - public static bool SaveFile(out string? selectedPath) - { - var dialog = new SaveFileDialog() { }; - selectedPath = null; - // TODO - return false; - } - } -} diff --git a/SpineViewer/SpineViewer.csproj b/SpineViewer/SpineViewer.csproj index eebcf1d..1e28920 100644 --- a/SpineViewer/SpineViewer.csproj +++ b/SpineViewer/SpineViewer.csproj @@ -10,7 +10,6 @@ 0.15.0 WinExe true - true @@ -18,11 +17,6 @@ appicon.ico app.manifest - - - - - diff --git a/SpineViewer/ViewModels/DiagnosticsDialogViewModel.cs b/SpineViewer/ViewModels/DiagnosticsDialogViewModel.cs index b6c2863..aff49af 100644 --- a/SpineViewer/ViewModels/DiagnosticsDialogViewModel.cs +++ b/SpineViewer/ViewModels/DiagnosticsDialogViewModel.cs @@ -12,6 +12,7 @@ using System.Text; using System.Threading.Tasks; using System.Windows; + namespace SpineViewer.ViewModels { public class DiagnosticsDialogViewModel : ObservableObject @@ -31,7 +32,20 @@ namespace SpineViewer.ViewModels } } - public string Memory => $"{new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory / 1024f / 1024f / 1024f:F1} GB"; + public string Memory + { + get + { + var searcher = new ManagementObjectSearcher("SELECT TotalPhysicalMemory FROM Win32_ComputerSystem"); + foreach (ManagementObject obj in searcher.Get()) + { + ulong bytes = (ulong)obj["TotalPhysicalMemory"]; + float gb = bytes / 1024f / 1024f / 1024f; + return $"{gb:F1} GB"; + } + return "N/A"; + } + } public string WindowsVersion { diff --git a/SpineViewer/ViewModels/Exporters/CustomFFmpegExporterViewModel.cs b/SpineViewer/ViewModels/Exporters/CustomFFmpegExporterViewModel.cs index f846bd3..2ea1cae 100644 --- a/SpineViewer/ViewModels/Exporters/CustomFFmpegExporterViewModel.cs +++ b/SpineViewer/ViewModels/Exporters/CustomFFmpegExporterViewModel.cs @@ -50,7 +50,7 @@ namespace SpineViewer.ViewModels.Exporters protected override void Export_Execute(IList? args) { if (args is null || args.Count <= 0) return; - if (!ExporterDialogService.ShowCustomFFmpegExporterDialog(this)) return; + if (!DialogService.ShowCustomFFmpegExporterDialog(this)) return; SpineObject[] spines = args.Cast().Select(m => m.GetSpineObject()).ToArray(); ProgressService.RunAsync((pr, ct) => ExportTask(spines, pr, ct), AppResource.Str_CustomFFmpegExporterTitle); foreach (var sp in spines) sp.Dispose(); diff --git a/SpineViewer/ViewModels/Exporters/FFmpegVideoExporterViewModel.cs b/SpineViewer/ViewModels/Exporters/FFmpegVideoExporterViewModel.cs index 860265c..55322ac 100644 --- a/SpineViewer/ViewModels/Exporters/FFmpegVideoExporterViewModel.cs +++ b/SpineViewer/ViewModels/Exporters/FFmpegVideoExporterViewModel.cs @@ -37,7 +37,7 @@ namespace SpineViewer.ViewModels.Exporters protected override void Export_Execute(IList? args) { if (args is null || args.Count <= 0) return; - if (!ExporterDialogService.ShowFFmpegVideoExporterDialog(this)) return; + if (!DialogService.ShowFFmpegVideoExporterDialog(this)) return; SpineObject[] spines = args.Cast().Select(m => m.GetSpineObject()).ToArray(); ProgressService.RunAsync((pr, ct) => ExportTask(spines, pr, ct), AppResource.Str_FFmpegVideoExporterTitle); foreach (var sp in spines) sp.Dispose(); diff --git a/SpineViewer/ViewModels/Exporters/FrameExporterViewModel.cs b/SpineViewer/ViewModels/Exporters/FrameExporterViewModel.cs index f65bee5..dd1a59e 100644 --- a/SpineViewer/ViewModels/Exporters/FrameExporterViewModel.cs +++ b/SpineViewer/ViewModels/Exporters/FrameExporterViewModel.cs @@ -41,7 +41,7 @@ namespace SpineViewer.ViewModels.Exporters protected override void Export_Execute(IList? args) { if (args is null || args.Count <= 0) return; - if (!ExporterDialogService.ShowFrameExporterDialog(this)) return; + if (!DialogService.ShowFrameExporterDialog(this)) return; SpineObject[] spines = args.Cast().Select(m => m.GetSpineObject(true)).ToArray(); ProgressService.RunAsync((pr, ct) => ExportTask(spines, pr, ct), AppResource.Str_FrameExporterTitle); foreach (var sp in spines) sp.Dispose(); diff --git a/SpineViewer/ViewModels/Exporters/FrameSequenceExporterViewModel.cs b/SpineViewer/ViewModels/Exporters/FrameSequenceExporterViewModel.cs index 09f00fd..d692379 100644 --- a/SpineViewer/ViewModels/Exporters/FrameSequenceExporterViewModel.cs +++ b/SpineViewer/ViewModels/Exporters/FrameSequenceExporterViewModel.cs @@ -20,7 +20,7 @@ namespace SpineViewer.ViewModels.Exporters protected override void Export_Execute(IList? args) { if (args is null || args.Count <= 0) return; - if (!ExporterDialogService.ShowFrameSequenceExporterDialog(this)) return; + if (!DialogService.ShowFrameSequenceExporterDialog(this)) return; SpineObject[] spines = args.Cast().Select(m => m.GetSpineObject()).ToArray(); ProgressService.RunAsync((pr, ct) => ExportTask(spines, pr, ct), AppResource.Str_FrameSequenceExporterTitle); foreach (var sp in spines) sp.Dispose(); diff --git a/SpineViewer/ViewModels/MainWindow/ExplorerListViewModel.cs b/SpineViewer/ViewModels/MainWindow/ExplorerListViewModel.cs index ce40a8d..6992cf0 100644 --- a/SpineViewer/ViewModels/MainWindow/ExplorerListViewModel.cs +++ b/SpineViewer/ViewModels/MainWindow/ExplorerListViewModel.cs @@ -94,7 +94,7 @@ namespace SpineViewer.ViewModels.MainWindow /// public RelayCommand Cmd_ChangeCurrentDirectory => _cmd_ChangeCurrentDirectory ??= new(() => { - if (OpenFolderService.OpenFolder(out var selectedPath)) + if (DialogService.ShowOpenFolderDialog(out var selectedPath)) { _currentDirectory = selectedPath; RefreshItems(); diff --git a/SpineViewer/ViewModels/MainWindow/MainWindowViewModel.cs b/SpineViewer/ViewModels/MainWindow/MainWindowViewModel.cs index f6156e4..80d8968 100644 --- a/SpineViewer/ViewModels/MainWindow/MainWindowViewModel.cs +++ b/SpineViewer/ViewModels/MainWindow/MainWindowViewModel.cs @@ -83,13 +83,13 @@ namespace SpineViewer.ViewModels.MainWindow /// /// 显示诊断信息对话框 /// - public RelayCommand Cmd_ShowDiagnosticsDialog => _cmd_ShowDiagnosticsDialog ??= new(() => { DiagnosticsDialogService.ShowDiagnosticsDialog(); }); + public RelayCommand Cmd_ShowDiagnosticsDialog => _cmd_ShowDiagnosticsDialog ??= new(() => { DialogService.ShowDiagnosticsDialog(); }); private RelayCommand? _cmd_ShowDiagnosticsDialog; /// /// 显示关于对话框 /// - public RelayCommand Cmd_ShowAboutDialog => _cmd_ShowAboutDialog ??= new(() => { AboutDialogService.ShowAboutDialog(); }); + public RelayCommand Cmd_ShowAboutDialog => _cmd_ShowAboutDialog ??= new(() => { DialogService.ShowAboutDialog(); }); private RelayCommand? _cmd_ShowAboutDialog; /// diff --git a/SpineViewer/Views/ExporterDialogs/CustomFFmpegExporterDialog.xaml.cs b/SpineViewer/Views/ExporterDialogs/CustomFFmpegExporterDialog.xaml.cs index e8e0c7d..8b45daf 100644 --- a/SpineViewer/Views/ExporterDialogs/CustomFFmpegExporterDialog.xaml.cs +++ b/SpineViewer/Views/ExporterDialogs/CustomFFmpegExporterDialog.xaml.cs @@ -44,7 +44,7 @@ namespace SpineViewer.Views.ExporterDialogs private void ButtonSelectOutputDir_Click(object sender, RoutedEventArgs e) { - if (OpenFolderService.OpenFolder(out var selectedPath)) + if (DialogService.ShowOpenFolderDialog(out var selectedPath)) { var vm = (CustomFFmpegExporterViewModel)DataContext; vm.OutputDir = selectedPath; diff --git a/SpineViewer/Views/ExporterDialogs/FFmpegVideoExporterDialog.xaml.cs b/SpineViewer/Views/ExporterDialogs/FFmpegVideoExporterDialog.xaml.cs index 9cc1e44..4c58a55 100644 --- a/SpineViewer/Views/ExporterDialogs/FFmpegVideoExporterDialog.xaml.cs +++ b/SpineViewer/Views/ExporterDialogs/FFmpegVideoExporterDialog.xaml.cs @@ -44,7 +44,7 @@ namespace SpineViewer.Views.ExporterDialogs private void ButtonSelectOutputDir_Click(object sender, RoutedEventArgs e) { - if (OpenFolderService.OpenFolder(out var selectedPath)) + if (DialogService.ShowOpenFolderDialog(out var selectedPath)) { var vm = (FFmpegVideoExporterViewModel)DataContext; vm.OutputDir = selectedPath; diff --git a/SpineViewer/Views/ExporterDialogs/FrameExporterDialog.xaml.cs b/SpineViewer/Views/ExporterDialogs/FrameExporterDialog.xaml.cs index 308fc06..f4f9e31 100644 --- a/SpineViewer/Views/ExporterDialogs/FrameExporterDialog.xaml.cs +++ b/SpineViewer/Views/ExporterDialogs/FrameExporterDialog.xaml.cs @@ -44,7 +44,7 @@ namespace SpineViewer.Views.ExporterDialogs private void ButtonSelectOutputDir_Click(object sender, RoutedEventArgs e) { - if (OpenFolderService.OpenFolder(out var selectedPath)) + if (DialogService.ShowOpenFolderDialog(out var selectedPath)) { var vm = (FrameExporterViewModel)DataContext; vm.OutputDir = selectedPath; diff --git a/SpineViewer/Views/ExporterDialogs/FrameSequenceExporterDialog.xaml.cs b/SpineViewer/Views/ExporterDialogs/FrameSequenceExporterDialog.xaml.cs index c3bad17..b4e72fe 100644 --- a/SpineViewer/Views/ExporterDialogs/FrameSequenceExporterDialog.xaml.cs +++ b/SpineViewer/Views/ExporterDialogs/FrameSequenceExporterDialog.xaml.cs @@ -44,7 +44,7 @@ namespace SpineViewer.Views.ExporterDialogs private void ButtonSelectOutputDir_Click(object sender, RoutedEventArgs e) { - if (OpenFolderService.OpenFolder(out var selectedPath)) + if (DialogService.ShowOpenFolderDialog(out var selectedPath)) { var vm = (FrameSequenceExporterViewModel)DataContext; vm.OutputDir = selectedPath;