Visual Studio DSL 入门 9---创建状态机的图形符号

    上一节我们已经创建状态机的元数据模型,在这一节,我们来完成我们状态机的图形符号,建立起状态机的测试运行环境.
    打开dsl文件后,关注泳道的右侧,首先我们来完成域类的形状表示: 
      1.一个状态State有进入操作和退出操作,所以我们为状态表示为隔间形状,可以在图上显示出来它的这两种操作(就象一个类包含方法和属性一样),先删除之前生成的ExampleShape.然后从工具箱中选择隔间形状(Compartment Shape)到Diagram Elements区域,命名为StateShape.
      2.修改StateShape的一些属性,只是为了它显示起来更美观,修改Geometry属性为RoundedRectangle(圆角矩形),修改FillColor为LightBlue.
      3.将StateShape与State域类映射起来,从工具箱中选择Diagram Element Map,点击域类State指向StateShape即可,点击映射查看Dsl details,可以看到和我们第七节介绍的映射信息:
         Visual Studio DSL 入门 9---创建状态机的图形符号_第1张图片  
      4.为StateShape添加隔间EntryActions(在StateShpae上直接右键添加Compartment), Title为”进入操作”,TitelFillColor为LightBlue.同样也添加隔间ExitActions,Title为”退出操作”.
      5.在Dsl details中映射两个隔间,设置EntryActions隔间的显示元素集合,开窗从State的StateHasEntryActions关系下选中EntryAction,设置显示属性为Label.即此隔间显示它所具有的EntryAction集合的每个Label属性值.同样操作设置隔间ExitActions.
        Visual Studio DSL 入门 9---创建状态机的图形符号_第2张图片
     我们为StateShape添加一些装饰器,来控制State展现时的一些效果.
      6.右键StateShape添加Expand Collapse Decorator,主要用来装饰展开收缩,设置Position属性值为InnerTopRight,这样展开收缩图标就会显示在右上角.
      7.添加Text Desorator,命名为NameDecorator,设置Position属性值为InnerTopCenter.(下面我们会将此装饰器映射到属性Name,也就设置属性Name显示在图形的InnerTopCenter位置).
      8.在dsl details中映射NameDecorator到属性Name:
        Visual Studio DSL 入门 9---创建状态机的图形符号_第3张图片 
      
        下面我们来完成在上一节我们提到的一个功能,就是设置我们状态State的Kind属性值,图形能够根据这个属性值的不同发生不同的变化,比如如果是初始状态,我们就在图形上显示一个开始的图标,如果是结束状态就在图形上显示一个结束的图标.
       9.我们先为dsl项目添加这样两个图标,为Resources文件夹添加两个图标文件Start.emf和Stop.emf. 路径在Visual Studio 2008 SDK安装路径\VisualStudioIntegration\Tools\DSLTools\SolutionTemplates\TaskFlow\Dsl\Resources\.
     10.为StateShape添加两个图标装饰器来表示这两个图标,StartIconDecorator,StopIconDecorator.设置装饰器的Default Icon分别为以上两个图标.Position默认为InnertTopLeft.
     11.在dsl details中映射这两个图标装饰器,对于StartIconDecorator设置Visibility Filter选中,Kind属性值为Initial.同样处理StopIconDecorator,Kind属性值为Final.
         Visual Studio DSL 入门 9---创建状态机的图形符号_第4张图片

       接下来我们来完成域关系转移Transition的图形显示:
      12.修改ExampleConnector为TransitionConnector.将TransitionConnector与Transition建立映射关系.
      13.为TransitionConnector添加文本装饰器LabelTextDecorator,Position属性值为TargetTop,也就是属性Label将会显示在关系线Target端的顶部
      14.在dsl details中映射LabelTextDecorator到域类Transition的属性Label:
         Visual Studio DSL 入门 9---创建状态机的图形符号_第5张图片

       我们已经完成了域类State和域关系Transition的图形符号,下面我们为它们添加工具箱的图标(当然如果不添加的话,会直接采用默认的图标):
       15.为dsl项目添加两个图标Tasktool.bmp,FlowTool.bmp(路径同上,下同),打开dsl explorer,找到结点Editor/Toolbox Tabs/LanguageSm/Tools,可以看到已经有了ExampleElement,ExampleRelationship.右键属性分别把它们更名为State,Transition,Toolbox Icon分别对应选中上面两个图标.
       
       已经完成了,我们来运行一下这个状态机设计器:
      16.注意在运行前一定保存完dsl文件后转换所有的模板,然后点击调试运行整个项目.具体这个状态机的使用先不详细介绍了.
          Visual Studio DSL 入门 9---创建状态机的图形符号_第6张图片


代码下载

 

参考资源
      1. Visual Stuido DSL 工具特定领域开发指南
      2. DSL Tools Lab     http://code.msdn.microsoft.com/DSLToolsLab  系列教程  [本系列的入门案例的主要参考]

作者:孤独侠客似水流年
出处:http://lonely7345.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 

你可能感兴趣的:(DSL)