Skip to content

模块信息弹窗查看

目标

将右键菜单中的“查看模块信息”由 IDE 内部遮罩弹窗改为 Electron 独立窗口显示。

独立窗口应在 Windows 任务栏中单独显示,不阻塞主 IDE 的编辑、设计器、终端和其他工作台操作,使用户能够一边查看模块 API、参数说明和示例,一边继续编写代码。

预期交互

  • 在项目资源管理器的“模块”节点或模块条目上右键,选择“查看模块信息”。
  • 系统打开独立的“模块信息”窗口,而不是在主 IDE 内显示遮罩式弹窗。
  • 该窗口拥有独立的任务栏图标、最小化、最大化、关闭、移动和缩放能力。
  • 主 IDE 保持可操作,用户可同时编辑 .lcpp、C++、设计器文件或查看构建输出。
  • 关闭模块信息窗口不影响主 IDE、当前工作区、已打开文件或模块启用状态。

窗口复用规则

  • 同一个模块已经存在信息窗口时,再次执行“查看模块信息”应直接激活并前置已有窗口。
  • 已有模块信息窗口时,查看另一个模块可以复用该窗口,并切换到目标模块的详情。
  • 避免针对同一模块反复创建多个重复窗口。
  • 主 IDE 关闭或切换工作区时,应由窗口管理服务决定关闭、复用或刷新模块信息窗口,避免窗口保留过期模块数据。

模块信息窗口内容

独立窗口应继续提供当前模块信息弹窗已有的核心能力:

  • 模块名称、模块 ID、版本、作者、许可证和适用平台。
  • 当前项目是否已启用该模块。
  • 类型、类、命令、属性、事件、常量、资源和公开 API。
  • 命令的声明、参数、返回值、备注和调用示例。
  • 模块文档浏览与搜索。
  • 接口树展开、折叠和筛选。
  • 复制模块 ID、复制命令调用示例等常用操作。
  • 模块安装、卸载、启用、禁用或更新后的状态刷新提示。

技术实现边界

模块信息窗口应由 Electron 主进程统一管理,不能只把现有 React 对话框样式改大或使用新的页面遮罩。

建议新增受管的模块信息窗口服务,职责包括:

  • 创建、显示、隐藏、激活和销毁模块信息 BrowserWindow
  • 维护模块 ID 与窗口实例的关联,避免重复创建窗口。
  • 记录并恢复窗口尺寸、位置和最大化状态。
  • 在窗口已经存在时发送模块切换消息,而不是重新创建窗口。
  • 在模块安装、卸载、启用、禁用、更新或项目切换后通知独立窗口刷新数据。
  • 在主窗口退出、工作区切换或应用退出时回收受管窗口和相关 IPC 资源。

IPC 约束

独立模块信息窗口与主 IDE 之间必须通过受限 IPC 通信。

  • renderer 不得直接访问 Node.js、文件系统或任意 Electron API。
  • 窗口只接收展示模块详情、切换模块、刷新状态和执行受控模块命令所需的数据。
  • 启用、禁用、安装、卸载、打开模块文档等操作必须复用现有模块服务和命令系统。
  • 不应在独立窗口中复制模块扫描、模块清单解析、安装或卸载逻辑。
  • 模块信息窗口中的操作应使用统一的 CommandServiceMenuService 和模块服务接口。

命令与菜单

建议增加或复用统一命令:

  • lingbuilder.modules.openModuleInfo:打开指定模块的信息窗口。
  • lingbuilder.modules.focusModuleInfo:激活已存在的模块信息窗口。
  • lingbuilder.modules.refreshModuleInfo:刷新当前模块信息窗口的模块数据。

右键菜单“查看模块信息”应通过统一 MenuService 注册,菜单动作应调用 CommandService,不应在 React 组件局部回调中直接创建窗口。

验收标准

  • 在模块右键菜单中可触发“查看模块信息”。
  • 模块信息以独立 Electron 窗口显示,并出现在 Windows 任务栏。
  • 打开信息窗口后,主 IDE 仍可正常输入、保存、运行和切换文件。
  • 重复查看同一模块不会创建多个重复窗口。
  • 查看不同模块时可正确切换展示内容。
  • 模块启用、禁用、安装、卸载或更新后,窗口状态和内容能正确刷新。
  • 关闭独立窗口不影响主 IDE。
  • electron 工程的 lint、模块测试和构建保持通过。