User Tools

Site Tools


dev_guide:decldocument

界定应用数据集

XT框架以数据为中心来驱动应用,XT框架用应用文档XDocument来管理各种数据,从XDocument继承实现新的文档类即可界定应用数据集。

应用数据集即应用文档所管理的数据类型,基于应用数据集就可构建一个应用空间,为了与其他的应用空间区分,每个应用空间被赋予唯一的字符串标识(长度小于64个字符)。所有的应用功能都在这个应用空间里完成,应用功能的交互以及工作流程的设定通过图形界面完成,在这个意义上,图形界面只是附属于应用文档的一层外壳,因此XT框架将与文档配套的图形界面也通过XDocument统一注册(registerUIProxy)。

XDocument提供了统一的接口用来:

  1. 添加数据管理器(insertItemManager
  2. 访问数据管理器(getItemManager
  3. 访问数据对象(getItem
  4. 构建更新数据对象树(buildObjectTree
  5. 构建更新数据的视图(createViewData
  6. 文件IO(loadsave

在使用应用文档之前,必须首先对应用空间标识注册,将应用文档的构造函数与析构函数与字符串标识绑定,并返回一个整形值:

TypeID RegisterTestDocument() 
{
  static int i = XDocument::registerDocument("Test", CreateTestDocument, DestroyTestDocument);
  return i;
}

这个整形值将在注册应用功能时帮助构建功能的索引。

在应用文档的构造函数里,指定文档的GUID、应用程序服务提供商的名称、应用文档的版本号以及日志文件的路径。日志文件默认是存放在%TEMP%/XT下对应的目录中。

TestDocument::TestDocument() :XDocument()
{
  sprintf(m_strGUID, "E42074FC-5D3A-4656-BFF2-431D4760620F");
  setVender("Test Co. LTD");
  setVersion(1, 0, 0, 1);
  setLogFile("test.log");
}

对应用数据的指定在初始化应用文档时通过调用insertItemManager完成。此外,应用文档的一些全局性设置也在初始化时设定。

void TestDocument::init()
{
  XDocument::init();
  XPreference::getInstance()->setVariable(_RENDER_BACKGROUND_TOP_COLOR, "250,250,250", "ui");
  XPreference::getInstance()->setVariable(_RENDER_BACKGROUND_BOTTOM_COLOR, "250,250,250", "ui");
  insertItemManager(new AnalysisManager(NULL));
  insertItemManager(new TestManager(0));
  insertItemManager(new PropertyManager(0));
  //
  m_strDocPath[0] = 0;
  m_strDocName[0] = 0;
  m_pTree->clear();
  setName("Untitled");
  m_pTree->setRoot("TestDocument", this, Domain_Document);
  buildObjectTree();
  setModified(false);
}

根据文档所包含的应用数据来构造应用文档的对象树,通过重新实现buildObjectTree接口完成。

void TestDocument::buildObjectTree()
{
  m_pTree->clear();
  m_pTree->setRoot("TdasDocument", this, Domain_Document);
  updateDomainTree(getItemManager(Domain_Property), "部件属性", Domain_Property);
  updateDomainTree(getItemManager(Domain_Analysis), "分析", Domain_Analysis);
}
dev_guide/decldocument.txt · Last modified: 2022/08/23 16:29 (external edit)