====== ICommand ====== **//Inherited from//** NULL **//Inherited by//** NULL **//Friend class//** NULL **//Description//** 所有会对数据进行修改的命令和操作被视为一个命令(Command),在XT中命令分为五种类型,窗口命令,无窗口命令,无窗口静默命令,无限交互命令以及特殊定制窗口命令。有窗口的命令通过xml配置文件对窗口进行可视化定制,包括控件以及布局,特殊定制窗口命令在通用窗口基础上多了一个信息代理()。命令必须在命令管理器中注册之后才能通过菜单或者按钮触发,命令的启动则由主框架(MainFrame)负责。一般来说,每个命令都需要输入参数(IParameter),用户通过命令窗口输入参数,然后命令再通过窗口获取参数值,最后来执行相应的操作,命令的输出往往对应某种数据的变化(添加、删除或者修改),它可能会导致数据视图的变化,通过函数updateFrame可指示哪些部分需要更新。XT中所有的命令都从该基类继承,重新实现相应的接口函数即可。 XT系统中所有的命令必须在[[class:application:commandmanager|命令管理器]]中注册之后才能被使用。 **//Members//** * IMainFrame * [[icommand#m_pfrm|m_pFrm]] * ICommandWindow * [[icommand#m_pdlg|m_pDlg]] * XDocument * [[icommand#m_pdoc|m_pDoc]] * const CommandIndex * [[icommand#m_pindex|m_pIndex]] * ulong [[icommand#m_ilnextcid|m_ilNextCid]] * XPicker * [[icommand#m_ppicker|m_pPicker]] * bool [[icommand#m_bscript|m_bScript]] **//Public interface//** * [[icommand#icommand1|ICommand]](IMainFrame * mf, XDocument * doc) * void [[icommand#setnextcid|setNextCid]](ulong cid) * ulong [[icommand#getnextcid|getNextCid]]() * void [[icommand#invalidate|invalidate]]() * void [[icommand#setscriptmode|setScriptMode]](bool b) * bool [[icommand#isscriptmode|isScriptMode]]() const * bool [[icommand#isvalid|isValid]]() const * bool [[icommand#isdocumentready|isDocumentReady]]() * XDocument * [[icommand#getdocument|getDocument]]() * void [[icommand#setdocument|setDocument]](XDocument * doc) * virtual void [[icommand#initwindow|initWindow]]() * virtual void [[icommand#ondataexchange|onDataExchange]](const char * dxdialog = NULL) * virtual void [[icommand#exchangescript|exchangeScript]](ParamList * param) * virtual void [[icommand#updatedata|updateData]](bool bSaveValidate = true) * void [[icommand#updatetodialog|updateToDialog]]() * void [[icommand#updatefromdialog|updateFromDialog]]() * virtual void [[icommand#updatecontrol|updateControl]](const char * configStr) * virtual void [[icommand#oncontrolevent|onControlEvent]](const char * ctrlName, TypeID event = Event_Any) * virtual void [[icommand#onpickchanged|onPickChanged]]() * virtual void [[icommand#onpickrolechanged|onPickRoleChanged]]() * virtual void [[icommand#onviewchanged|onViewChanged]]() * virtual ErrorCode [[icommand#execute|execute]]() * virtual const char * [[icommand#getuisettingxml|getUISettingXml]]() * virtual const char * [[icommand#getsubroutine|getSubroutine]]() * virtual void [[icommand#setsubroutine|setSubroutine]](const char * subroutine) * virtual void [[icommand#setparam|setParam]](const CmdParam * param) * virtual bool [[icommand#setcontextparam|setContextParam]](const TreeNode * targetNode, const TreeNode * fromNode = 0) * virtual void [[icommand#settarget|setTarget]](vector * tars, int role = 0) * virtual CmdParam * [[icommand#getparam|getParam]]() * virtual CommandType [[icommand#gettype|getType]]() = 0 * virtual const char * [[icommand#getname|getName]]() const = 0 * ulong [[icommand#getid|getId]]() const * void [[icommand#setindex|setIndex]](const CommandIndex * idx) * const CommandIndex * [[icommand#index|index]]() const * virtual const char * [[icommand#gethint|getHint]]() * virtual bool [[icommand#checkcontext|checkContext]]() * virtual void [[icommand#updateframe|updateFrame]]() * virtual void [[icommand#getactionsetting|getActionSetting]](string * setting) * virtual void [[icommand#updateparam|updateParam]]() * virtual bool [[icommand#isparammodified|isParamModified]]() * virtual [[icommand#~icommand|~ICommand]]() ---- {{anchor:m_pfrm}} **IMainFrame * m_pFrm** {{anchor:m_pdlg}} **ICommandWindow * m_pDlg** {{anchor:m_pdoc}} **XDocument * m_pDoc** {{anchor:m_pindex}} **const CommandIndex * m_pIndex** {{anchor:m_ilnextcid}} **ulong m_ilNextCid** {{anchor:m_ppicker}} **XPicker * m_pPicker** {{anchor:m_bscript}} **bool m_bScript** ---- {{anchor:icommand1}} **ICommand(IMainFrame * mf, XDocument * doc)** *function: 构造函数 *parameters: - [i]IMainFrame * mf: 主框架指针 - [i] XDocument * doc: 文档指针 *return value: 无 {{anchor:setnextcid}} **void setNextCid(ulong cid)** *function: 设定后续命令ID *parameters: - [i]ulong cid: 后续命令ID *return value: 无 {{anchor:getnextcid}} **ulong getNextCid()** *function: 获取后续命令ID *parameters: NULL *return value: 后续命令ID {{anchor:invalidate}} **void invalidate()** *function: 使命令失效 *parameters: NULL *return value: 无 {{anchor:setscriptmode}} **void setScriptMode(bool b)** *function: 设置脚本模式 *parameters: - [i]bool b: 是否启动脚本模式 *return value: 无 {{anchor:isscriptmode}} **bool isScriptMode() const** *function: 是否脚本模式 *parameters: NULL *return value: 脚本模式返回true,否则返回false {{anchor:isvalid}} **bool isValid() const** *function: 命令是否可用 *parameters: NULL *return value: 如文档为空或主框架为空,返回false;否则返回true {{anchor:isdocumentready}} **bool isDocumentReady()** *function: 判断命令的文档指针是否可用 *parameters: NULL *return value: 若文档为空,返回false;否则返回true {{anchor:getdocument}} **XDocument * getDocument()** *function: 获取命令的文档指针 *parameters: 无 *return value: 命令的文档指针 {{anchor:setdocument}} **void setDocument(XDocument * doc)** *function: 设置命令的文档 *parameters: - [i]XDocument * doc: 文档对象 *return value: 无 {{anchor:initwindow}} **virtual void initWindow()** *function: 初始化命令的对话框窗口 *parameters: NULL *return value: 无 {{anchor:ondataexchange}} **virtual void onDataExchange(const char * dxdialog = NULL)** *function: 交换内存参数与界面控件状态值 *parameters: - [i]const char * dxdialog = NULL: 指定交换的子窗口名,若为空则交换主窗口的控件值 *return value: 无 {{anchor:exchangescript}} **virtual void exchangeScript(ParamList * param)** *function: 交换内存参数与脚本参数值 *parameters: - [i]ParamList * param: 脚本参数对象指针 *return value: 无 {{anchor:updatedata}} **virtual void updateData(bool bSaveValidate = true)** *function: 交换内存参数与界面控件状态值 *parameters: - [i]bool bSaveValidate = true: 为真将界面状态值更新到内存参数中,否则将内存参数更新到界面控件中 *return value: 无 {{anchor:updatetodialog}} **void updateToDialog()** *function: 将内存参数值更新到界面控件中 *parameters: NULL *return value: 无 {{anchor:updatefromdialog}} **void updateFromDialog()** *function: 将界面控件的状态值更新到内存参数中 *parameters: NULL *return value: 无 {{anchor:updatecontrol}} **virtual void updateControl(const char * configStr)** *function: 更新控件状态 *parameters: - [i]const char * configStr: 控件名 *return value: 无 {{anchor:oncontrolevent}} **virtual void onControlEvent(const char * ctrlName, TypeID event = Event_Any)** *function: 响应控件的交互事件 *parameters: - [i]const char * ctrlName:发生交互事件的控件名 - [i] TypeID event = Event_Any: 事件类型,默认为任何交互事件类型 *return value: 无 {{anchor:onpickchanged}} **virtual void onPickChanged()** *function: 当用户选择对象时更新对话框 *parameters: NULL *return value: 无 {{anchor:onpickrolechanged}} **virtual void onPickRoleChanged()** *function: *parameters: NULL *return value: {{anchor:onviewchanged}} **virtual void onViewChanged()** *function: 当视图变化时更新对话框 *parameters: NULL *return value: {{anchor:execute}} **virtual ErrorCode execute()** *function: 执行命令 *parameters: NULL *return value: 成本执行返回0,否则返回对应错误码 {{anchor:getuisettingxml}} **virtual const char * getUISettingXml()** *function: 获取命令对话框的文本配置文件路径 *parameters: NULL *return value: 文本配置文件路径字符串 {{anchor:getsubroutine}} **virtual const char * getSubroutine()** *function: *parameters: NULL *return value: {{anchor:setsubroutine}} **virtual void setSubroutine(const char * subroutine)** *function: *parameters: - [i]const char * subroutine: *return value: {{anchor:setparam}} **virtual void setParam(const CmdParam * param)** *function: 设置命令的参数 *parameters: - [i]const CmdParam * param: 命令参数结构体指针 *return value: 无 {{anchor:setcontextparam}} **virtual bool setContextParam(const TreeNode * targetNode, const TreeNode * fromNode = 0)** *function: 通过模型树右键菜单设置命令参数 *parameters: - [i]const TreeNode * targetNode: 右键点击的模型树节点 - [i] const TreeNode * fromNode = 0: 辅助模型树节点,一般在拷贝、拖拽时用于指定源节点 *return value: 如targetNode与命令匹配,返回true;否则返回false {{anchor:settarget}} **virtual void setTarget(vector * tars, int role = 0)** *function: 设置命令的应用对象 *parameters: - [i]vector * tars: 应用对象数组 - [i] int role = 0: 对象的角色 *return value: 无 {{anchor:getparam}} **virtual CmdParam * getParam()** *function: 返回命令参数指针 *parameters: NULL *return value: 命令参数指针 {{anchor:gettype}} **virtual CommandType getType() = 0** *function: 返回命令的类型 *parameters: NULL *return value: 命令类型ID {{anchor:getname}} **virtual const char * getName() const = 0** *function: 返回命令的名称 *parameters: NULL *return value: 命令名字符串 {{anchor:getid}} **ulong getId() const** *function: 返回命令的ID *parameters: NULL *return value: 命令ID {{anchor:setindex}} **void setIndex(const CommandIndex * idx)** *function: 设置命令的索引 *parameters: - [i]const CommandIndex * idx: 索引指针 *return value: 无 {{anchor:index}} **const CommandIndex * index() const** *function: 返回命令的索引 *parameters: NULL *return value: 索引指针 {{anchor:gethint}} **virtual const char * getHint()** *function: 返回命令的提示 *parameters: 无 *return value: 提示字符串 {{anchor:checkcontext}} **virtual bool checkContext()** *function: 检查命令参数与选择的对象是否满足执行命令的条件 *parameters: 无 *return value: 若满足命令执行返回真,否则返回false {{anchor:updateframe}} **virtual void updateFrame()** *function: 当成功执行命令时更新框架 *parameters: NULL *return value: 无 {{anchor:getactionsetting}} **virtual void getActionSetting(string * setting)** *function: 当命令为状态命令时,获取当前状态的格式字符串 *parameters: - [i]string * setting: 状态格式字符串 *return value: 无 {{anchor:updateparam}} **virtual void updateParam()** *function: 在成功执行之后更新命令参数 *parameters: NULL *return value: 无 {{anchor:isparammodified}} **virtual bool isParamModified()** *function: *parameters: NULL *return value: {{anchor:~icommand}} **virtual ~ICommand()** *function: 析构函数 *parameters: 无 *return value: 无