菜单

FancyZones 编辑器

相关源文件

FancyZones 编辑器是一个独立的 WPF 应用程序,它提供了一个图形界面,用于在 FancyZones PowerToy 中创建、编辑和管理窗口布局区域。该编辑器允许用户使用基于网格或基于画布的方法定义自定义区域布局,配置布局属性,并分配键盘快捷键以快速切换布局。

有关核心 FancyZones 模块和区域管理的信息,请参阅 FancyZones

架构概述

FancyZones 编辑器遵循模型-视图-控制器模式,其中独立的组件负责 UI 呈现、布局建模和数据持久化。

核心组件架构

来源: src/modules/fancyzones/editor/FancyZonesEditor/App.xaml.cs1-245 src/modules/fancyzones/editor/FancyZonesEditor/MainWindow.xaml.cs1-673 src/modules/fancyzones/editor/FancyZonesEditor/Overlay.cs1-350

主要用户界面组件

主窗口

MainWindow 作为主要界面,以网格视图显示可用的布局模板和自定义布局。它提供显示器选择功能和布局管理操作。

主要职责

  • 在单独的部分中显示模板和自定义布局
  • 处理布局选择和应用
  • 提供创建、编辑、复制和删除操作
  • 管理布局对话框和用户交互
组件文件目的
布局网格视图MainWindow.xaml:208-281显示可用布局
显示器选择MainWindow.xaml:326-348选择目标显示器
编辑对话框MainWindow.xaml:373-692配置布局属性
新建布局对话框MainWindow.xaml创建新布局

来源: src/modules/fancyzones/editor/FancyZonesEditor/MainWindow.xaml.cs48-75 src/modules/fancyzones/editor/FancyZonesEditor/MainWindow.xaml1-900

布局编辑器

编辑器系统为不同布局类型提供专用界面

GridEditor

处理基于网格的布局,包含行、列和可调整大小的区域。支持区域分割、合并和键盘导航。

主要功能

  • 通过 Shift+S 进行区域分割
  • 通过拖动选择进行区域合并
  • 通过键盘控件进行尺寸调整器操作
  • 实时预览更新

CanvasEditor

管理自由格式画布布局,其中区域可以独立定位和调整大小。

主要功能

  • 创建具有尺寸和位置控制的区域
  • 拖放区域操作
  • 磁性吸附辅助
  • 区域删除功能

来源: src/modules/fancyzones/editor/FancyZonesEditor/GridEditor.xaml.cs40-66 src/modules/fancyzones/editor/FancyZonesEditor/CanvasEditor.xaml.cs23-30

布局模型系统

布局系统使用多态层次结构来表示不同的布局类型。

布局模型层次结构

来源: src/modules/fancyzones/editor/FancyZonesEditor/Models/LayoutModel.cs17-409 src/modules/fancyzones/editor/FancyZonesEditor/Models/GridLayoutModel.cs14-409 src/modules/fancyzones/editor/FancyZonesEditor/Models/CanvasLayoutModel.cs12-207

布局类型

类型描述实现
空白空布局零区域的 CanvasLayoutModel
重点单个大区域一个区域的 CanvasLayoutModel
垂直列布局1行,N列的 GridLayoutModel
水平行布局N行,1列的 GridLayoutModel
网格基本网格布局等大单元格的 GridLayoutModel
PriorityGrid带优先区域的网格预定义模式的 GridLayoutModel
自定义用户创建的布局任一模型类型

来源: src/modules/fancyzones/editor/FancyZonesEditor/Models/MainWindowSettingsModel.cs49-88

编辑器工作流系统

编辑器工作流管理视图、编辑和保存布局之间的过渡。

布局编辑工作流

来源: src/modules/fancyzones/editor/FancyZonesEditor/MainWindow.xaml.cs333-361 src/modules/fancyzones/editor/FancyZonesEditor/EditorWindow.cs22-57

数据管理

文件 I/O 操作

FancyZonesEditorIO 类通过一系列专用解析器和序列化器处理所有数据持久化操作。

操作方法文件格式
编辑器参数ParseParams()JSON 配置
已应用的布局ParseAppliedLayouts()JSON 布局分配
布局热键ParseLayoutHotkeys()JSON 键绑定
模板布局ParseLayoutTemplates()JSON 模板定义
自定义布局ParseCustomLayouts()JSON 自定义设计
默认布局ParseDefaultLayouts()JSON 默认分配

序列化过程

来源: src/modules/fancyzones/editor/FancyZonesEditor/Utils/FancyZonesEditorIO.cs263-319 src/modules/fancyzones/editor/FancyZonesEditor/Utils/FancyZonesEditorIO.cs396-498

显示器和设备管理

编辑器通过 Overlay 类管理多个显示器配置,该类协调主窗口和每个显示器的布局窗口。

职责
Overlay管理多个显示器窗口和布局协调
Monitor表示具有布局设置的单个显示器
Device显示器属性的硬件抽象
LayoutOverlayWindow显示布局预览的每个显示器窗口

来源: src/modules/fancyzones/editor/FancyZonesEditor/Overlay.cs16-136 src/modules/fancyzones/editor/FancyZonesEditor/Models/Monitor.cs14-100 src/modules/fancyzones/editor/FancyZonesEditor/Models/Device.cs12-90

关键集成点

PowerToys Runner 集成

编辑器作为 PowerToys Runner 的子进程启动,并通过以下方式进行通信:

  • 用于显示器配置的命令行参数
  • 用于布局持久化的基于文件的 exchange
  • 用于清理操作的退出事件处理

设置集成

布局配置通过以下方式与主 PowerToys 设置系统集成:

  • PowerToys 数据目录中的 JSON 配置文件
  • 企业环境的组策略对象 (GPO) 支持
  • 布局配置的自动备份和恢复

来源: src/modules/fancyzones/editor/FancyZonesEditor/App.xaml.cs88-155 src/modules/fancyzones/editor/FancyZonesEditor/Utils/FancyZonesEditorIO.cs35-123