这一部分主要实现的是:
使用扩展的Plug-in为我们的Diagram添加一个自定义动作
Creating a Customization Plug-in
尽管可以给生成的代码添加备注@generated NOT来避免下次重新生成代码时覆盖我们修改的代码,除此之外,还可以使用一个新的Plug-in工程来将自定制(扩展)与生成的工程分离。
1、创建一个新的Plug-in工程,命名为org.eclipse.gmf.examples.mindmap.diagram.custom,使用默认的设置,不要Activator类,也不用向导提供的任何模板。
Custom Actions
目前为止创建一个新的Subtopic的方法比较麻烦,需要频繁点击工具。现在希望给Topic结点添加右击菜单项Create Subtopic来实现这个操作,直接创建Subtopic结点,包括连线。
首先,我们要知道,org.eclipse.ui.bindings可以用来将Ctrl+I组合键(或者其他组合键)分配给我们的Action。可以通过修改diagram.custom工程的plugin.xml文件来实现。不过刚创建的新工程没有这个文件,不过没关系。
2、打开diagram.custom工程的MAINIFEST.MF,选择标签Extension,单击Add,添加org.eclipse.ui.bindings扩展点:
3、其实之前单击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>
4、为了这个命令,需要使用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>
5、现在,为了弹出菜单,要使用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>
6、不过,为了使生效,要在MAINIFEST.MF加入:
Import-Package: org.eclipse.gmf.examples.mindmap.diagram.edit.parts
7、现在,如果运行程序,右击Topic结点,可以看到上下文菜单多了Insert:
8、之后,要实现那个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。
9、此时运行程序,先创建一个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
10、在工程的dependancies中加入org.eclipse.gmf.runtime.diagram.ui.providers。
11、在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>
12、然后创建包org.eclipse.gmf.examples.mindmap.diagram.layout,在包中创建两个类MindmapDefaultLayoutProvider和MindmapRadialLayoutProvider,代码见下载地址。
运行,但是我看不出来有什么效果。
Removing Tools from the Palette
13、如果不想要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>
14、此时运行的话,会发现只有Select工具还在palette上,而原来的Note工具和缩放工具都移除了:
源码:http://www.oschina.net/code/snippet_164134_19308
双子座@开源中国:http://my.oschina.net/plumsoft
来源:oschina
链接:https://my.oschina.net/u/164134/blog/114354