User Tools

Site Tools


class:ui:uiproxy

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)

  • function: 构造函数
  • parameters:
    1. [i]MainFrame * frame: 主框架指针
    2. [i]XDocument * doc: 文档指针
  • return value: 无

virtual ~UIProxy()

  • function: 析构函数
  • parameters: NULL
  • return value: 无

const char * getName() const

  • function: 获取该代理的名字
  • parameters: NULL
  • return value: 代理名字符串

void setName(const char * name)

  • function: 设置代理名
  • parameters:
    1. [i]const char * name: 代理名字符串
  • return value: 无

virtual void onCmdCommit()

  • function: 命令提交之后完成视图的切换
  • parameters: NULL
  • return value: 无

virtual void activate()

  • function: 将该界面代理激活
  • parameters: NULL
  • return value: 无

virtual void deactivate()

  • function: 将该界面代理停用
  • parameters: NULL
  • return value: 无

virtual void onDocLoaded()

  • function: 当文档载入数据时调用此函数更新界面
  • parameters: NULL
  • return value: 无

virtual void updateDocView(intptr_t updateFlag = 0)

  • function: 按照指定标志更新文档视图
  • parameters:
    1. [i]intptr_t updateFlag = 0: 更新标志
  • return value: 无

virtual void onCurrentDocViewChange()

  • function: 当前文档切换视图时调用此函数更新界面(同一个文档可能有多个视图)
  • parameters: NULL
  • return value: 无

virtual bool onApplicationEvent(EventTypeID et, XWord param)

  • function: 响应应用层发生的事件,如在该代理中处理返回true,否则返回false,交由MainFrame处理
  • parameters:
    1. [i]EventTypeID et: 应用事件类型
    2. [i] XWord param: 应用事件参数
  • return value: 如在该代理中处理返回true,否则返回false

vector<QWidget*> * getDocViews()

  • function: 获取该代理的文档视图列表
  • parameters: NULL
  • return value: 该代理的文档视图数组

int getDocViewCount()

  • function: 获取该代理的文档视图个数
  • parameters: NULL
  • return value: 该代理的文档视图个数

QWidget * getCurrentDocView()

  • function: 获取代理的当前视图
  • parameters: NULL
  • return value: 当前文档视图的指针

void setCurrentDocView(QWidget * w)

  • function: 设置代理的当前视图指针
  • parameters:
    1. [i]QWidget * w: 视图指针
  • return value: 无

XTreeModel * getTreeModel()

  • function: 获取文档的模型树Model指针(用于构建模型树视图)
  • parameters: NULL
  • return value: 模型树Model指针

XDocument * getDocument()

  • function: 获取文档指针
  • parameters: NULL
  • return value: 文档指针

void registerEnumString()

  • function: 注册枚举变量字符串
  • parameters: NULL
  • return value: 无

virtual XRender * getRender()

  • function: 获取图形渲染器
  • parameters: NULL
  • return value: 图形渲染器指针

virtual void onUIResize()

  • function: 界面调整尺寸时调整各部分控件尺寸
  • parameters: NULL
  • return value: 无

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

  • function: 列举对象树节点属性
  • parameters:
    1. [i]TypeID type: 节点类型
    2. [i] const XItem * item:数据对象指针
    3. [i] TypeID domainType: 数据对象所属域
  • return value: 无

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

  • function: 修改对象属性
  • parameters:
    1. [i]const XItem * item: 数据对象指针
    2. [i] ulong cid: 修改属性所用到的命令ID
    3. [i] const QVariant * v: 属性值
  • return value: 无

virtual bool isCommandEnabled(ulong cid)

  • function: 返回ID为cid的命令是否可用,在某些情况下根据文档的数据和状态,某些命令需要禁用
  • parameters:
    1. [i]ulong cid: 命令ID
  • return value: 如命令可用返回true,否则返回false
class/ui/uiproxy.txt · Last modified: 2022/11/20 10:35 (external edit)