2022年2月5日星期六

为KDE的日历插件添加农历

摘要:本文将记录为KDE Plasma 桌面的日历小工具添加农历插件的过程,希望能对想要开发日历插件或参与KDE项目开发的读者有所启发。

注:未完待续,持续更新中……

定位小工具源代码

预装的 Plasma 桌面小工具的源代码一般来源于三个项目

  1. Plasma Desktop:主要包含开始菜单(Kickoff)、任务管理器、虚拟桌面管理器等只在桌面上使用的小工具(因为还有 Plasma Mobile)
  2. Plasma Workspace:包含大部分预装的小工具,如剪贴板、时钟,以及本文所要修改的日历插件。
  3. Plasma Add-ons:包含一些扩展的小工具,如便签、计时器等。同时本文的农历插件最终也要提交到该项目。

定位 QML 界面的源代码非常容易,只需要使用 GammaRay 工具的 Quick Scenes 找到相应的界面元素,然后在右键菜单里即可定位到源代码的位置。然后根据源代码的文件名在相关项目里搜索文件所属的项目即可。GammaRay 是调试 Qt 应用程序的“瑞士军刀”,Quick Scenes 只是其众多功能中的其中一个非常好用的功能。

如上图所示, 日历界面的源代码文件名为 DaysCalendar.qml,利用 lxr.kde.org 很快就在 KDE Plasma Framework 项目里找到了这个文件。我们所要更改的是单个日期方格,在日期数字的下方加入农历,因此通过 GammaRay 或分析源代码,我们实际需要修改的文件是 DayDelegate.qml。通常要实现两个文字标签的上下排版,可以使用 anchors 定位或使用 ColumnLayout 布局,其中后者更方便,也是比较惯用的排版方式,但会导致界面的渲染性能显著降低。因此在该文件里,将原来的日期标签放入 Item 容器中,在日期标签下方添加一个 Loader,用于加载农历文字标签,两个标签通过 anchors 定位。

现在我们已经完成了简单的界面设计,但现在文本内容还只是一个占位符。其真正的文本内容还需要通过后端代码生成;同时我们还需要为日历的数据模型添加一个新的属性“subLabel”,使界面能够读取公历日期对应的农历日期。

为数据模型增加新的属性

待更新

预计涉及的部分:

  1. DaysModel
  2. EventPluginsManager

编写农历插件

待更新