回到待办事项子页签逻辑,刷新函数,会先清空mTodosParentContainer集合,再遍历数据容器的Todos列表,根据分类和优先级排序,通过AddChild接口,重新加入到mTodosParentContainer集合

以上,是第一个子页签的相关逻辑; 开始解析,第二个子页签”隐藏清单“;

对应的实例化,菜单按钮,点击注册

这是”隐藏清单“对应的,具体逻辑,比较简单直接

其中,刷新函数,也是遍历数据容器,筛选出 非完成 + Hide布尔为true 的事项,显示出来

开始解析,第三个 子页签 ”分类管理“

对应实例化和菜单入口

这是具体的对应逻辑; 添加一个”+“按钮,添加新的分类; RegisterEvent注册自身的点击事件,显隐;

刷新函数,遍历数据容器的Categories集合,绘制分类标签列表; 其中,创建新标签的逻辑,和编辑当前标签的逻辑,都是调用 OpenCategoryEditor接口,只是有无传参的区别; 还有删除按钮逻辑;

CreateSubWindow创建一个子窗口,用来编辑分类; 编辑分类的名字、颜色; 如果传参category为空,就是”添加“按钮的相关逻辑,调用数据模型管理类的Model.CreateCategory,创建新的标签分类;

else就是不为空,也就是编辑,当前已有标签列表,就是”保存“按钮,对应的相关逻辑

关闭子窗口逻辑,也加到OnHide隐藏窗体的重写函数中

分类编辑子窗口,对应表现

第四个子页签,”已完成“

对应逻辑实例化,和菜单按钮触发

已完成列表界面,对应具体逻辑

刷新函数,筛选出事项状态,是TodoState.Done的,然后排序,是根据完成时间FinishedAt.Date; 时间段的实例,参考TimeSpan的用法,这里totalTime初始化时间段为0,然后加上,各事项的使用时间 UsedTime 即可; 通过yyyy年MM月dd日的样式,显示出来,总共的消耗时间; 最终foreach遍历,排序后的数据组,通过CreateTodoView函数,创建一个个 已完成 事项;

时间的显示表现

具体逻辑,实例化FinishedTodoView类,这是单个 已完成 事项 对应的界面类

表现

单个 已完成 事项 界面类,对应逻辑; 其中的reset重置按钮,是可以把事项,恢复成NotStart状态,这会变回Todo待办事项,换到第一个子页签列表; 完成时间,是基于 FinishedAt 字段,修改样式显示; 删除按钮,也是调用对应的数据删除接口即可;

开始解析,第三个总页签,”产品“

对应的逻辑入口

对应的具体实现逻辑,最外部的,是一个简单的”创建产品“按钮,还有全局点击事件触发,注册; 这个页签的逻辑,是逐渐嵌套展开的,所以最外层的,相对简单;

回顾一下,有一个产品版本相关的类; 其中有:Version版本,笔记列表容器、待办事项容器,事项获取器,添加/移除 待办事项等;

版本是由三个字段组成

继续,回顾一下,产品类Product,还有特性类Feature; 产品是包含,不同的特性、不同的版本; 特性是有子特性容器Children,后续表现上,会是缩进嵌套的样式;