使用GMF开发可视化界面编辑器(四)——Compartment

来源:互联网 发布:pdf属于结构化数据么 编辑:程序博客网 时间:2024/05/18 06:26

GMF视图定义含有这样的功能,可以将视图组件切割成多个Compartment,每个Compartment用于显示不同方面的信息内容,就好像是将一个屋子分割成多个隔断,每个隔断用于存放不同的物品。该功能普遍应用与一种情况,模型实体之间的类引用关系是组合关系,比如Task和Assignment实体,就可以从Task视图中切割出一个Compartment来,用于显示Assignment信息。

实现方法如下:

首先在Rounded Rectangle节点下新建一个Rectangle子节点,并为其指定如下属性信息:

compartment

这相当于在Task节点中为Assignment分配了一个视图空间,来用于显示其信息内容。接着我们为该Rectangle指定一个布局,为简化配置,这里使用了Stack Layout布局。然后,我们需要在TaskFigure节点下新建一个Child Access子节点,用于访问该Rectangle对象,将Figure属性设置成刚刚建立的AssignmentFigure。同样,需要在Canvas节点下实例化我们声明的AssignmentFigure,所不同的是这次我们要添加一个Compartment子节点,并将属性信息设置成如图所示:

compartment assignment

collapsible属性用于指定该compartment是否可折叠

有了Compartment视图之后,便可将Assignment视图添加到其中。

首先,新建一个Figure Descriptor节点,name属性设置为PersonAssignmentFigure,并为其添加Label子节点,Text属性设置为"分配到个人",Name属性同样设置成PersonAssignmentFigure(随意)。

然后在Canvas节点下面新增该Figure的实例,因为我们要显示的分配器信息只是一个标签,所以新建一个Diagram Label节点,将

Name属性设置成PersonAssignment,Figure属性设置成PersonAssignmentFigure。

 

视图模型创建好后,修改工具模型,因为任务分配器的种类可能会有很多,为了区分于其他工具标签,把他们放到另外一个工具组里,在Palette节点下面新建一个Tool Group节点,将Title属性设置成"任务分配器",并设置Collapsible属性为true,表示该工具组是可折叠的。然后,在工具组下面新建一个Creation Tool子节点,将Title属性和Description属性设置为"分配到个人"。

 

最后,完成模型的映射处理,操作如下:

首先,在Node Mapping<Task/Task>节点下面新增一个Compartment Mappping子节点,并将其Compartment属性设置成视图模型所声明的Compartment Assignment,然后,在Node Mapping<Task/Task>节点下面新增一个Child Reference子节点,并设置Containment Feature属性为Task.assignment:Assignment,因为Task和Assignment之间是组合引用关系,所以要设置的属性为Containment Feature。再将Compartment属性设置成刚刚建立的Compartment Mapping节点。最后为Child Reference节点添加Node Mapping子节点,并指定如下属性信息:

compartment mapping

至此Compartment映射已经建立,剩下来所需要做的就是将分配器信息添加到该Compartment中去

在Node Mapping<PersonAssignment/PersonAssignment>节点下面,新增一个Label Mapping子节点,将其Diagram Label属性设置成视图模型所声明的Diagram Label PersonAssignment,并修改Read Only属性为true,表明我们的标签是用户不可修改的。

映射模型建立好之后,重新生成generator模型和项目代码,并启动工程,界面运行如图所示:

process overview 4

原创粉丝点击