NavisworksTransport/src/UI/WPF/Views/ConfigEditorDialog.xaml.cs
2025-10-21 18:48:27 +08:00

271 lines
8.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Diagnostics;
using NavisworksTransport.Core.Config;
namespace NavisworksTransport.UI.WPF.Views
{
/// <summary>
/// 配置编辑器对话框
/// </summary>
public partial class ConfigEditorDialog : Window
{
private string _originalContent;
private bool _isModified;
public ConfigEditorDialog()
{
InitializeComponent();
LoadConfigContent();
UpdateStatus();
}
/// <summary>
/// 加载配置文件内容
/// </summary>
private void LoadConfigContent()
{
try
{
string configPath = ConfigManager.ConfigFilePath;
// 如果配置文件不存在,创建默认配置
if (!File.Exists(configPath))
{
ConfigManager.Instance.Current.GetType(); // 触发单例初始化
}
// 读取配置文件
if (File.Exists(configPath))
{
_originalContent = File.ReadAllText(configPath, System.Text.Encoding.UTF8);
ConfigContentTextBox.Text = _originalContent;
ConfigFilePathLabel.Content = Path.GetFileName(configPath);
StatusLabel.Content = "配置已加载";
StatusLabel.Foreground = System.Windows.Media.Brushes.Green;
}
else
{
StatusLabel.Content = "配置文件不存在";
StatusLabel.Foreground = System.Windows.Media.Brushes.Red;
}
_isModified = false;
ModifiedLabel.Content = "";
}
catch (Exception ex)
{
LogManager.Error($"加载配置文件失败: {ex.Message}");
MessageBox.Show($"加载配置文件失败:\n{ex.Message}",
"错误", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
/// <summary>
/// 更新状态信息
/// </summary>
private void UpdateStatus()
{
try
{
string configPath = ConfigManager.ConfigFilePath;
if (File.Exists(configPath))
{
var fileInfo = new FileInfo(configPath);
FileSizeLabel.Content = $"大小: {fileInfo.Length / 1024.0:F2} KB";
}
int lineCount = ConfigContentTextBox.LineCount;
LineCountLabel.Content = $"行数: {lineCount}";
}
catch (Exception ex)
{
LogManager.Error($"更新状态信息失败: {ex.Message}");
}
}
/// <summary>
/// 保存配置
/// </summary>
private bool SaveConfig()
{
try
{
string configPath = ConfigManager.ConfigFilePath;
string content = ConfigContentTextBox.Text;
// 验证 TOML 格式
try
{
Tomlyn.Toml.ToModel(content);
}
catch (Exception tomlEx)
{
MessageBox.Show($"TOML 格式错误:\n{tomlEx.Message}\n\n请检查配置文件语法。",
"格式错误", MessageBoxButton.OK, MessageBoxImage.Warning);
return false;
}
// 确保目录存在
Directory.CreateDirectory(ConfigManager.ConfigDirectory);
// 保存文件
File.WriteAllText(configPath, content, System.Text.Encoding.UTF8);
// 重新加载配置
ConfigManager.Instance.Reload();
_originalContent = content;
_isModified = false;
ModifiedLabel.Content = "";
StatusLabel.Content = "配置已保存";
StatusLabel.Foreground = System.Windows.Media.Brushes.Green;
UpdateStatus();
LogManager.Info("配置文件已保存");
return true;
}
catch (Exception ex)
{
LogManager.Error($"保存配置失败: {ex.Message}");
MessageBox.Show($"保存配置失败:\n{ex.Message}",
"错误", MessageBoxButton.OK, MessageBoxImage.Error);
return false;
}
}
// 事件处理器
private void SaveButton_Click(object sender, RoutedEventArgs e)
{
SaveConfig();
}
private void ReloadButton_Click(object sender, RoutedEventArgs e)
{
if (_isModified)
{
var result = MessageBox.Show(
"当前有未保存的修改,重新加载将丢失这些修改。\n\n确定要继续吗",
"确认", MessageBoxButton.YesNo, MessageBoxImage.Question);
if (result != MessageBoxResult.Yes)
return;
}
LoadConfigContent();
StatusLabel.Content = "配置已重新加载";
StatusLabel.Foreground = System.Windows.Media.Brushes.Green;
}
private void ResetToDefaultButton_Click(object sender, RoutedEventArgs e)
{
var result = MessageBox.Show(
"确定要恢复为默认配置吗?\n\n当前配置将被覆盖此操作无法撤销。",
"确认", MessageBoxButton.YesNo, MessageBoxImage.Warning);
if (result == MessageBoxResult.Yes)
{
try
{
ConfigManager.Instance.ResetToDefault();
LoadConfigContent();
StatusLabel.Content = "已恢复默认配置";
StatusLabel.Foreground = System.Windows.Media.Brushes.Green;
LogManager.Info("配置已恢复为默认值");
}
catch (Exception ex)
{
LogManager.Error($"恢复默认配置失败: {ex.Message}");
MessageBox.Show($"恢复默认配置失败:\n{ex.Message}",
"错误", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
}
private void OpenConfigFolderButton_Click(object sender, RoutedEventArgs e)
{
try
{
string configDir = ConfigManager.ConfigDirectory;
if (!Directory.Exists(configDir))
{
Directory.CreateDirectory(configDir);
}
Process.Start("explorer.exe", configDir);
LogManager.Info($"打开配置文件夹: {configDir}");
}
catch (Exception ex)
{
LogManager.Error($"打开配置文件夹失败: {ex.Message}");
MessageBox.Show($"打开配置文件夹失败:\n{ex.Message}",
"错误", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
private void ApplyButton_Click(object sender, RoutedEventArgs e)
{
SaveConfig();
}
private void OkButton_Click(object sender, RoutedEventArgs e)
{
if (_isModified)
{
if (SaveConfig())
{
DialogResult = true;
Close();
}
}
else
{
DialogResult = true;
Close();
}
}
private void CancelButton_Click(object sender, RoutedEventArgs e)
{
if (_isModified)
{
var result = MessageBox.Show(
"有未保存的修改,确定要关闭吗?",
"确认", MessageBoxButton.YesNo, MessageBoxImage.Question);
if (result != MessageBoxResult.Yes)
return;
}
DialogResult = false;
Close();
}
private void ConfigContentTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
if (_originalContent != null)
{
_isModified = ConfigContentTextBox.Text != _originalContent;
if (_isModified)
{
ModifiedLabel.Content = "● 已修改";
}
else
{
ModifiedLabel.Content = "";
}
UpdateStatus();
}
}
}
}