feat: Service Registry + Bridge 解耦架构 + 全工程代码清理

## 架构升级:Service Registry + Bridge 模式

- 新增 PluginSDK/IPluginServices.h:10 个纯虚服务接口(IDataProvider/ILinkProvider/...)
- 新增 MavLinkServiceBridge:单 QObject 实现全部服务,隔离 MavLinkNode 依赖
- 升级 PluginManifest:支持 plugin.json 的 provides/consumes 声明式依赖
- 实现 ExtensionHost::autoWire():元对象自省自动连接信号槽
- 集成到 AppController:initModules() 中创建桥接器并注册到 ServiceRegistry
- CockpitPlugin 演示服务发现:initialize() 中通过 PluginContext 查找服务

## 代码清理

- Plugins/opmap:~280 行死代码(waypointsetting 100行注释块/tilematrix 54行/等27个文件)
- Plugins/MavLinkNode:~200 行 GBK 乱码注释翻译为 UTF-8 + 12 行注释死代码
- Plugins/ToolsUI:~222 行死代码(ECU.cpp 82行/INS.cpp 113行/Parse/ToolsUI 等)
- StatusUI/Setting/MissionUI:~65 行注释死代码
- Cockpit/leftladder.cpp:10 处 GBK 乱码翻译为中文
- 清理头文件注释掉的 #include(19 处)、空 if-else 分支、注释变量声明

## 编译验证

- [100%] Built target GCS 零错误
- 运行时 timeout 3s 正常退出,无崩溃
This commit is contained in:
2026-06-01 09:46:36 +08:00
parent 6fbb96dd9a
commit e7cf44504c
2188 changed files with 549867 additions and 45008 deletions
@@ -0,0 +1,93 @@
# GCS 工程目录规范 Skill
## 触发条件
当用户要求:
- "创建新工程" / "新建项目" / "初始化工程"
- "按标准规范组织代码" / "工程目录规范"
- "重构工程目录" / "整理工程结构"
- "建立 GCS 项目" / "地面站工程模板"
时,按照本规范生成工程骨架。
## 标准工程结构
```
project-root/
├── src/
│ ├── app/ # 主程序 + MainWindow + AppController
│ ├── core/ # 核心业务(protocol/mission/parameter/vehicle
│ ├── comm/ # 通讯层(serial/udp/DataLink
│ ├── ui/ # UI 组件
│ │ ├── panels/ # 功能面板(cockpit/map/mission/setting/status
│ │ ├── widgets/ # 可复用控件(inputter/selector/scope
│ │ └── theme/ # 皮肤/字体
│ ├── plugins/ # 插件系统 + 内置工具插件
│ └── config/ # 配置管理
├── tests/
│ ├── unit/ # 单元测试
│ ├── integration/ # 集成测试
│ └── fuzz/ # 模糊测试
├── resources/
│ ├── icons/
│ ├── qrc/
│ ├── translations/
│ └── styles/
├── docs/
│ ├── architecture.md
│ ├── build.md
│ └── PROJECT_LAYOUT.md # 本规范的详细文档
├── scripts/
│ └── build_release.bat
├── third_party/
│ └── mavlink/
├── .clang-format
├── .gitignore
├── CMakeLists.txt
└── README.md
```
## 命名约定
| 类型 | 规范 | 示例 |
|------|------|------|
| 目录 | `snake_case` | `remote_control/` |
| 文件 | `PascalCase.ext` | `DataLink.h` |
| 类名 | `PascalCase` | `MavLinkNode` |
| 成员 | `m_camelCase` | `m_portName` |
| 静态常量 | `kPascalCase` | `kDefaultBaud` |
| 信号 | 过去式 | `dataReceived` |
| 槽 | `onCamelCase` | `onDataReceived` |
## 模块依赖规则
- `ui` 依赖 `core``core` 不依赖 `ui`
- `plugins` 依赖 `core` 接口,不直接依赖 `ui`
- `comm``core` 通过接口解耦
- 禁止循环依赖
## 构建要求
- CMake 3.16+,每模块独立 `CMakeLists.txt`
- qmake `.pri` 兼容(渐进迁移)
- C++17 标准
- `third_party/` 仅放头文件或无构建系统的库
## 当前工程迁移映射
从现有 `gcs_nf` 工程迁移到标准结构时,使用以下映射:
| 当前 | 标准 |
|------|------|
| `App/` | `src/app/` + `src/ui/panels/` + `src/ui/widgets/` + `src/plugins/` |
| `MavLinkNode/` | `src/core/protocol/` |
| `dlink/` | `src/comm/` |
| `Cockpit/` | `src/ui/panels/cockpit/` |
| `opmap/` | `src/ui/panels/map/` |
| `Skin/` | `src/ui/theme/` |
| `VehicleManage/` | `src/core/vehicle/` |
| `mavlink/` | `third_party/mavlink/` |
| `图标/` | `resources/icons/` |
| `document/` | `docs/` |
详细规范见 `docs/PROJECT_LAYOUT.md`