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,可以看到和我們第七節介紹的映射信息:
???????? ??
????? 4.為StateShape添加隔間EntryActions(在StateShpae上直接右鍵添加Compartment), Title為”進入操作”,TitelFillColor為LightBlue.同樣也添加隔間ExitActions,Title為”退出操作”.
????? 5.在Dsl details中映射兩個隔間,設置EntryActions隔間的顯示元素集合,開窗從State的StateHasEntryActions關系下選中EntryAction,設置顯示屬性為Label.即此隔間顯示它所具有的EntryAction集合的每個Label屬性值.同樣操作設置隔間ExitActions.
???????
???? 我們為StateShape添加一些裝飾器,來控制State展現時的一些效果.
????? 6.右鍵StateShape添加Expand Collapse Decorator,主要用來裝飾展開收縮,設置Position屬性值為InnerTopRight,這樣展開收縮圖標就會顯示在右上角.
????? 7.添加Text Desorator,命名為NameDecorator,設置Position屬性值為InnerTopCenter.(下面我們會將此裝飾器映射到屬性Name,也就設置屬性Name顯示在圖形的InnerTopCenter位置).
????? 8.在dsl details中映射NameDecorator到屬性Name:
??????? ?
??????
??????? 下面我們來完成在上一節我們提到的一個功能,就是設置我們狀態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.
????????
?????? 接下來我們來完成域關系轉移Transition的圖形顯示:
????? 12.修改ExampleConnector為TransitionConnector.將TransitionConnector與Transition建立映射關系.
????? 13.為TransitionConnector添加文本裝飾器LabelTextDecorator,Position屬性值為TargetTop,也就是屬性Label將會顯示在關系線Target端的頂部
????? 14.在dsl details中映射LabelTextDecorator到域類Transition的屬性Label:
????????
?????? 我們已經完成了域類State和域關系Transition的圖形符號,下面我們為它們添加工具箱的圖標(當然如果不添加的話,會直接采用默認的圖標):
?????? 15.為dsl項目添加兩個圖標Tasktool.bmp,FlowTool.bmp(路徑同上,下同),打開dsl explorer,找到結點Editor/Toolbox Tabs/LanguageSm/Tools,可以看到已經有了ExampleElement,ExampleRelationship.右鍵屬性分別把它們更名為State,Transition,Toolbox Icon分別對應選中上面兩個圖標.
???????
?????? 已經完成了,我們來運行一下這個狀態機設計器:
????? 16.注意在運行前一定保存完dsl文件后轉換所有的模板,然后點擊調試運行整個項目.具體這個狀態機的使用先不詳細介紹了.
?????????
代碼下載
?
參考資源
????? 1. Visual Stuido DSL 工具特定領域開發指南
????? 2. DSL Tools Lab???? http://code.msdn.microsoft.com/DSLToolsLab? 系列教程? [本系列的入門案例的主要參考]
作者:孤獨俠客(似水流年)
出處:http://lonely7345.cnblogs.com/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
?
總結
以上是生活随笔為你收集整理的Visual Studio DSL 入门 9---创建状态机的图形符号的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux内核的反复--一切都是过程
- 下一篇: PHP nl2br()格式化输出