GMF 教程 Mindmap 5

這一部分主要實現的是: 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

相關文章
相關標籤/搜索