5.26在网上看到的方法,实现图形缩放、对齐、图形修改后进行dirty check。(未实验过)

目标:1. 使用ZoomManager来执行图形的缩放
2. 对图形进行对齐(Alignment)操作
3.
图形修改后进行dirty check(提示保存文档)

图形缩放
提供缩放能力的方法就是设置根图形的RootEditPart为ScalableRootEditPart。一般在Editor的configureGraphicalViewer()方法中设置RootEditPart。
ScalableRootEditPart提供了一个ZoomManager类用来管理图形的缩放操作。
通过该ZoomManager,我们可以创建出实现缩放的Actions(ZoomInAction、ZoomOutAction)。

一个问题:为什么ZoomInAction的注册工作放在configureGraphicalViewer()方法中而不是前面注册DirectEditAction时用到的createActions()方法?
因为createActions()方法是Editor的init()函数调用的,而configureGraphicalViewer()方法是Editor的createPartControl()方法调用的,创建EditorPart时init()函数先于createPartControl()函数被调用。由于我们创建ZoomInAction需要用到ScalableRootEditPart提供的ZoomManager,所以只能容忍这个不统一的地方了。

还可以用ZoomComboContributionItem实现缩放比例组合框。
值得注意的是ZoomComboContributionItem会在part激活时设置它所需要的ZoomManager,通过(ZoomManager)part.getAdapter(ZoomManager.class)这样的手段。所以所有需要使用该组合框的视图或编辑器都需要实现getAdapter方法,以返回正确的ZoomManager实例。
public
Object getAdapter(Class type) {
    if (type ==
ZoomManager.class) {
        return
((ScalableRootEditPart)
getGraphicalViewer().getRootEditPart()).getZoomManager();
   
}
    return super.getAdapter(type);
}

图形对齐
GEF的图形对齐非常简单,直接使用AlignmentAction类即可。
protected
void createActions() {
   
super.createActions();
    ActionRegistry registry =
getActionRegistry();
    IAction action = new
AlignmentAction((IWorkbenchPart)
this, PositionConstants.LEFT);
   
registry.registerAction(action);
    getSelectionActions().add(action.getId());
   
......}
通过把action加入selection actions list使得该action可以响应选择改变(selection
change)事件从而更新自己的状态。如果不加这句代码,左对齐工具按钮永远都是灰色的。

Dirty
Check
:
由于所有的操作都是由CommandStack管理的,所以通过CommandStack的isDirty()方法就可以得知Editor是否有发生修改。

此外再让DiagramEditor重载以下两个方法
public void doSave(IProgressMonitor monitor)
{
    getCommandStack().markSaveLocation();
}
public
void commandStackChanged(EventObject event) {
   
firePropertyChange(PROP_DIRTY);
   
super.commandStackChanged(event);
}

5.26在网上看到的方法,实现图形缩放、对齐、图形修改后进行dirty check。(未实验过),布布扣,bubuko.com

时间: 2024-10-19 00:07:31

5.26在网上看到的方法,实现图形缩放、对齐、图形修改后进行dirty check。(未实验过)的相关文章

Unity 显示Loading(加载)进度 对于网上流行的方法进行更正

实际上就是MOMO贴出来的方法其实是有问题的,用过的才知道.至于别的几乎不用找,根本一个抄一个,抄来抄去都是一样,没自己的东西. 用过MOMO那个方法的都应该会发现了,当进度条开始显示的时候,基本上已经加载到80%了,可能也跟Unity版本有关,我的是4.3.4 .但是实际上Unity的工作原理差不多就那样,在Start里面直接开始加载的协程,实际上一开始就会阻塞,导致画面刚刚渲染出来的时候,已经完成了一部分的加载,而很多资源会在一开始就加载了,如果这里的资源太多了,那么就会像我一样,显示很长时

linux cat命令使用方法详解--把档案串连接后传到基本输出

linux cat命令使用方法详解--把档案串连接后传到基本输出 日期:2011-12-05 点击:2324 来源: 未知 分享至: 使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName说明:把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案)参数:-n 或 --number 由 1 开始对所有输出的行数编号-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号-s 或 --squeeze-b

做web项目时对代码修改后浏览器端不生效的应对方法(持续更新)

做web项目时,经常会遇到修改了代码,但浏览器端没有生效,原因是多种多样的,我会根据我遇到的情况逐步更新解决办法 1.运行的时候采用debug模式,一般情况下使用项目部署按钮右边那个按钮下的tomcat7中的run就行,如果使用的是serves中的run serves,这种情况貌似不会自动编译 2.点击project菜单下的clean选项,在打开的窗口中选择你使用的项目,ok,这样会删除tomcat容器中关于该项目的一些信息,然后重新部署,运行 3.删除电脑中tomcat文件夹,重新解压,然后在

js输出26个字母两种方法

方法一 var character = new Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P",&

log4j通过配置文件配置即,即可完成系统报错想向指定邮箱发送提醒消息,网上的很多方法都又问题

我参考了下面的链接去实现,但是遇到了一些问题 参考链接: 1)http://blog.csdn.net/azheng270/article/details/2173430/ 这个链接说了如何操作的问题,但是他的log4j的配置文件感觉有问题 2)http://blog.csdn.net/cosmichut/article/details/2448159  log4j配置相对又点全 大致说一下步骤: 1.下载activation.jar和mail.jar,导入项目 2.下载log4j的压缩包文件,

[Effective JavaScript 笔记]第26条:使用bind方法实现函数的柯里化

bind方法的作用,除了有绑定函数到对象外,我们来看看bind方法的一些其它应用. 简单示例 例子:假设有一个装配URL字符串的简单函数.代码如下 function simpleURL(protocol,domain,path){ return protocol+'://'+domain+'/'+path; } 要将特定站点的路径字符串构建为绝对路径URL.可以使用ES5中数组的map方法来实现.如下 var paths=['wengxuesong/','wengxuesong/p/556048

U盘做了一个启动盘来安装Ubuntu,装好后,U盘不能进行格式化了,现在说一下网上找的方法

参考网址:http://wenwen.sogou.com/z/q289778573.htm 说是这种情况需要对U盘进行低级格式化,具体方法如下: 你可以尝试使用diskpart命令 ① 以管理员身份运行cmd ② 然后输入diskpart.exe ③ list disk   //可以显示所有的磁盘,包括U盘 ④ select disk X   //选择U盘作为当前选定的盘符,执行后在使用list disk命令可以看到U盘对应的盘符前面多了一个星,这里X代表在list disk中找到的u盘盘号,一

26 转义符 re模块 方法

主要内容 : 1 . 正则表达式中的转义和 python中的转义符 a: 正则表达式中的转义符 '\('  : 表示匹配小括号 [() + * $ . ?]   在字符组中一些特殊的字符会现出原形. 所有的\d \w \s(\n \ t)  都表示原本的意义 [-]只有写在字符组的首位的时候表示普通的减号,写在其他位置表示范围[1-9],如果想匹配减号[1\-9] b: python中的转义符 '\n' \ :表示转义符,赋予了n一个特别的意义  , 表示一个换行符 print('C:\next

Java基础(42):Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在祝方法调用,后者必须先实例化后用实例调用)

1 package lsg.ap.april4th2; 2 /* 3 知识点:1.Getter and Setter 的应用 4 2.局部变量与成员变量(也可叫做全局变量) 5 3.Static关键字的用法 6 a.成员变量被static修饰后的所有类的共享属性 7 b.方法被static修饰之后,在本类内调用的类名省略问题;以及不用Static,即使在本类内也必须先实例化 8 4.This关键字的用法 9 this:是当前类的对象引用.简单的记,它就代表当前类的一个对象. 10 11 注意:谁