feat(docstring):添加部分docstring (#376)
* feat(docstring):添加docstring Signed-off-by: doudou0720 <98651603+doudou0720@users.noreply.github.com> * fix(docstring):修复部分docstring格式错误 Signed-off-by: doudou0720 <98651603+doudou0720@users.noreply.github.com> * fix(docstring):修复部分docstring Signed-off-by: doudou0720 <98651603+doudou0720@users.noreply.github.com> * chore(Docstring):MW_* 前14 * chore(Docstring):MW_* part 2 * chore(Docstring):MW_* part 3 * chore:优化缩进 * fix: 修复数学计算中的潜在除零错误和数值稳定性问题 Signed-off-by: doudou0720 <98651603+doudou0720@users.noreply.github.com> * chore:删除Rebase时多余的OOBE函数 * chore: 更新代码注释和文档格式 修复XML文档注释中的格式问题,统一使用<c>和<see>标签 更新ConfigHelper类的预留说明,明确未来扩展用途 优化TimerDisplayDate_Elapsed方法的注释,说明UI异步更新机制 合并重复的注释摘要行,提高文档可读性 添加形状识别功能的64位进程限制说明 修正视频呈现器设备选择逻辑的文档说明 * chore(IPPTLinkManager): 更新TryEndSlideShow方法的XML注释格式 * chore: 修正代码注释中的术语和格式问题 更新多个文件中的XML注释,统一使用<see langword="..."/>标记代替<c>...</c>标记 规范术语使用(如"延迟初始化"代替"懒惰初始化") 修正注释中的格式错误和补充说明 调整代码区域的注释对齐格式 --------- Signed-off-by: doudou0720 <98651603+doudou0720@users.noreply.github.com>
This commit is contained in:
@@ -70,53 +70,138 @@ namespace Ink_Canvas
|
||||
#endregion
|
||||
|
||||
#region PPT Application Variables
|
||||
/// <summary>
|
||||
/// PowerPoint应用程序实例,用于与PowerPoint进行交互。
|
||||
/// </summary>
|
||||
public static Microsoft.Office.Interop.PowerPoint.Application pptApplication;
|
||||
|
||||
/// <summary>
|
||||
/// 当前活动的PowerPoint演示文稿。
|
||||
/// </summary>
|
||||
public static Presentation presentation;
|
||||
|
||||
/// <summary>
|
||||
/// 当前演示文稿的幻灯片集合。
|
||||
/// </summary>
|
||||
public static Slides slides;
|
||||
|
||||
/// <summary>
|
||||
/// 当前活动的幻灯片。
|
||||
/// </summary>
|
||||
public static Slide slide;
|
||||
|
||||
/// <summary>
|
||||
/// 当前演示文稿的幻灯片总数。
|
||||
/// </summary>
|
||||
public static int slidescount;
|
||||
#endregion
|
||||
|
||||
#region PPT State Management
|
||||
/// <summary>
|
||||
/// 幻灯片放映结束事件重入保护标志,防止重复处理放映结束事件。
|
||||
/// </summary>
|
||||
private bool isEnteredSlideShowEndEvent;
|
||||
|
||||
/// <summary>
|
||||
/// 演示文稿是否有黑边的指示标志。
|
||||
/// </summary>
|
||||
private bool isPresentationHaveBlackSpace;
|
||||
|
||||
// 长按翻页相关字段
|
||||
/// <summary>
|
||||
/// 用于处理长按翻页功能的定时器。
|
||||
/// </summary>
|
||||
private DispatcherTimer _longPressTimer;
|
||||
|
||||
/// <summary>
|
||||
/// 长按翻页方向标志,true表示下一页,false表示上一页。
|
||||
/// </summary>
|
||||
private bool _isLongPressNext = true; // true为下一页,false为上一页
|
||||
|
||||
/// <summary>
|
||||
/// 长按延迟时间(毫秒),即用户需要按住按钮多长时间才开始连续翻页。
|
||||
/// </summary>
|
||||
private const int LongPressDelay = 500; // 长按延迟时间(毫秒)
|
||||
|
||||
/// <summary>
|
||||
/// 长按翻页间隔(毫秒),即连续翻页的时间间隔。
|
||||
/// </summary>
|
||||
private const int LongPressInterval = 50; // 长按翻页间隔(毫秒)
|
||||
|
||||
// PowerPoint应用程序守护相关字段
|
||||
/// <summary>
|
||||
/// 用于监控PowerPoint应用程序状态的定时器。
|
||||
/// </summary>
|
||||
private DispatcherTimer _powerPointProcessMonitorTimer;
|
||||
|
||||
/// <summary>
|
||||
/// 应用程序监控间隔(毫秒),即每隔多长时间检查一次PowerPoint应用程序状态。
|
||||
/// </summary>
|
||||
private const int ProcessMonitorInterval = 1000; // 应用程序监控间隔(毫秒)
|
||||
|
||||
// 上次播放位置相关字段
|
||||
/// <summary>
|
||||
/// 上次播放的幻灯片页码。
|
||||
/// </summary>
|
||||
private int _lastPlaybackPage = 0;
|
||||
|
||||
/// <summary>
|
||||
/// 是否应该导航到上次播放页码的标志。
|
||||
/// </summary>
|
||||
private bool _shouldNavigateToLastPage = false;
|
||||
|
||||
// 当前播放页码跟踪
|
||||
/// <summary>
|
||||
/// 当前幻灯片放映的位置(页码)。
|
||||
/// </summary>
|
||||
private int _currentSlideShowPosition = 0;
|
||||
|
||||
private Dictionary<int, MemoryStream> _memoryStreams = new Dictionary<int, MemoryStream>();
|
||||
private int _previousSlideID = 0;
|
||||
|
||||
/// <summary>
|
||||
/// 用于在PowerPoint连接断开后延迟退出PPT模式的定时器。
|
||||
/// </summary>
|
||||
private DispatcherTimer _exitPPTModeAfterDisconnectTimer;
|
||||
|
||||
/// <summary>
|
||||
/// 断开连接后退出PPT模式的延迟时间(毫秒),即连接断开后多长时间才退出PPT模式。
|
||||
/// </summary>
|
||||
private const int ExitPPTModeAfterDisconnectDelayMs = 1200;
|
||||
#endregion
|
||||
|
||||
#region PPT Managers
|
||||
/// <summary>
|
||||
/// PPT链接管理器,用于管理与PowerPoint的连接和事件处理。
|
||||
/// </summary>
|
||||
private IPPTLinkManager _pptManager;
|
||||
|
||||
/// <summary>
|
||||
/// PPT墨迹管理器,用于管理PowerPoint幻灯片上的墨迹。
|
||||
/// </summary>
|
||||
private PPTInkManager _singlePPTInkManager;
|
||||
|
||||
/// <summary>
|
||||
/// PPT UI管理器,用于管理与PowerPoint相关的用户界面元素。
|
||||
/// </summary>
|
||||
private PPTUIManager _pptUIManager;
|
||||
|
||||
/// <summary>
|
||||
/// 获取PPT管理器实例
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 提供对内部PPT链接管理器的公共访问,用于外部代码与PowerPoint进行交互。
|
||||
/// </remarks>
|
||||
public IPPTLinkManager PPTManager => _pptManager;
|
||||
#endregion
|
||||
|
||||
#region PPT Manager Initialization
|
||||
/// <summary>
|
||||
/// 初始化并配置用于 PowerPoint 集成的管理器与相关状态。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 清理并释放现有的 PPT 管理器与 COM/Interop 状态,创建并配置新的 PPT 管理器(ROT 或 COM 实现,取决于设置)、单一的 PPT 墨迹管理器及其自动保存行为,以及 PPT UI 管理器与其显示/按钮位置选项。方法内部会订阅必要的 PPT 事件并记录初始化过程中的错误或警告。同时初始化长按页翻页定时器以支持长按翻页功能。
|
||||
/// </remarks>
|
||||
private void InitializePPTManagers()
|
||||
{
|
||||
try
|
||||
@@ -194,6 +279,12 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 启动PPT监控:当PowerPoint支持功能启用时,启动PPT管理器的监控功能。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 只有当Settings.PowerPointSettings.PowerPointSupport为true时才会启动监控,并记录启动事件日志。
|
||||
/// </remarks>
|
||||
private void StartPPTMonitoring()
|
||||
{
|
||||
if (Settings.PowerPointSettings.PowerPointSupport)
|
||||
@@ -203,6 +294,9 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 停止 PowerPoint 相关的监控:停止并清除用于延迟退出 PPT 模式的定时器,并停止 PPT 管理器的监控,同时记录事件日志。
|
||||
/// </summary>
|
||||
private void StopPPTMonitoring()
|
||||
{
|
||||
try
|
||||
@@ -221,7 +315,12 @@ namespace Ink_Canvas
|
||||
#region PowerPoint Application Management
|
||||
/// <summary>
|
||||
/// 启动PowerPoint应用程序守护
|
||||
/// <summary>
|
||||
/// 启动对本地 PowerPoint 应用实例的守护监控并在需要时创建应用程序实例。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 仅在 PowerPoint 增强功能已启用且未使用 ROT 链接时生效;方法将创建 PowerPoint 应用(若不存在)并启动用于定期检查应用状态的定时器。
|
||||
/// </remarks>
|
||||
private void StartPowerPointProcessMonitoring()
|
||||
{
|
||||
try
|
||||
@@ -272,7 +371,12 @@ namespace Ink_Canvas
|
||||
|
||||
/// <summary>
|
||||
/// 创建PowerPoint应用程序实例
|
||||
/// <summary>
|
||||
/// 创建并初始化一个隐藏的 PowerPoint 应用程序 COM 实例,并在可用时将该实例注入到当前的 PPT 管理器中。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 如果配置为使用 ROT 链接或已有有效的 PowerPoint 实例,则不会创建新实例。创建的实例会被设置为不可见并最小化;在实例准备就绪后会通过延迟调用将其设置到 PPT 管理器(SetPPTManagerApplication)。任何创建或注入失败的情况会被记录日志,但不会抛出异常给调用者。
|
||||
/// </remarks>
|
||||
private void CreatePowerPointApplication()
|
||||
{
|
||||
try
|
||||
@@ -325,7 +429,11 @@ namespace Ink_Canvas
|
||||
|
||||
/// <summary>
|
||||
/// 设置PPTManager的PowerPoint应用程序实例
|
||||
/// <summary>
|
||||
/// 将给定的 PowerPoint 应用实例注入到当前的 PPT 管理器中,若管理器为 null 或启用 ROT 链接则不做任何操作。
|
||||
/// 尝试使用非公开的 `ConnectToPPT` 方法进行绑定,若不可用则回退到写入公共 `PPTApplication` 属性;操作结果和异常通过日志记录。
|
||||
/// </summary>
|
||||
/// <param name="app">要注入的 PowerPoint 应用实例(Microsoft.Office.Interop.PowerPoint.Application)。</param>
|
||||
private void SetPPTManagerApplication(Microsoft.Office.Interop.PowerPoint.Application app)
|
||||
{
|
||||
try
|
||||
@@ -399,6 +507,10 @@ namespace Ink_Canvas
|
||||
/// <summary>
|
||||
/// 关闭PowerPoint应用程序
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 关闭当前的 PowerPoint 应用程序及其所有打开的演示文稿,释放相关 COM 资源并清理静态互操作状态。</summary>
|
||||
/// 会尝试关闭所有打开的演示文稿、退出 PowerPoint 进程、释放 COM 对象引用,并将内部 PowerPoint 互操作状态重置为初始值;操作结果会被记录到日志,发生异常时会记录错误并仍然尝试清理互操作状态。
|
||||
/// </remarks>
|
||||
private void ClosePowerPointApplication()
|
||||
{
|
||||
try
|
||||
@@ -436,6 +548,12 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 释放并清理与 PowerPoint COM 互操作相关的引用(演示文稿、Slides、当前幻灯片),并将幻灯片计数重置为 0。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 在释放过程中若发生异常会被捕获并以警告级别记录日志,不会抛出异常到调用者。
|
||||
/// </remarks>
|
||||
private void ClearStaticInteropState()
|
||||
{
|
||||
try
|
||||
@@ -466,6 +584,9 @@ namespace Ink_Canvas
|
||||
/// <summary>
|
||||
/// PowerPoint应用程序监控定时器事件
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 周期性监控嵌入的 PowerPoint 应用实例的可用性,并在检测到失效时尝试重建实例;当增强功能被禁用时停止监控,并在使用 ROT 链接时不进行检查。
|
||||
/// </remarks>
|
||||
private void OnPowerPointApplicationMonitorTick(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
@@ -491,6 +612,12 @@ namespace Ink_Canvas
|
||||
}
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// 释放并停止所有与 PowerPoint 集成相关的管理器与资源,恢复和清理应用的 PPT 相关运行状态。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 操作包括停止并释放 PPT 管理器、墨迹管理器和长按计时器,停止 PowerPoint 进程监控,关闭 PowerPoint 应用并清除静态 COM/互操作状态;所有异常会被捕获并记录为错误日志。
|
||||
/// </remarks>
|
||||
private void DisposePPTManagers()
|
||||
{
|
||||
try
|
||||
@@ -573,6 +700,10 @@ namespace Ink_Canvas
|
||||
#endregion
|
||||
|
||||
#region New PPT Event Handlers
|
||||
/// <summary>
|
||||
/// 处理 PowerPoint 连接状态的变更:更新界面连接/放映状态,并在断开时启动一个短延迟以安全退出 PPT 模式。
|
||||
/// </summary>
|
||||
/// <param name="isConnected">指示当前是否已与 PowerPoint 建立连接;`true` 表示已连接,`false` 表示已断开。</param>
|
||||
private void OnPPTConnectionChanged(bool isConnected)
|
||||
{
|
||||
try
|
||||
@@ -618,6 +749,14 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 处理 PowerPoint 演示文稿打开事件:清理画布墨迹、初始化墨迹管理器、处理导航逻辑、检查隐藏幻灯片和自动播放设置,并更新连接状态。
|
||||
/// </summary>
|
||||
/// <param name="pres">已打开的 PowerPoint 演示文稿(Presentation)实例。</param>
|
||||
/// <remarks>
|
||||
/// 操作包括:清理画布墨迹和备份历史记录,初始化墨迹管理器,处理跳转到首页或上次播放页的逻辑,检查隐藏幻灯片和自动播放设置,更新UI连接状态,并记录事件日志。
|
||||
/// 所有操作在UI线程异步执行,异常会被捕获并记录为错误日志。
|
||||
/// </remarks>
|
||||
private void OnPPTPresentationOpen(Presentation pres)
|
||||
{
|
||||
try
|
||||
@@ -701,6 +840,14 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 处理 PowerPoint 幻灯片放映状态变化事件:更新UI管理器的放映状态并检查主窗口可见性。
|
||||
/// </summary>
|
||||
/// <param name="isInSlideShow">指示当前是否处于幻灯片放映状态;`true` 表示正在放映,`false` 表示已退出放映。</param>
|
||||
/// <remarks>
|
||||
/// 操作包括:在UI线程异步通知UI管理器放映状态变化,检查并更新主窗口的可见性(用于仅PPT模式)。
|
||||
/// 异常会被捕获并记录为错误日志,确保方法执行不会中断。
|
||||
/// </remarks>
|
||||
private void OnPPTSlideShowStateChanged(bool isInSlideShow)
|
||||
{
|
||||
try
|
||||
@@ -724,6 +871,31 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 处理 PowerPoint 幻灯片放映开始事件:根据设置折叠或展开浮动栏,初始化放映状态,更新UI,加载当前页墨迹,并设置相关参数。
|
||||
/// </summary>
|
||||
/// <param name="wn">PowerPoint 幻灯片放映窗口(SlideShowWindow)实例,包含当前放映状态和视图信息。</param>
|
||||
/// <remarks>
|
||||
/// 操作包括:
|
||||
/// 1. 根据设置自动折叠或展开浮动栏
|
||||
/// 2. 停止墨迹重放
|
||||
/// 3. 获取当前活动演示文稿、当前幻灯片和总幻灯片数
|
||||
/// 4. 初始化墨迹管理器
|
||||
/// 5. 处理跳转到首页或上次播放位置的逻辑
|
||||
/// 6. 更新UI状态,包括放映状态、当前幻灯片编号
|
||||
/// 7. 设置浮动栏透明度和边距
|
||||
/// 8. 显示侧边栏退出按钮
|
||||
/// 9. 处理画板显示
|
||||
/// 10. 关闭白板模式(如果当前在白板模式)
|
||||
/// 11. 显示浮动栏主控件
|
||||
/// 12. 根据设置隐藏或显示手势面板和按钮
|
||||
/// 13. 如果设置了在新放映时显示画布,则进入批注模式并显示调色盘
|
||||
/// 14. 重置幻灯片放映结束事件标志
|
||||
/// 15. 加载当前页墨迹
|
||||
/// 16. 调整浮动栏边距动画
|
||||
///
|
||||
/// 所有UI操作在UI线程异步执行,异常会被捕获并记录为错误日志。
|
||||
/// </remarks>
|
||||
private async void OnPPTSlideShowBegin(SlideShowWindow wn)
|
||||
{
|
||||
try
|
||||
@@ -947,6 +1119,14 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 处理幻灯片放映中的切换:在幻灯片变更时保存当前页墨迹、加载目标页墨迹并更新界面状态。
|
||||
/// </summary>
|
||||
/// <param name="wn">当前的幻灯片放映窗口;若为 null 或其 View/Presentation 无效则方法不执行。</param>
|
||||
/// <remarks>
|
||||
/// - 如果收到与当前记录相同的页码或已有切换正在处理,则忽略该事件。
|
||||
/// - 在切换过程中会保存前一页的墨迹(如存在)、清空画布与历史、加载新页的墨迹、锁定新页墨迹并刷新当前页显示序号,同时更新内部的当前播放位置状态。
|
||||
/// </remarks>
|
||||
private void OnPPTSlideShowNextSlide(SlideShowWindow wn)
|
||||
{
|
||||
try
|
||||
@@ -1018,6 +1198,10 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 处理 PowerPoint 幻灯片放映结束时的清理与界面恢复,包括保存当前幻灯片墨迹、重置墨迹管理器状态、恢复主题与工具栏显示,并根据配置折叠或展示浮动工具栏等 UI 调整。
|
||||
/// </summary>
|
||||
/// <param name="pres">触发结束事件的 PowerPoint 演示文稿(Presentation)实例,用于保存墨迹并尝试读取放映时的当前页码。</param>
|
||||
private async void OnPPTSlideShowEnd(Presentation pres)
|
||||
{
|
||||
try
|
||||
@@ -1227,6 +1411,16 @@ namespace Ink_Canvas
|
||||
#endregion
|
||||
|
||||
#region Helper Methods
|
||||
/// <summary>
|
||||
/// 处理演示文稿打开时的导航逻辑:根据设置决定跳转到首页或显示上次播放页通知。
|
||||
/// </summary>
|
||||
/// <param name="pres">当前打开的 PowerPoint 演示文稿(Presentation)实例。</param>
|
||||
/// <remarks>
|
||||
/// 操作包括:
|
||||
/// 1. 如果设置了总是跳转到首页,则尝试导航到第1页
|
||||
/// 2. 否则,如果设置了显示上次播放页通知,则显示上次播放页通知
|
||||
/// 异常会被捕获并记录为错误日志,确保方法执行不会中断。
|
||||
/// </remarks>
|
||||
private void HandlePresentationOpenNavigation(Presentation pres)
|
||||
{
|
||||
try
|
||||
@@ -1246,6 +1440,20 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 显示上次播放页通知:检查演示文稿的上次播放位置并显示跳转提示。
|
||||
/// </summary>
|
||||
/// <param name="pres">当前打开的 PowerPoint 演示文稿(Presentation)实例。</param>
|
||||
/// <remarks>
|
||||
/// 操作包括:
|
||||
/// 1. 检查演示文稿是否为null
|
||||
/// 2. 获取演示文稿路径并计算文件哈希值
|
||||
/// 3. 构建保存位置文件夹路径和位置文件路径
|
||||
/// 4. 检查位置文件是否存在
|
||||
/// 5. 尝试解析位置文件中的页码
|
||||
/// 6. 如果解析成功且页码大于0,则保存上次播放页码并显示跳转提示窗口
|
||||
/// 异常会被捕获并记录为错误日志,确保方法执行不会中断。
|
||||
/// </remarks>
|
||||
private void ShowPreviousPageNotification(Presentation pres)
|
||||
{
|
||||
try
|
||||
@@ -1290,6 +1498,19 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 检查并通知隐藏幻灯片:扫描演示文稿中的所有幻灯片,检测隐藏幻灯片并显示取消隐藏的提示。
|
||||
/// </summary>
|
||||
/// <param name="pres">要检查的 PowerPoint 演示文稿(Presentation)实例。</param>
|
||||
/// <remarks>
|
||||
/// 操作包括:
|
||||
/// 1. 检查演示文稿及其幻灯片集合是否为null
|
||||
/// 2. 遍历所有幻灯片,检测是否存在隐藏的幻灯片
|
||||
/// 3. 如果存在隐藏幻灯片且未显示过恢复隐藏幻灯片窗口,则显示确认窗口
|
||||
/// 4. 如果用户确认,则取消所有幻灯片的隐藏状态
|
||||
/// 5. 无论用户选择如何,都会重置IsShowingRestoreHiddenSlidesWindow标志
|
||||
/// 异常会被捕获并记录为错误日志,确保方法执行不会中断。
|
||||
/// </remarks>
|
||||
private void CheckAndNotifyHiddenSlides(Presentation pres)
|
||||
{
|
||||
try
|
||||
@@ -1343,6 +1564,20 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 检查并通知自动播放设置:扫描演示文稿中的所有幻灯片,检测自动播放或排练计时设置并显示取消提示。
|
||||
/// </summary>
|
||||
/// <param name="pres">要检查的 PowerPoint 演示文稿(Presentation)实例。</param>
|
||||
/// <remarks>
|
||||
/// 操作包括:
|
||||
/// 1. 检查是否正在显示PPT放映结束按钮,如果是则直接返回
|
||||
/// 2. 检查演示文稿及其幻灯片集合是否为null
|
||||
/// 3. 遍历所有幻灯片,检测是否存在自动播放或排练计时设置
|
||||
/// 4. 如果存在自动播放设置且未显示过自动播放提示窗口,则显示确认窗口
|
||||
/// 5. 如果用户确认,则将演示文稿的放映设置设置为手动播放模式
|
||||
/// 6. 无论用户选择如何,都会重置IsShowingAutoplaySlidesWindow标志
|
||||
/// 异常会被捕获并记录为错误日志,确保方法执行不会中断。
|
||||
/// </remarks>
|
||||
private void CheckAndNotifyAutoPlaySettings(Presentation pres)
|
||||
{
|
||||
try
|
||||
@@ -1395,6 +1630,18 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 加载当前幻灯片的墨迹:清空画布和历史记录,然后加载指定幻灯片的墨迹。
|
||||
/// </summary>
|
||||
/// <param name="slideIndex">要加载墨迹的幻灯片索引。</param>
|
||||
/// <remarks>
|
||||
/// 操作包括:
|
||||
/// 1. 清空画布上的所有墨迹
|
||||
/// 2. 清空时间机器的墨迹历史记录
|
||||
/// 3. 从墨迹管理器加载指定幻灯片的墨迹
|
||||
/// 4. 如果加载到墨迹且墨迹集合不为空,则将墨迹添加到画布
|
||||
/// 异常会被捕获并记录为错误日志,确保方法执行不会中断。
|
||||
/// </remarks>
|
||||
private void LoadCurrentSlideInk(int slideIndex)
|
||||
{
|
||||
try
|
||||
@@ -1447,6 +1694,21 @@ namespace Ink_Canvas
|
||||
/// <summary>
|
||||
/// 重置PPT相关的状态变量,当PPT自动收纳设置变更时调用
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 将与 PowerPoint 播放和状态追踪相关的内部字段重置为初始默认值。
|
||||
/// 具体重置的字段包括:
|
||||
/// 1. 播放结束重入保护标志(isEnteredSlideShowEndEvent)
|
||||
/// 2. 演示文稿黑边指示(isPresentationHaveBlackSpace)
|
||||
/// 3. 上次播放页码(_lastPlaybackPage)
|
||||
/// 4. 导航标志(_shouldNavigateToLastPage)
|
||||
/// 5. 当前放映位置(_currentSlideShowPosition)
|
||||
/// 6. 滑动切换处理状态(_isProcessingSlideSwitch)
|
||||
///
|
||||
/// 该方法在执行过程中会:
|
||||
/// - 使用线程安全的方式重置滑动切换处理状态
|
||||
/// - 成功时记录追踪日志
|
||||
/// - 发生异常时记录错误日志并继续执行
|
||||
/// </remarks>
|
||||
public void ResetPPTStateVariables()
|
||||
{
|
||||
try
|
||||
@@ -1481,6 +1743,14 @@ namespace Ink_Canvas
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// 发起一次手动的 PowerPoint 连接检查并在短延迟后报告结果。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 如果尚未初始化 PPT 管理器则先进行初始化,然后重载连接并启动监控;
|
||||
/// 延迟约 800 毫秒后在 UI 线程上检查连接状态:若已连接仅记录事件日志,若未连接则弹出提示并记录警告;
|
||||
/// 若过程中抛出异常则记录错误日志、将 UI 连接状态置为断开并提示用户未找到幻灯片。
|
||||
/// </remarks>
|
||||
private void BtnCheckPPT_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
try
|
||||
@@ -1518,6 +1788,20 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 处理PowerPoint增强功能开关的切换事件
|
||||
/// </summary>
|
||||
/// <param name="sender">事件的来源对象</param>
|
||||
/// <param name="e">路由事件参数</param>
|
||||
/// <remarks>
|
||||
/// 当PowerPoint增强功能被启用时:
|
||||
/// 1. 禁用WPS支持
|
||||
/// 2. 更新PPT管理器的WPS支持设置
|
||||
/// 3. 启动PowerPoint进程守护
|
||||
/// 当PowerPoint增强功能被禁用时:
|
||||
/// 1. 停止PowerPoint进程守护
|
||||
/// 无论开关状态如何变化,都会保存设置到文件
|
||||
/// </remarks>
|
||||
private void ToggleSwitchPowerPointEnhancement_Toggled(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (!isLoaded) return;
|
||||
@@ -1549,6 +1833,20 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 处理WPS支持开关的切换事件
|
||||
/// </summary>
|
||||
/// <param name="sender">事件的来源对象</param>
|
||||
/// <param name="e">路由事件参数</param>
|
||||
/// <remarks>
|
||||
/// 当WPS支持被启用时:
|
||||
/// 1. 如果PowerPoint支持未启用,则启用PowerPoint支持
|
||||
/// 2. 启动PPT监控
|
||||
/// 3. 如果PowerPoint增强功能已启用,则禁用它并停止PowerPoint进程守护
|
||||
/// 无论开关状态如何变化,都会:
|
||||
/// 1. 更新PPT管理器的WPS支持设置
|
||||
/// 2. 保存设置到文件
|
||||
/// </remarks>
|
||||
private void ToggleSwitchSupportWPS_Toggled(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (!isLoaded) return;
|
||||
@@ -1587,11 +1885,27 @@ namespace Ink_Canvas
|
||||
SaveSettingsToFile();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前是否启用了WPS支持
|
||||
/// </summary>
|
||||
/// <value>如果启用了WPS支持,则为true;否则为false</value>
|
||||
private static bool isWPSSupportOn => Settings.PowerPointSettings.IsSupportWPS;
|
||||
|
||||
/// <summary>
|
||||
/// 指示是否正在显示恢复隐藏幻灯片的窗口
|
||||
/// </summary>
|
||||
public static bool IsShowingRestoreHiddenSlidesWindow;
|
||||
|
||||
/// <summary>
|
||||
/// 指示是否正在显示自动播放提示窗口
|
||||
/// </summary>
|
||||
private static bool IsShowingAutoplaySlidesWindow;
|
||||
|
||||
/// <summary>
|
||||
/// 处理“上一页”按钮的点击操作:在满足自动保存条件时保存当前幻灯片截图并尝试切换到上一张幻灯片;在切换失败或发生异常时记录日志并更新连接状态。
|
||||
/// </summary>
|
||||
/// <param name="sender">事件的来源对象(通常是触发按钮)。</param>
|
||||
/// <param name="e">路由事件参数。</param>
|
||||
private void BtnPPTSlidesUp_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
Application.Current.Dispatcher.Invoke(() =>
|
||||
@@ -1624,6 +1938,12 @@ namespace Ink_Canvas
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 处理“下一页”按钮点击:在满足自动保存条件时保存当前幻灯片的截图并尝试切换到下一张幻灯片。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 如果切换操作失败或发生异常,会写入日志并将 PPT 连接状态更新为断开。
|
||||
/// </remarks>
|
||||
private void BtnPPTSlidesDown_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
Application.Current.Dispatcher.Invoke(() =>
|
||||
@@ -1656,6 +1976,17 @@ namespace Ink_Canvas
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 处理PPT导航按钮的鼠标按下事件
|
||||
/// </summary>
|
||||
/// <param name="sender">事件的来源对象</param>
|
||||
/// <param name="e">鼠标按钮事件参数</param>
|
||||
/// <remarks>
|
||||
/// 该方法在用户按下PPT导航按钮时执行以下操作:
|
||||
/// 1. 记录按下的按钮对象
|
||||
/// 2. 检查是否启用了PPT按钮页码点击功能
|
||||
/// 3. 根据按下的按钮设置相应的反馈边框透明度
|
||||
/// </remarks>
|
||||
private void PPTNavigationBtn_MouseDown(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
lastBorderMouseDownObject = sender;
|
||||
@@ -1678,6 +2009,16 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 处理PPT导航按钮的鼠标离开事件
|
||||
/// </summary>
|
||||
/// <param name="sender">事件的来源对象</param>
|
||||
/// <param name="e">鼠标事件参数</param>
|
||||
/// <remarks>
|
||||
/// 该方法在用户鼠标离开PPT导航按钮时执行以下操作:
|
||||
/// 1. 重置按下的按钮对象为null
|
||||
/// 2. 根据离开的按钮设置相应的反馈边框透明度为0(隐藏反馈效果)
|
||||
/// </remarks>
|
||||
private void PPTNavigationBtn_MouseLeave(object sender, MouseEventArgs e)
|
||||
{
|
||||
lastBorderMouseDownObject = null;
|
||||
@@ -1699,6 +2040,23 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 处理PPT导航按钮的鼠标释放事件
|
||||
/// </summary>
|
||||
/// <param name="sender">事件的来源对象</param>
|
||||
/// <param name="e">鼠标按钮事件参数</param>
|
||||
/// <remarks>
|
||||
/// 该方法在用户释放PPT导航按钮时执行以下操作:
|
||||
/// 1. 检查释放的按钮是否与按下的按钮一致
|
||||
/// 2. 隐藏按钮的反馈效果
|
||||
/// 3. 检查是否启用了PPT按钮页码点击功能
|
||||
/// 4. 检查PPT是否已连接且在放映状态
|
||||
/// 5. 设置背景透明度和颜色
|
||||
/// 6. 切换到光标模式
|
||||
/// 7. 尝试显示PPT幻灯片导航
|
||||
/// 8. 如果浮动栏未折叠,则调整其位置
|
||||
/// 9. 捕获并记录可能的异常
|
||||
/// </remarks>
|
||||
private async void PPTNavigationBtn_MouseUp(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
if (lastBorderMouseDownObject != sender) return;
|
||||
@@ -1758,6 +2116,17 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 处理“开始幻灯片放映”按钮的点击事件
|
||||
/// </summary>
|
||||
/// <param name="sender">事件的来源对象</param>
|
||||
/// <param name="e">路由事件参数</param>
|
||||
/// <remarks>
|
||||
/// 该方法在用户点击“开始幻灯片放映”按钮时执行以下操作:
|
||||
/// 1. 在新线程中尝试启动PPT幻灯片放映
|
||||
/// 2. 如果启动失败,记录警告日志
|
||||
/// 3. 捕获并记录可能的异常
|
||||
/// </remarks>
|
||||
private void BtnPPTSlideShow_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
new Thread(() =>
|
||||
@@ -1884,6 +2253,17 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 处理PPT上一页控制按钮的鼠标按下事件
|
||||
/// </summary>
|
||||
/// <param name="sender">事件的来源对象</param>
|
||||
/// <param name="e">鼠标按钮事件参数</param>
|
||||
/// <remarks>
|
||||
/// 该方法在用户按下PPT上一页控制按钮时执行以下操作:
|
||||
/// 1. 记录按下的按钮对象
|
||||
/// 2. 根据按下的按钮设置相应的反馈边框透明度
|
||||
/// 3. 如果启用了PPT按钮长按翻页功能,则启动长按检测
|
||||
/// </remarks>
|
||||
private void GridPPTControlPrevious_MouseDown(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
lastBorderMouseDownObject = sender;
|
||||
@@ -1910,6 +2290,17 @@ namespace Ink_Canvas
|
||||
StartLongPressDetection(sender, false);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 处理PPT上一页控制按钮的鼠标离开事件
|
||||
/// </summary>
|
||||
/// <param name="sender">事件的来源对象</param>
|
||||
/// <param name="e">鼠标事件参数</param>
|
||||
/// <remarks>
|
||||
/// 该方法在用户鼠标离开PPT上一页控制按钮时执行以下操作:
|
||||
/// 1. 重置按下的按钮对象为null
|
||||
/// 2. 根据离开的按钮设置相应的反馈边框透明度为0(隐藏反馈效果)
|
||||
/// 3. 停止长按检测
|
||||
/// </remarks>
|
||||
private void GridPPTControlPrevious_MouseLeave(object sender, MouseEventArgs e)
|
||||
{
|
||||
lastBorderMouseDownObject = null;
|
||||
@@ -1933,6 +2324,18 @@ namespace Ink_Canvas
|
||||
// 停止长按检测
|
||||
StopLongPressDetection();
|
||||
}
|
||||
/// <summary>
|
||||
/// 处理PPT上一页控制按钮的鼠标释放事件
|
||||
/// </summary>
|
||||
/// <param name="sender">事件的来源对象</param>
|
||||
/// <param name="e">鼠标按钮事件参数</param>
|
||||
/// <remarks>
|
||||
/// 该方法在用户释放PPT上一页控制按钮时执行以下操作:
|
||||
/// 1. 检查释放的按钮是否与按下的按钮一致
|
||||
/// 2. 根据释放的按钮设置相应的反馈边框透明度为0(隐藏反馈效果)
|
||||
/// 3. 停止长按检测
|
||||
/// 4. 调用上一页按钮的点击事件处理方法,实现切换到上一页的功能
|
||||
/// </remarks>
|
||||
private void GridPPTControlPrevious_MouseUp(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
if (lastBorderMouseDownObject != sender) return;
|
||||
@@ -1960,6 +2363,17 @@ namespace Ink_Canvas
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 处理PPT下一页控制按钮的鼠标按下事件
|
||||
/// </summary>
|
||||
/// <param name="sender">事件的来源对象</param>
|
||||
/// <param name="e">鼠标按钮事件参数</param>
|
||||
/// <remarks>
|
||||
/// 该方法在用户按下PPT下一页控制按钮时执行以下操作:
|
||||
/// 1. 记录按下的按钮对象
|
||||
/// 2. 根据按下的按钮设置相应的反馈边框透明度
|
||||
/// 3. 如果启用了PPT按钮长按翻页功能,则启动长按检测
|
||||
/// </remarks>
|
||||
private void GridPPTControlNext_MouseDown(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
lastBorderMouseDownObject = sender;
|
||||
@@ -1986,6 +2400,17 @@ namespace Ink_Canvas
|
||||
StartLongPressDetection(sender, true);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 处理PPT下一页控制按钮的鼠标离开事件
|
||||
/// </summary>
|
||||
/// <param name="sender">事件的来源对象</param>
|
||||
/// <param name="e">鼠标事件参数</param>
|
||||
/// <remarks>
|
||||
/// 该方法在用户鼠标离开PPT下一页控制按钮时执行以下操作:
|
||||
/// 1. 重置按下的按钮对象为null
|
||||
/// 2. 根据离开的按钮设置相应的反馈边框透明度为0(隐藏反馈效果)
|
||||
/// 3. 停止长按检测
|
||||
/// </remarks>
|
||||
private void GridPPTControlNext_MouseLeave(object sender, MouseEventArgs e)
|
||||
{
|
||||
lastBorderMouseDownObject = null;
|
||||
@@ -2009,6 +2434,18 @@ namespace Ink_Canvas
|
||||
// 停止长按检测
|
||||
StopLongPressDetection();
|
||||
}
|
||||
/// <summary>
|
||||
/// 处理PPT下一页控制按钮的鼠标释放事件
|
||||
/// </summary>
|
||||
/// <param name="sender">事件的来源对象</param>
|
||||
/// <param name="e">鼠标按钮事件参数</param>
|
||||
/// <remarks>
|
||||
/// 该方法在用户释放PPT下一页控制按钮时执行以下操作:
|
||||
/// 1. 检查释放的按钮是否与按下的按钮一致
|
||||
/// 2. 根据释放的按钮设置相应的反馈边框透明度为0(隐藏反馈效果)
|
||||
/// 3. 停止长按检测
|
||||
/// 4. 调用下一页按钮的点击事件处理方法,实现切换到下一页的功能
|
||||
/// </remarks>
|
||||
private void GridPPTControlNext_MouseUp(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
if (lastBorderMouseDownObject != sender) return;
|
||||
@@ -2035,9 +2472,17 @@ namespace Ink_Canvas
|
||||
BtnPPTSlidesDown_Click(BtnPPTSlidesDown, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 处理PPT结束控制按钮的鼠标释放事件
|
||||
/// </summary>
|
||||
/// <param name="sender">事件的来源对象</param>
|
||||
/// <param name="e">鼠标按钮事件参数</param>
|
||||
/// <remarks>
|
||||
/// 该方法在用户释放PPT结束控制按钮时调用BtnPPTSlideShowEnd_Click方法,实现结束幻灯片放映的功能
|
||||
/// </remarks>
|
||||
private void ImagePPTControlEnd_MouseUp(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
BtnPPTSlideShowEnd_Click(BtnPPTSlideShowEnd, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user