====== IDItem ====== **//Inherited from//** NULL **//Inherited by//** [[class:kernel:NItem|NItem]] **//Friend class//** NULL **//Description//** XT中所有的数据对象均从IDItem继承,每一个IDItem都有一个备份指针,默认状态时为空。当一个数据对象发生修改时,该数据对象必须从对应的[[class:kernel:ItemManager|ItemManager]]检出(CheckOut),检出的时候数据对象会自动拷贝一份内存副本,功能如果成功执行,那即表示修改有效,数据管理系统会自动将发生修改的数据对象检入(CheckIn),在这一过程中修改之前的副本和修改之后的对象均会以二进制形式保存到本地临时的数据操作记录(Operation Record)文件中并在内存中释放副本清空备份指针,用户可以在后面操作中读取数据操作记录中的副本值回到修改之前的状态,同样的,只有有这份记录,用户也可以从过去的某个状态再顺序重做操作。在某些情况下,功能执行失败,修改的数据对象并不会检入到数据操作记录中,这时候就可以通过内存中的副本回滚到启动功能之前的状态。数据操作记录文件以二进制形式保存在硬盘上,由于它保存了所有数据对象的包括增加、修改、删除在内的全部历史操作记录,所以即使发生断电或者死机这样的极端情况,XT平台依然能快速恢复到故障发生之前的状态。\\ 这样的机制也非常方便故障的重现,便于程序员快速的分析、定位问题并解决问题,从而能够显著的提高软件可维护性。 **//Members//** * LinkList * [[commandmanager#m_pcmdlist|m_pCmdList]] * CreateCommandFunc [[commandmanager#m_pfcreatefunc[command_max_count]|m_pfCreateFunc[COMMAND_MAX_COUNT]]] * DestroyCommandFunc [[commandmanager#m_pfdestroyfunc[command_max_count]|m_pfDestroyFunc[COMMAND_MAX_COUNT]]] **//Public interface//** * [[commandmanager#commandmanager1|CommandManager]]() * virtual [[commandmanager#~commandmanager|~CommandManager]]() * ICommand * [[commandmanager#getcommand|getCommand]](int cid) * ICommand * [[commandmanager#createcommand|createCommand]](int cid,IMainFrame * pApp) * void [[commandmanager#destroycommand|destroyCommand]](int cid) * void [[commandmanager#setcommanditerator|setCommandIterator]](Iterator * pIter) * void [[commandmanager#clear|clear]]() * virtual void [[commandmanager#registercommands|registerCommands]]() **//Protected interface//** * virtual bool [[commandmanager#isoneclickcommand|isOneClickCommand]](int id) * void [[commandmanager#registercommand|registerCommand]](int id,CreateCommandFunc createF,DestroyCommandFunc destroyF) ---- {{anchor:m_pcmdlist}} **LinkList * m_pCmdList** 通过命令管理器生成的Command链表 {{anchor:m_pfcreatefunc[command_max_count]}} **CreateCommandFunc m_pfCreateFunc[COMMAND_MAX_COUNT]** 创建Command的函数指针表,每一个Command都有自己的创建函数 {{anchor:m_pfdestroyfunc[command_max_count]}} **DestroyCommandFunc m_pfDestroyFunc[COMMAND_MAX_COUNT]** 销毁Command的函数指针表,每一个Command都有自己的销毁函数 ---- {{anchor:commandmanager1}} **CommandManager()** *function: 构造CommandManager *parameters: NULL *return value: 无 {{anchor:~commandmanager}} **virtual ~CommandManager()** *function: 析构CommandManager *parameters: NULL *return value: 无 {{anchor:getcommand}} **ICommand * getCommand(int cid)** *function: 获取ID为cid的命令指针 *parameters: - [i]int cid: 命令ID *return value: 命令指针 {{anchor:createcommand}} **ICommand * createCommand(int cid,IMainFrame * pApp)** *function: 创建ID为cid的命令 *parameters: - [i]int cid: 命令ID - [i]IMainFrame * pApp: 主框架接口 *return value: 命令指针 {{anchor:destroycommand}} **void destroyCommand(int cid)** *function: 销毁ID为cid的命令 *parameters: - [i]int cid: 命令ID *return value: 无 {{anchor:setcommanditerator}} **void setCommandIterator(Iterator * pIter)** *function: 绑定命令遍历迭代器 *parameters: - [i]Iterator * pIter: List迭代器,用于遍历当前所有已创建的命令 *return value: 无 {{anchor:clear}} **void clear()** *function: 清除当前所有已创建的命令 *parameters: NULL *return value: 无 {{anchor:registercommands}} **virtual void registerCommands()** *function: 将命令注册到命令管理器中 *parameters: NULL *return value: 无 ---- {{anchor:isoneclickcommand}} **virtual bool isOneClickCommand(int id)** *function: 判断ID为id的命令是否为one click命令 *parameters: - [i]int id: 命令ID *return value: 若是one click命令则返回true,若否则返回false {{anchor:registercommand}} **void registerCommand(int id,CreateCommandFunc createF,DestroyCommandFunc destroyF)** *function: 将ID为id的命令注册到命令管理器中 *parameters: - [i]int id: 命令ID - [i]CreateCommandFunc createF: 该命令的创建函数指针 - [i]DestroyCommandFunc destroyF: 该命令的销毁函数指针 *return value: 无