选区与剪贴板
选区用于表达用户当前选中的文本、行、单元格、树节点或文档范围。剪贴板负责把选区转换为可复制文本。
选区类型
不同组件的选区模型不同:
- 文本输入:字符范围。
- TextArea:多行文本范围。
- TreeView:节点。
- DataGrid:行、单元格或范围。
- MarkdownViewer:文档文本片段。
- MedicalRecordEditor:文档全局范围和可视渲染投影。
组件不应强行共享一种选区结构,而应提供统一的复制能力。
CopyableSelection
可复制组件应能把当前选区转换为文本。复制内容应符合用户预期,而不是内部对象结构。
示例:
- TreeView 复制当前节点路径和值。
- DataGrid 复制当前行或单元格范围。
- MarkdownViewer 复制用户拖选文本。
- ObjectInspector 复制节点完整路径和值。
剪贴板控制
ClipboardController 负责识别复制快捷键和写入文本。组件需要提供当前可复制内容。
复制行为应遵守:
- 没有选区时不写入无意义内容。
- 大范围复制需要有清晰格式。
- 调试组件应复制完整值,而不是只复制省略文本。
医疗文档选区
大文档选区不应每次拖动都展开全量文档树。适合使用全局范围和可视页投影,绘制时只判断可视渲染对象是否与选区相交。
这类设计可以把拖选和重绘复杂度限制在可视范围内。
性能原则
- 拖选过程不要构建全量选区对象。
- 鼠标移动路径不要递归扫描整个文档。
- 复制命令执行时可以按需构建完整内容。
- 选区高亮绘制应只处理可视区域。