這一部分主要實現的是: eclipse
使用擴展的Plug-in爲咱們的Diagram添加一個自定義動做 ide
Creating a Customization Plug-in 工具
儘管能夠給生成的代碼添加備註@generated NOT來避免下次從新生成代碼時覆蓋咱們修改的代碼,除此以外,還可使用一個新的Plug-in工程來將自定製(擴展)與生成的工程分離。 佈局
一、建立一個新的Plug-in工程,命名爲org.eclipse.gmf.examples.mindmap.diagram.custom,使用默認的設置,不要Activator類,也不用嚮導提供的任何模板。 ui
Custom Actions spa
目前爲止建立一個新的Subtopic的方法比較麻煩,須要頻繁點擊工具。如今但願給Topic結點添加右擊菜單項Create Subtopic來實現這個操做,直接建立Subtopic結點,包括連線。 .net
首先,咱們要知道,org.eclipse.ui.bindings能夠用來將Ctrl+I組合鍵(或者其餘組合鍵)分配給咱們的Action。能夠經過修改diagram.custom工程的plugin.xml文件來實現。不過剛建立的新工程沒有這個文件,不過不要緊。 code
二、打開diagram.custom工程的MAINIFEST.MF,選擇標籤Extension,單擊Add,添加org.eclipse.ui.bindings擴展點: xml
三、其實以前單擊Add的時候,就會自動建立plugin.xml文件了。而後能夠直接編輯這個文件,在<plugin>標籤之間添加內容: 繼承
<extension point="org.eclipse.ui.bindings"> <key commandId="org.eclipse.gmf.examples.mindmap.insertSubtopic" sequence="M1+I" schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" /> </extension>
四、爲了這個命令,須要使用org.eclipse.ui.command擴展點。在plugin.xml文件中添加以下內容:
<extension point="org.eclipse.ui.commands"> <category name="Mindmap" description="Commands related to Mindmap diagrams." id="org.eclipse.gmf.category.mindmap" /> <command categoryId="org.eclipse.gmf.category.mindmap" description="Inserts a new subtopic" id="org.eclipse.gmf.examples.mindmap.insertSubtopic" name="Insert Subtopic"> </command> </extension>五、如今,爲了彈出菜單,要使用org.eclipse.ui.popupMenus擴展點
<extension point="org.eclipse.ui.popupMenus"> <objectContribution adaptable="false" id="org.eclipse.gmf.examples.mindmap.diagram.ui.objectContribution.TopicEditPart1" objectClass="org.eclipse.gmf.examples.mindmap.diagram.edit.parts.TopicEditPart"> <menu id="MindmapInsert" label="Insert" path="additions"> <separator name="group1"> </separator> </menu> <action class="org.eclipse.gmf.examples.mindmap.diagram.part.MindmapCreateSubtopicAction" definitionId="org.eclipse.gmf.examples.mindmap.insertSubtopic" enablesFor="1" id="org.eclipse.gmf.examples.mindmap.popup.MindmapCreateSubtopicActionID" label="Subtopic" menubarPath="MindmapInsert/group1"> </action> </objectContribution> </extension>
六、不過,爲了使生效,要在MAINIFEST.MF加入:
Import-Package: org.eclipse.gmf.examples.mindmap.diagram.edit.parts
七、如今,若是運行程序,右擊Topic結點,能夠看到上下文菜單多了Insert:
八、以後,要實現那個Action。
在diagram.custom工程的src下建立包org.eclipse.gmf.examples.mindmap.diagram.part,而後建立類MindmapCreateSubtopicAction,完整代碼在後邊的下載地址。
不過,要按照提示添加各類Import-package,參考下圖:
注意要添加左邊的org.eclipse.gmf.runtime.diagram.ui,不然程序會提示org.eclipse.gmf.runtime.notation.View cannot be resolved。
九、此時運行程序,先建立一個Topic結點,而後右擊,選擇Insert——Subtopic,會自動在右上方的建立一個Topic結點,並帶有連線:
Custom Layout
默認的佈局並不適合mindmap。下面要實現的是給diagram添加一個自定義的佈局,雖然很簡單,可是卻指明瞭方法。仍是會使用擴展點來實現。
咱們將會嘗試兩中佈局:一個是繼承自
org.eclipse.gmf.runtime.diagram.ui.providers.LeftRightProvider
另外一個繼承自
org.eclipse.gmf.runtime.diagram.ui.providers.internal.RadialProvider
十、在工程的dependancies中加入org.eclipse.gmf.runtime.diagram.ui.providers。
十一、在plugin.xml中加入擴展:
<extension point="org.eclipse.gmf.runtime.diagram.ui.layoutProviders"> <layoutProvider class="org.eclipse.gmf.examples.mindmap.diagram.layout.MindmapDefaultLayoutProvider"> <Priority name="Medium" /> </layoutProvider> </extension> <extension point="org.eclipse.gmf.runtime.diagram.ui.layoutProviders"> <layoutProvider class="org.eclipse.gmf.examples.mindmap.diagram.layout.MindmapRadialLayoutProvider"> <Priority name="Low" /> </layoutProvider> </extension>
十二、而後建立包org.eclipse.gmf.examples.mindmap.diagram.layout,在包中建立兩個類MindmapDefaultLayoutProvider和MindmapRadialLayoutProvider,代碼見下載地址。
運行,可是我看不出來有什麼效果。
Removing Tools from the Palette
1三、若是不想要palette上的Notes和Zoom工具,能夠在自定義的工程中使用paletteProvider擴展點來實現移除這些工具。在diagram.custom工程的plugin.xml加入:
<extension point="org.eclipse.gmf.runtime.diagram.ui.paletteProviders"> <paletteProvider class="org.eclipse.gmf.runtime.diagram.ui.providers.DefaultPaletteProvider"> <Priority name="High" /> <contribution> <predefinedEntry id="standardGroup/selectionTool" remove="false" /> <predefinedEntry id="standardGroup/zoomInTool" remove="true" /> <predefinedEntry id="standardGroup/zoomOutTool" remove="true" /> <predefinedEntry id="standardGroup/noteStack/noteTool" remove="true" /> <predefinedEntry id="standardGroup/noteStack/textTool" remove="true" /> <predefinedEntry id="standardGroup/noteStack/noteattachmentTool" remove="true" /> </contribution> <editor id="org.eclipse.gmf.examples.mindmap.diagram.part.MindmapDiagramEditorID"> </editor> </paletteProvider> </extension>
1四、此時運行的話,會發現只有Select工具還在palette上,而原來的Note工具和縮放工具都移除了:
源碼:http://www.oschina.net/code/snippet_164134_19308
雙子座@開源中國:http://my.oschina.net/plumsoft