天天看点

使用XYLayout布局的图形操作

内容提要:

(1)使用 XYLayout 布局

(2)Edit 操作图形,譬如通过句柄改变图形尺寸,移动图形

(3)创建和安装 editing policy,用于改变图形尺寸,移动图形

(4)创建和执行命令 Command,用于改变图形尺寸,移动图形

(5)Undo 和 Redo 的操作

  1. 创建editing policy,在ContentsEditPart 中安装editing policy,此时图形拥有了句柄
  2. 修改图形产生的请求与约束相关,所以创建一个改变约束的类 ChangeConstaintCommand
  3. editing policy中的getCommand方法得到请求,执行createChangeConstraintCommand 方法。所以我们的 ChangeConstaintCommand 要放在这个方法中执行。
  4. 此时模型改变了,但视图没有改变,这时需要Linstener通知EditPart

监听器

  1. 创建一个超类AbstractModel ,在其中设置监听器
  2. 让其他的模型对象继承这个类,在 setConstraint中调用firePropertyChange
  3. 创建一个超类监听器的控制器,让其他模型对象的控制器继承他。
  4. 模型对象的控制器中添一行判断是否匹配的是对应的模型

Undo 和 Redo

  1. 修改之前的Command类(ChangeConstraintCommand),新建属性:oldConstraint,代表保存的旧的约束。 重写Undo方法:在Undo方法里对Model设置constraint为OldConstraint,实现模型的undo操作。

    在setModel方法里,设置oldConstraint=模型初始化约束。

    这样,当在policy里给命令设置Model的时候,会保存下来模型的旧的约束。当undo时,该Command从命令堆栈中弹出,执行该命令的 undo方法,实现模型的修改。undo里调用了model的setConstraint方法修改约束。修改完后会自动通知EditPart修改视图显 示。

  2. 配置Action

    新建DiagramActionBarContributor类,实现对DiagramActionBar的Contributor。

    在该类的buildAction方法里新建两个Retargetaction(Undo和Redo)

    在contributeToToolBar方法里给工具栏添加两个按钮(Undo按钮和Redo按钮)

  3. 在plugin.xml文件里配置Editor的contributorClass为新建的DiagramActionBarContributor类。
  4. 在ApplicationWorkbenchWindowAdvisor类里的preWindowOpen方法里设置显示coolbar。(不要忘记最后这一步)