mirror of
https://github.com/wwiinnddyy/LanMountainDesktop.git
synced 2026-06-20 23:54:26 +08:00
78 lines
3.7 KiB
Markdown
78 lines
3.7 KiB
Markdown
# 组件系统模块(Component System Module)
|
||
|
||
本目录提供组件系统的模块化基础,用于支持内置组件管理与第三方扩展接入。
|
||
This directory provides the modular foundation for built-in component management and third-party extension integration.
|
||
|
||
## 核心文件职责(Core Files)
|
||
- `BuiltInComponentIds.cs`:内置组件 ID 常量(例如 `Clock`)。
|
||
Built-in component ID constants (for example `Clock`).
|
||
- `DesktopComponentDefinition.cs`:组件元数据定义(名称、类别、最小尺寸、可放置区域等)。
|
||
Component metadata model (name, category, minimum size, placement permissions).
|
||
- `ComponentPlacementRules.cs`:组件放置规则(最小尺寸、状态栏高度限制、网格边界约束)。
|
||
Placement rules (minimum size, status-bar height rule, grid clamping).
|
||
- `ComponentRegistry.cs`:组件注册中心,负责内置组件与扩展组件合并。
|
||
Registry that merges built-in and extension components.
|
||
- `Extensions/IComponentExtensionProvider.cs`:扩展提供者接口契约。
|
||
Extension provider interface contract.
|
||
- `Extensions/JsonComponentExtensionProvider.cs`:基于 JSON 的扩展加载器。
|
||
JSON-based extension loader.
|
||
|
||
## 第三方扩展契约(Extension Contract)
|
||
- 第三方可通过实现 `IComponentExtensionProvider` 提供组件定义。
|
||
Third parties can provide component definitions via `IComponentExtensionProvider`.
|
||
- 当前内置了 JSON 提供者,运行时扫描目录:
|
||
Built-in JSON provider scans at runtime:
|
||
- `Extensions/Components/*.json`(相对应用输出目录)
|
||
`Extensions/Components/*.json` (relative to app output directory)
|
||
|
||
## 加载流程(Load Flow)
|
||
1. `ComponentRegistry.CreateDefault()` 先注册内置组件。
|
||
Register built-in components first via `ComponentRegistry.CreateDefault()`.
|
||
2. 调用 `.RegisterExtensions(...)` 合并扩展组件。
|
||
Merge extension components via `.RegisterExtensions(...)`.
|
||
3. 主窗口通过注册中心校验组件合法性与放置权限。
|
||
Main window validates component identity and placement permission through the registry.
|
||
|
||
## JSON 清单格式(Manifest Schema)
|
||
JSON 文件为数组,每一项代表一个组件定义。
|
||
The JSON file is an array, where each item represents one component definition.
|
||
|
||
```json
|
||
[
|
||
{
|
||
"id": "Weather",
|
||
"displayName": "Weather",
|
||
"iconKey": "WeatherSunny",
|
||
"category": "Status",
|
||
"minWidthCells": 1,
|
||
"minHeightCells": 1,
|
||
"allowStatusBarPlacement": true,
|
||
"allowDesktopPlacement": true
|
||
}
|
||
]
|
||
```
|
||
|
||
字段说明(Field notes):
|
||
- `id`:组件唯一 ID(建议英文、稳定不变)。
|
||
Unique component ID (prefer stable English key).
|
||
- `displayName`:显示名。
|
||
Display name.
|
||
- `iconKey`:图标键(由上层 UI 解释)。
|
||
Icon key resolved by UI layer.
|
||
- `category`:组件分类。
|
||
Component category.
|
||
- `minWidthCells` / `minHeightCells`:最小占格,必须满足 `>= 1`。
|
||
Minimum cell size, must satisfy `>= 1`.
|
||
- `allowStatusBarPlacement`:是否允许放到顶部状态栏。
|
||
Whether placing in top status bar is allowed.
|
||
- `allowDesktopPlacement`:是否允许放到桌面区域。
|
||
Whether placing in desktop area is allowed.
|
||
|
||
## 放置规则摘要(Placement Rules Summary)
|
||
- 最小尺寸约束:`minWidthCells >= 1` 且 `minHeightCells >= 1`。
|
||
Minimum size constraint: `minWidthCells >= 1` and `minHeightCells >= 1`.
|
||
- 状态栏约束:状态栏组件高度必须为 `1` 格。
|
||
Status bar constraint: component height must be exactly `1` cell.
|
||
- 越界约束:所有组件坐标会被网格边界钳制(clamp)。
|
||
Out-of-bounds constraint: component coordinates are clamped to grid bounds.
|