现在的位置: 首页 > 综合 > 正文

UI控件II: ACUIBaseControl的设计思路、流程图

2013年10月21日 ⁄ 综合 ⁄ 共 978字 ⁄ 字号 评论关闭

我们到底需要什么样的控件?
我想无非是创建、显示和修改数据内容。

总体设计:

UIBaseCtrl_Flows_Generic
如上图所示,整个流程由Initialize(初始化)开始,可以通过Uninitialize来重新设定;初始化之后,提供三个功能,Validate Inputs(输入校验),Set Current Content(设置值)和Save Changes(保存修改)。

0. Mode支持的模式

预定义了以下模式:

Creating 创建模式
ReadOnlyDisplay 只读模式
ChangableDisplay 修改模式
Customizing 自定义模式
Customizing2 自定义模式2
Customizing3 自定义模式3

1. Initialize(初始化)。

UIBaseCtrl_Flows_Initialize

初始化流程会调用如图所示的virtual methods。对于无法支持的Mode,派生类中只需要返回false就会迫使初始化失败。
最后的ClearModifyFlags用来清除所有的内部标志。ACUIBaseControl已经定义了一个flagMajorMod,通过public的Property——MajorModifyFlag可以查看该标志值。

 

 

2. Save Changes保存修改

流程图:

UIBaseCtrl_Flows_SaveChanges

如图所示,虚拟函数IsNeedSave决定了是否需要保存。对于Creating模式,该函数默认返回true.
ValidateInputs见下节。
GetCurrentObjectDataImpl方法负责把UI上的控件数值导入内存。
Save开头的一系列方法用于在各个模式保持。
最后同样会清除修改标志:ClearModifyFlag. ACUIBaseControl还提供Event来执行成功保存后的操作。

3. Validate Inputs 输入校验

流程图:
UIBaseCtrl_Flows_ValidateInputs
输入校验提供了一系列方法针对不同模式的校验。

4. Set Current Content 设置当前值

流程图:
UIBaseCtrl_Flows_SetCurrentContent
在Creating模式下无法设置,因为创建模式应该只允许从空白开始。
这里还会首先判断一把IsNeedSave,如果是,会首先进行保存。
成功设置之后,还会清除修改标志位。

5. Uninitialize 反初始化。
UIBaseCtrl_Flows_Uninitialize
反初始化会扔掉当前所有的修改标志位信息,而直接调用Cleanup系列的Virtual Methods。
成功操作后,会清除所有的标志位。

 

代码就不贴了,有了这些流程图,无论是C++, C#应该都分容易写出代码了。

抱歉!评论已关闭.