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