2007-12-03

GEF原理及实现系列(六、命令)

关键字: Commands
为了提高代码的重用性,以及实现GEF编辑器的功能,GEF采用命令模式提供了对模型的操作方式。
1.命令(Commands)的功能
    在EditPolicies中新建了命令,如果返回的命令不为空,GEF框架会执行命令,对模型进行相应的修改。
    Command是GEF中的一个抽象类,主要实现了如下的几个方法:
        (1)execute:这是命令的执行方法,当请求结束并获得Command后,GEF框架会负责执行此方法。
        (2)undo:对模型修改后,可以通过undo进行撤销。
        (3)redo:当用户撤销后,能通过redo重复上一次的操作。
2.命令的实现
    GEF通过一个命令堆栈(CommandStack)保存Command对象。用户可以通过命令堆栈撤销或重复对模型所做的操作。下面代码是模型位置改变的命令:
 
java 代码
 
  1. package com.example.commands;  
  2.   
  3. import org.eclipse.draw2d.geometry.Point;  
  4. import org.eclipse.gef.commands.Command;  
  5.   
  6. import com.example.model.Node;  
  7.   
  8. public class MoveNodeCommand extends Command {  
  9.     //命令对应的模型  
  10.     private Node node;  
  11.     //原始位置  
  12.     private Point oldPos;  
  13.     //新位置  
  14.     private Point newPos;  
  15.     //设置新位置  
  16.     public void setLocation(Point p) {  
  17.         this.newPos = p;  
  18.     }  
  19.     //设置命令对应的模型  
  20.     public void setNode(Node node) {  
  21.         this.node = node;  
  22.     }  
  23.     //执行命令  
  24.     public void execute() {  
  25.         //保存模型原来的位置  
  26.         oldPos = this.node.getLocation();  
  27.         node.setLocation(newPos);  
  28.     }  
  29.   
  30.     public String getLabel() {  
  31.         return "Move Node";  
  32.     }  
  33.     //重复上一操作  
  34.     public void redo() {  
  35.         this.node.setLocation(newPos);  
  36.     }  
  37.     //撤销设置新位置的操作  
  38.     public void undo() {  
  39.         this.node.setLocation(oldPos);  
  40.     }  
  41. }  

    通过命令堆栈(CommandStack),GEF编辑器能轻松完成用户的撤销和重做操作,GEF框架会维护命令堆栈。
评论
发表评论

您还没有登录,请登录后发表评论