Crumb Bar and Address Bar (zh)

面包屑栏 和 地址栏

结构关系

面包屑新增的类共三个,即 面包屑栏 DFMCrumbBar , 面包屑项 DFMCrumbItem 和 地址栏 DFMAddressBar 。其中 地址栏面包屑栏 管理, 面包屑栏 由 DToolbar 管理,二 者互相独立,而 面包屑项 则由 面包屑栏 管理。

另外根据需求我们需要提供插件接口并实现预制插件支持现有的协议,新增插件接口类 DFMCrumbInterface 和相应实现类(称为面包屑栏控制器CrumbController)。插件类的注册和加载由 DFMCrumbManager 管理,并且 地址栏面包屑栏 分别持有自己独立的面包屑栏控制器。

面包屑栏

控件结构

使用 `QHBoxLayout` 盛放栏内主要内容,共三项,左箭头、面包屑容器 和 右箭头。箭头默认隐藏,当面包屑容 器宽度不足以完整显示面包屑容器内的项时据情况显示左右箭头。

面包屑容器使用 QScrollArea 作为容器, QHBoxLayout 做为布局并将 面包屑项 DFMCrumbItem 至于其中。

由于面包屑栏也负责管理地址栏 DFMAddressBar 的状态,故除了面包屑栏状态外还负责地址栏的显示隐藏和状态的管理。

相关类

详细文档请见 DFMCrumbBar 。

面包屑项

控件结构

使用 QPushButton 作为面包屑项,接受点击和 Drop 事件。每个项均可设置文字和/或图标。点击时将跳转到项所指的 Url , Drop 时复制文件到所指 Url 。

相关类

为了方便新增一个简单的纯数据类(于 DFMCrumbInterface ,其构造函数此处省略):

class CrumbData { DUrl url; QString iconName; QString displayText; QString iconKey = "icon"; };

详细文档请见 DFMCrumbItem 。

地址栏

控件结构

使用 `QLineEdit` ,状态由面包屑栏管理。

搜索栏应维护一个候选列表用于其接管的候选词列表控件(使用 `QStringListModel`)。用户输入时应检查候选词 列表并更新候选列表控件状态,补全状态。应响应 Tab 键补全。

相关类

详细文档请见 DFMAddressBar 。

面包屑插件

面包屑插件的任务为为(额外的)协议提供分割路径的功能。

加载面包屑通过如下固定的 IID 识别区分插件:

#define DFMCrumbFactoryInterface_iid "com.deepin.filemanager.DFMCrumbFactoryInterface_iid"

加载插件时通过 Url 的 scheme 作为插件 key ,当存在多个插件注册同一个 key 时,使用最后一个注册的插件。

- 插件的识别注册: DFMCrumbManager (单例) - 插件实例工厂: `DFMCrumbFactory`, 其 `create(key)` 返回新 DFMCrumbInterface 实例的指针。

由于插件应该能够针对不同的 Url 的 scheme 使得面包屑栏做出不同的行为,故插件接口类持有一个 `DFMCrumbBar` 实例的指针用以访问面包屑栏。

相关类

详细文档请见 DFMCrumbManager , DFMCrumbInterface 。