文档章节

GMF 教程 Mindmap 5

双子座
 双子座
发布于 2013/03/17 22:36
字数 939
阅读 562
收藏 1

这一部分主要实现的是:

使用扩展的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

© 著作权归作者所有

上一篇: GMF 教程 Mindmap 6
下一篇: GMF 教程 Mindmap 4
双子座
粉丝 540
博文 78
码字总数 61009
作品 0
南京
程序员
私信 提问
文章里的问题,请帮忙解答下

@双子座 你好,想跟你请教个问题: 在 GMF 教程 Mindmap 1这篇文章里,在mindmap.gmfgen右击Generate diagram code时出现初始化类的错误 请问怎么解决,谢谢了...

操场和巷口
2013/12/31
9
1
GMF 教程 Mindmap 2

对Step1做补充操作,主要增加的功能: 为Topic结点添加划分(compartment),实现结点嵌套,使得可以在结点上半部显示结点名称,在下半部可以添加新的内容(这里是加入Thread子结点) Graphi...

双子座
2013/03/13
0
1
GMF 教程 Mindmap 3

Link Constraints 目前为止,工程运行一个Topic结点给自己连线,显然是没有意义的。接下来通过使用约束,避免这种现象。 1、打开mindmap.gmfmap,找到目前唯一的Link Mapping结点,右击,选择...

双子座
2013/03/15
0
0
MDSF:如何使用GMF来做TOGAF建模工具

在MDSF:架构工具简要功能说明中说到我要做一个支持TOGAF的架构工具,本篇介绍一下如何使用GMF来做一个简单的建模工具。 前提知识   如果你还不知道生成建模工具的基本过程以及基础知识,请...

技术小胖子
2017/11/14
0
0
思维导图软件--FreeMind

FreeMind是一套由Java撰写而成的实用的开源思维导图/心智(MindMap)软件,可用来帮助你整理思绪的工具软体,可将每一个环节用 图形表示,透过将思路图形化、结构化,帮助你对整个作业流程的了...

匿名
2008/09/17
82.9K
6

没有更多内容

加载失败,请刷新页面

加载更多

用Python从0开始实现一个中文拼音输入法

众所周知,中文输入法是一个历史悠久的问题,但也实在是个繁琐的活,不知道这是不是网上很少有人分享中文拼音输入法的原因,接着这次NLP Project的机会,我觉得实现一发中文拼音输入法,看看...

计算机编程
5分钟前
1
0
阿里P7架构师对Java虚拟机、类加载机制是怎么理解的?

概述 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载 (Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化 (Initializat...

kx33389
23分钟前
0
0
日本软银孙正义表示从未命令ARM断供华为

华为虽然有自主研发的麒麟处理器,但在架构和指令集方面仍然基于 ARM,所以当 ARM 切断与华为一切联系的消息传来后,很多人对华为麒麟的未来忧心忡忡,也怀疑已经收购了 ARM 的日本软银在背后...

linuxCool
31分钟前
0
0
mongodb安装、连接,mongodb用户管理、创建集合、数据管理、备份恢复,副本集介绍、搭建、测试,分片介绍、搭建、测试,php的mongodb扩展、mongo扩展

21.26 mongodb介绍 21.27 mongodb安装 21.28 连接mongodb 21.29 mongodb用户管理 21.30 mongodb创建集合、数据管理 21.31 php的mongodb扩展 21.32 php的mongo扩展 21.33 mongodb副本集介绍 ...

tobej
48分钟前
3
0
C++的变量初始化

C++中变量的初始化有很多种方式,如:默认初始化,值初始化,直接初始化,拷贝初始化,列表初始化。 1、默认初始化:默认初始化是指定义变量时没有指定初值时进行的初始化操作。 如:int a;...

天王盖地虎626
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部