UIProxy

Inherited from QObject,

Inherited by NULL

Friend class MainFrame,

Description

在XT架构中UIProxy为文档提供界面定制功能,界面代理的设计是为了降低应用层与界面层的耦合。在XT中每一个文档都有自己匹配的界面代理,它必须先通过XDocument的静态接口registerUIProxy注册之后才能使用。一般来说,为一个文档定制界面框架主要需要定制文档主视图(可以是用于3D渲染的GLDrawer,也可以是其他控件)、文档导航树模型(TreeModel)以及文档导航树右键菜单、主视图右键菜单(如GLContextMenu,可选项)。

UIProxy提供了一系列的接口函数以定制文档的界面交互方式。在打开或者导入文档时,XT会调用UIProxy的resetFrame接口重置文档的界面框架;在切换文档时,XT会调用updateFrame接口更新界面框架,在文档视图数据需要更新时,可调用接口updateDocView完成;用户从导航树上单击某个数据对象时,XT会调用listProperty接口列举该对象的属性表单,修改属性则通过接口changeProperty实现;用户导航树的右键菜单由接口setObjectContextMenu实现,双击事件由接口onObjectTreeEvent实现;对功能命令的可用性检查通过接口isCommandEnabled完成;onApplicationEvent接口负责处理属于该文档的应用事件;handleFrameAction接口负责处理面向该文档的框架命令;setWorkScene接口实现文档不同视图的切换(如三维渲染切换到曲线绘制,适用于文档有多个视图的场合,当前的视图类型存放在ViewData中);onUIResize接口实现对尺寸调整事件的响应以调整对文档框架各子控件的尺寸。开发者在定制自己的框架代理时需要重新实现上述接口。

Members

Public interface


MainFrame * m_pFrame

vector<QWidget*> * m_pDocViews

QWidget * m_pCurrentDocView

XTreeModel * m_pDocTreeMdl

XDocument * m_pDoc

XName m_strName

XPath m_strConfigFile


UIProxy(MainFrame * frame,XDocument * doc)

virtual ~UIProxy()

const char * getName() const

void setName(const char * name)

virtual void onCmdCommit()

virtual void activate()

virtual void deactivate()

virtual void onDocLoaded()

virtual void updateDocView(intptr_t updateFlag = 0)

virtual void onCurrentDocViewChange()

virtual bool onApplicationEvent(EventTypeID et, XWord param)

vector<QWidget*> * getDocViews()

int getDocViewCount()

QWidget * getCurrentDocView()

void setCurrentDocView(QWidget * w)

XTreeModel * getTreeModel()

XDocument * getDocument()

void registerEnumString()

virtual XRender * getRender()

virtual void onUIResize()

virtual void listProperty(TypeID type, const XItem * item, TypeID domainType)

virtual void changeProperty(const XItem * item, ulong cid, const QVariant * v)

virtual bool isCommandEnabled(ulong cid)