protected void configureGraphicalViewer();
这个函数告诉eclipse如何配置编辑器的主界面,在这个函数里我们应该编写创建主界面的代码,并设置EditPart的工厂,关于EditPart的概念,稍后详述,而EditPart的工厂类,主要作用是根据模型创建EditPart,这其中牵扯到GEF的框架以及各个部分的创建顺序(先创建模型,再创建EditPart、最后创建Figure,这些概念都在后面叙述)。
protected PaletteRoot getPaletteRoot();
这个接口用来创建调色板。调色板的结构实际就是一个颗树,这里用来获得树根。
protected void initializeGraphicalViewer();
这个接口用于为编辑器创建context,实际就是编辑器的模型部分。然后eclipse会根据这个模型创建编辑器的EditPart,创建的原则由EditPart的工厂给出。这些概念都在以后说明。
public void doSave(IProgressMonitor monitor);
public void doSaveAs();
这两个接口都是顾名思义,不做过多解释。只是这个参数的作用还没有搞明白。
public boolean isDirty();
这个函数用于返回命令栈是不是“脏的”(虽然我不太喜欢这么翻译)。
public Object getAdapter(Class type);
这个函数用于获得指定类型的适配器类,一般重载这个函数创建自己的Outline Page。这个函数可以用来创建很多其它的东西,比如Property Sheet,你可以参考其父类的实现。
protected void initializePaletteViewer();
这个函数用来初始化Palette,如果你需要给Palette增加什么新的功能,可以重载这个函数,一般情况下使用默认的就可以了。
M-V-C三个部分的交互式这样完成的:当用户直接对V进行了操作,比如改变V的形状或者修改了Label中的文字,系统就会产生一个Request,并将这个Request传递给相应的EditPart进行处理;EditPart根据Request的类型生成相应的Command(Command需要用户编写),并将Command在传递出去;系统得到Command后,就会在合适的时机执行这个Command。如果M发生了变化,并且需要更新视图,它可以使用一个PropertyChangeSupport实例,提示EditPart对V进行改变。PropertyChangeSupport实际上是M与EditPart的一个桥梁,只要在EditPart中实现PropertyChangeListener接口,就可以向M的PropertyChangeSupport实例注册自己为监听者。
消息响应与MVC同步
当系统向EditPart发送Request的时候,EditPart调用getCommand函数,getCommand函数如果可以处理这个请求,它就会生成对应的Command,否则返回null。getCommand函数首先尝试直接处理,如果不能处理再查看自己的有没有哪个EditPolicy能够处理这个请求(所以我们重载getCommand函数的时候,一定不要忘了调用父类的getCommand函数。如果这个EditPart不能处理这个请求,在有些情况下(比如类型REQ_RESIZE请求,但不知道是不是所有的请求都会这样),系统会调用其父类的发送一个新的请求,令它处理。如果无论如何EditPart都无法处理这个请求,那么系统就会禁止请求所代表的功能
并不是所有的Request都交给getCommand函数处理,有些Request也分派给performRequest函数处理。performRequest函数用于处理一些特殊的请求,比如在位编辑请求。你可以查看RequestConstance中对于请求类型的定义,里面说明了请求的处理位置。
举个例子来说,如果你移动了一个Figure,系统就会发送一个类型为REQ_MOVE的ChangeBoundsRequest请求给这个Figure对应的EditPart。你可以在这里处理该请求,否则系统会向这个Figure的父亲发送一个类型为REQ_MOVE_CHILDREN的ChangeBoundsRequest请求。如果你没有编写创建移动对象的Command,那么eclipse就会将光标设置为不许移动的光标。