Files
community/Plugins/SDK/InkCanvasPluginBase.cs
T
2026-04-05 14:06:49 +08:00

269 lines
7.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Windows.Controls;
using System.Windows.Media;
namespace InkCanvasForClass.PluginSdk
{
/// <summary>
/// Ink Canvas 插件基类
/// 提供插件的基本实现
/// </summary>
public abstract class InkCanvasPluginBase : IInkCanvasPlugin
{
private bool _isEnabled;
private IPluginContext _context;
/// <summary>
/// 插件唯一标识符
/// </summary>
public abstract string Id { get; }
/// <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>
/// 插件主页URL
/// </summary>
public virtual string Homepage => string.Empty;
/// <summary>
/// 插件图标
/// </summary>
public virtual ImageSource Icon => null;
/// <summary>
/// 插件是否已启用
/// </summary>
public virtual bool IsEnabled
{
get => _isEnabled;
set
{
if (_isEnabled != value)
{
_isEnabled = value;
OnEnabledChanged(value);
EnabledChanged?.Invoke(this, value);
}
}
}
/// <summary>
/// 插件启用状态变更事件
/// </summary>
public event EventHandler<bool> EnabledChanged;
/// <summary>
/// 插件上下文
/// </summary>
protected IPluginContext Context => _context;
/// <summary>
/// 插件初始化
/// </summary>
/// <param name="context">插件上下文</param>
public virtual void Initialize(IPluginContext context)
{
_context = context;
}
/// <summary>
/// 方案 B:在 <see cref="Initialize"/> 之后由宿主调用,用于向 <see cref="IPluginRegistry"/> 登记菜单、工具栏、设置页等。
/// </summary>
/// <param name="registry">宿主提供的注册表</param>
public virtual void RegisterExtensions(IPluginRegistry registry)
{
}
/// <summary>
/// 插件启动
/// </summary>
public virtual void Start()
{
// 默认实现为空
}
/// <summary>
/// 插件停止
/// </summary>
public virtual void Stop()
{
// 默认实现为空
}
/// <summary>
/// 插件清理
/// </summary>
public virtual void Cleanup()
{
// 默认实现为空
}
/// <summary>
/// 获取插件设置界面
/// </summary>
/// <returns>设置界面控件</returns>
public virtual UserControl GetSettingsView()
{
return new UserControl();
}
/// <summary>
/// 获取插件菜单项
/// </summary>
/// <returns>菜单项列表</returns>
public virtual IEnumerable<MenuItem> GetMenuItems()
{
return new List<MenuItem>();
}
/// <summary>
/// 获取插件工具栏按钮
/// </summary>
/// <returns>工具栏按钮列表</returns>
public virtual IEnumerable<Button> GetToolbarButtons()
{
return new List<Button>();
}
/// <summary>
/// 获取插件状态栏信息
/// </summary>
/// <returns>状态栏信息</returns>
public virtual string GetStatusBarInfo()
{
return $"{Name} v{Version} - {(IsEnabled ? "" : "")}";
}
/// <summary>
/// 启用状态变更时的处理
/// </summary>
/// <param name="isEnabled">是否启用</param>
protected virtual void OnEnabledChanged(bool isEnabled)
{
if (isEnabled)
{
Start();
}
else
{
Stop();
}
}
/// <summary>
/// 显示通知
/// </summary>
/// <param name="message">消息内容</param>
/// <param name="type">通知类型</param>
protected void ShowNotification(string message, NotificationType type = NotificationType.Info)
{
_context?.ShowNotification(message, type);
}
/// <summary>
/// 显示确认对话框
/// </summary>
/// <param name="message">消息内容</param>
/// <param name="title">标题</param>
/// <returns>用户选择结果</returns>
protected bool ShowConfirmDialog(string message, string title = "确认")
{
return _context?.ShowConfirmDialog(message, title) ?? false;
}
/// <summary>
/// 显示输入对话框
/// </summary>
/// <param name="message">提示消息</param>
/// <param name="title">标题</param>
/// <param name="defaultValue">默认值</param>
/// <returns>用户输入内容</returns>
protected string ShowInputDialog(string message, string title = "输入", string defaultValue = "")
{
return _context?.ShowInputDialog(message, title, defaultValue) ?? defaultValue;
}
/// <summary>
/// 获取设置值
/// </summary>
/// <typeparam name="T">设置类型</typeparam>
/// <param name="key">设置键</param>
/// <param name="defaultValue">默认值</param>
/// <returns>设置值</returns>
protected T GetSetting<T>(string key, T defaultValue = default)
{
if (_context == null) return defaultValue;
return _context.GetSetting(key, defaultValue);
}
/// <summary>
/// 设置设置值
/// </summary>
/// <typeparam name="T">设置类型</typeparam>
/// <param name="key">设置键</param>
/// <param name="value">设置值</param>
protected void SetSetting<T>(string key, T value)
{
_context?.SetSetting(key, value);
}
/// <summary>
/// 保存设置
/// </summary>
protected void SaveSettings()
{
_context?.SaveSettings();
}
/// <summary>
/// 注册事件处理器
/// </summary>
/// <param name="eventName">事件名称</param>
/// <param name="handler">事件处理器</param>
protected void RegisterEventHandler(string eventName, EventHandler handler)
{
_context?.RegisterEventHandler(eventName, handler);
}
/// <summary>
/// 注销事件处理器
/// </summary>
/// <param name="eventName">事件名称</param>
/// <param name="handler">事件处理器</param>
protected void UnregisterEventHandler(string eventName, EventHandler handler)
{
_context?.UnregisterEventHandler(eventName, handler);
}
/// <summary>
/// 触发事件
/// </summary>
/// <param name="eventName">事件名称</param>
/// <param name="sender">事件发送者</param>
/// <param name="args">事件参数</param>
protected void TriggerEvent(string eventName, object sender, EventArgs args)
{
_context?.TriggerEvent(eventName, sender, args);
}
}
}