网格和标尺效果如上图所示。

添加网格比较简单,也可以自己实现,主要思路是为编辑器添加一个GridLayer。但是还是建议参考eclipse自己的GEF样例来实现。

需要注意两个部分:

1、重写org.eclipse.gef.ui.parts.GraphicalEditor.configureGraphicalViewer(),加入以下部分

  1. getGraphicalViewer().setProperty(
  2. SnapToGrid.PROPERTY_GRID_ENABLED,
  3. true);
  4. // We keep grid visibility and enablement in sync
  5. getGraphicalViewer().setProperty(
  6. SnapToGrid.PROPERTY_GRID_VISIBLE,
  7. true);

2、重写节点的EditPart的getAdapter方法

  1. if (key == SnapToHelper.class) {
  2. List snapStrategies = new ArrayList();
  3. Boolean val = (Boolean) getViewer().getProperty(
  4. RulerProvider.PROPERTY_RULER_VISIBILITY);
  5. if (val != null && val.booleanValue())
  6. snapStrategies.add(new SnapToGuides(this));
  7. val = (Boolean) getViewer().getProperty(
  8. SnapToGrid.PROPERTY_GRID_ENABLED);
  9. if (val != null && val.booleanValue())
  10. snapStrategies.add(new SnapToGrid(this));
  11. int size = snapStrategies.size();
  12. if (size == 0)
  13. return null;
  14. SnapToHelper delegates[] = new SnapToHelper[size];
  15. for (int i = 0; i < size; i++)
  16. delegates[i] = (SnapToHelper) snapStrategies.get(i);
  17. return new CompoundSnapToHelper(delegates);
  18. }

以上即可完成添加网格。

如果要添加标尺呢?GEF提供了RulerComposite,可以方便的完成这个操作。

我们可以注意到,早前的那张图里,标尺是占据着整个编辑器的外层的,于是我们可以想到,只要替换编辑器的Parent Compostie为RulerComposite即可完成。

所以,同样是重写createGraphicalViewer方法,加入一下代码:

  1. rulerComp = new RulerComposite(parent, SWT.NONE);
  2. super.createGraphicalViewer(rulerComp);
  3. rulerComp
  4. .setGraphicalViewer((ScrollingGraphicalViewer) getGraphicalViewer());

但是,这样还不能算是结束,还需要重写getGraphicalControl方法

  1. protected Control getGraphicalControl() {
  2. // return getGraphicalViewer().getControl();
  3. return rulerComp;
  4. }

//事实上,这一步并不是必要的,如果你把rulerComposite作为GraphicalViewer的Control,那么,这一步就是多余的。

完成了以上,就完成了网格和标尺的添加。

当然,你可能会注意到你的网格和图中的田字型网格并不一致,这是因为我重写了RootEditPart并且提供了自己的GridLayer。

RCP:给GEF编辑器添加网格和标尺。的更多相关文章

  1. RCP:给GEF编辑器添加拖拽辅助线

    当图形边缘碰触时,会产生一条帮助拖拽的辅助线 这里需要三个类: 1.SnapToGeomotry 2.SnapToGuide(非必须) 3.SnapFeedbackPolicy

  2. GEF入门实例_总结_06_为编辑器添加内容

    一.前言 本文承接上一节:GEF入门实例_总结_05_显示一个空白编辑器 在上一节我们为我们的插件添加了一个空白的编辑器,这一节我们将为此编辑器添加内容. 二.GEF的MVC模式 在此只简单总结一下, ...

  3. MyEclipse的html/JSP编辑器添加代码自动提示

    http://lusterfly.iteye.com/blog/1872627 在myeclipse 9以前的版本中,我们如果要为html编辑器添加自动的代码提示可以这样操作: windows--&g ...

  4. Add an Editor to a Detail View 将编辑器添加到详细信息视图

    In this lesson, you will learn how to add an editor to a Detail View. For this purpose, the Departme ...

  5. RCP:gef智能寻路算法(A star)

    本路由继承自AbstactRouter,参数只有EditPart(编辑器内容控制器),gridLength(寻路用单元格大小),style(FLOYD,FLOYD_FLAT,FOUR_DIR). 字符 ...

  6. C++、GDAL创建shapefile,并向矢量文件中添加网格

    //总体来说这个过程就是构建数据源->构建层->构建要素->构建形状->关闭数据源. //要包含的GDAL头文件 #include <gdal_priv.h> #i ...

  7. 启用div作为编辑器 添加contentEditalbe属性

    1.自从HTML5中新引入了contentEditalbe属性以后,div就与textarea一样,可以作为最常用的编辑器使用. 1.启用div作为编辑器 让div进入编辑状态很简单,只需要: 复制代 ...

  8. FCKEditor编辑器添加中文字体的方法

    默认情况下,FCKEditor在进行文本编辑时,无法使用中文字体.让其添加中文字体的方法: 1.打开 fckconfig.js 文件,找到第154行(大概),会发现: 程序代码: FCKConfig. ...

  9. phpcms编辑器添加一键排版控件

    CKEditor添加一键排版插件实例,大家都知道phpcms也是ckeditor编辑器,那么如果增加这个一键排版这个牛逼功能呢增加好了后,效果图是这样的 废话不多说,直接说步骤第一步:config.j ...

随机推荐

  1. 交换机的link-dependency链路依赖功能

    在生产环境中,如果各主机连接到交换机的1-16端口,交换机的18端口上联到外部网络,如果此时交换机的18端口断掉,在主机端网卡仍然有连接,对于一些网络的配置可能就感知不到外部连接的消失,会有问题(如E ...

  2. Java自定义表单、自定义字段

    最近想实现用户自定义数据库中的字段,我想大部分人第一想到的就是EAV(Entity-Attribute-Value),这种方式对于写一个小的毕业设计应该还可以使用,当然也有很多CMS系统采用这种方式, ...

  3. php特性包括哪些?

    PHP的特性包括: 1. PHP 独特的语法混合了 C.Java.Perl 以及 PHP 自创新的语法. 2. PHP可以比CGI或者Perl更快速的执行动态网页——动态页面方面,与其他的编程语言相比 ...

  4. page、pageContext、servletContext的区别

    ServletContext是容器上下文,指当前的一个web应用的上下文 JSP网页本身,page对象是当前页面转换后的Servlet类的实例.从转换后的Servlet类的代码中,可以看到这种关系:O ...

  5. Bomb

    Description The counter-terrorists found a time bomb in the dust. But this time the terrorists impro ...

  6. jquery修改table某列的值

    开发的过程中,我们经常会遇到一些数和值之间的转换,比如本例:学部:1.小学,2.初中,3.高中;当然实现方法很多种,可以后台代码,也可以使用脚本... 修改前: 修改后: 代码: $("#t ...

  7. the fifth class

      1.实际比背景长,怎么做到的? 2个父级一个做头背景一个做尾背景 2.2层,每次自带背景上下是覆盖关系,如何做到 2层?,子浮动 3.标签 4.border可覆盖:margin-bottom 为负 ...

  8. java swing 去掉按钮文字周围的焦点框

    闲来无事,写了个swing界面,运行后看到当点击按钮时,中间文字会出现一个刚好把文字围住的小方框,这是按钮获得焦点的标志,我是觉得一个字:丑!怎么去掉呢?万能的度娘告诉我,设置下button的setF ...

  9. home键通知

    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("closeAlert"), n ...

  10. myBatis+SpringMVC+Maven整合

    一.先创建表结构 二.使用generator通过表结构自动生成model和dao.mapper 使用步骤: 1.解压generator.rar文件 2.文件中的generator.xml文件需要进行修 ...