using System;
using System.Windows.Controls;
namespace Ink_Canvas.Helpers.Plugins
{
///
/// 插件基类,提供基本实现
///
public abstract class PluginBase : IPlugin
{
///
/// 插件状态(私有字段)
///
private bool _isEnabled;
///
/// 插件状态(公共属性)
///
public bool IsEnabled
{
get => _isEnabled;
protected set
{
if (_isEnabled != value)
{
_isEnabled = value;
OnEnabledStateChanged(value);
}
}
}
///
/// 插件ID
///
public string Id { get; protected set; }
///
/// 插件路径
///
public string PluginPath { get; set; }
///
/// 插件名称
///
public abstract string Name { get; }
///
/// 插件描述
///
public abstract string Description { get; }
///
/// 插件版本
///
public abstract Version Version { get; }
///
/// 插件作者
///
public abstract string Author { get; }
///
/// 是否为内置插件
///
public virtual bool IsBuiltIn => false;
///
/// 状态变更事件
///
public event EventHandler EnabledStateChanged;
///
/// 初始化插件
///
public virtual void Initialize()
{
Id = GetType().FullName;
// 添加日志,记录插件名称
try
{
string name = Name;
LogHelper.WriteLogToFile($"初始化插件: ID={Id}, 名称={name ?? "未命名"}");
if (string.IsNullOrEmpty(name))
{
LogHelper.WriteLogToFile($"警告: 插件 {Id} 的名称为空", LogHelper.LogType.Warning);
}
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"获取插件名称时出错: {ex.Message}", LogHelper.LogType.Error);
}
LogHelper.WriteLogToFile($"插件 {Name} 已初始化");
}
///
/// 启用插件
///
public virtual void Enable()
{
if (!IsEnabled)
{
IsEnabled = true;
LogHelper.WriteLogToFile($"插件 {Name} 已启用");
}
}
///
/// 禁用插件
///
public virtual void Disable()
{
if (IsEnabled)
{
IsEnabled = false;
LogHelper.WriteLogToFile($"插件 {Name} 已禁用");
}
}
///
/// 获取插件设置界面
///
/// 插件设置界面
public virtual UserControl GetSettingsView()
{
// 默认返回空设置页面
return new UserControl();
}
///
/// 插件卸载时的清理工作
///
public virtual void Cleanup()
{
LogHelper.WriteLogToFile($"插件 {Name} 已卸载");
}
///
/// 保存插件自身的设置
/// 注意:此方法仅用于保存插件的特定设置,不应影响插件启用/禁用状态
/// 插件启用状态由PluginManager统一管理
///
public virtual void SavePluginSettings()
{
// 默认实现不做任何事情
// 子类可以重写此方法,将自身设置保存到配置文件中
LogHelper.WriteLogToFile($"插件 {Name} 设置已保存", LogHelper.LogType.Event);
}
///
/// 触发状态变更事件
///
/// 是否启用
protected virtual void OnEnabledStateChanged(bool isEnabled)
{
EnabledStateChanged?.Invoke(this, isEnabled);
}
}
}