本文共 1794 字,大约阅读时间需要 5 分钟。
近一段事件在研究eclipse,记录点滴,防止忘记
1.带调色板的GEF编辑器的拖拽
在调色板的ViewerProvider中定义拖拽源
viewer.addDragSourceListener(new TemplateTransferDragSourceListener(viewer));
在编辑器中定义目的地监听
_viewer.addDropTargetListener(new LocalSelectionDropTargetListener(_viewer));
_viewer.addDropTargetListener(new PDTemplateTransferDropTargetListener(_viewer)); _viewer.addDropTargetListener(new ResouceDropTargetListener(_viewer));主要注意的是定义的源是PDTemplateTransferDropTargetListener类型的监听,他会自动判断是否是匹配的类型,所以其他的监听是不会执行的,他会自动区分类型,不是依靠的isEnable进行判断的。
2.拖拽到容器内的处理过程
在定义Editor的时候会根据textEditor的model取得DocumentEditPart,然后会设置EditPart的值(通过工厂取得)
在拖拽的过程中,取得EditPart,然后根据取得其对应的策略,通过策略取得对应的Command,然后执行Command
执行完成以后会调用postPostExecute更新执行结果
3.HTMLEditor(wtp中得控件),在初始化GraphicEditor的时候一定要先初始化TextEditor,他需要TextEditor的model设定GraphicEditor属性
4.调色板上拖拽图标的内容
主要采用扩展机制,如果定义了扩展的机制,就采用扩展机制的,如果没有定义,采用默认的。
5.所有拖拽的小图标都是TagToolPaletteEntry的对象
6.EditPart中得setContents,他是用来设置Viewer的内容,他包含二个方法,一个是
public void setContents(EditPart editpart) {
getRootEditPart().setContents(editpart); }
另外一个是
public void setContents(Object contents) {
Assert.isTrue(getEditPartFactory() != null, "An EditPartFactory is required to call setContents(Object)");//$NON-NLS-1$ setContents(getEditPartFactory().createEditPart(null, contents)); }
6.GEF退拽生成对象的原理
视图添加拖拽addDropTargetListener,添加的监听是个TemplateTransferDropTargetListener的子类,其中TemplateTransferDropTargetListener包含了一个方法getFactory是制定对象生成的工厂类。
实际拖拽过来如何判断需要那个工厂类,需要看TemplateTransferDropTargetListener中使用getFactory的方法
protected Request createTargetRequest() {
// Look at the data on templatetransfer. // Create factory CreateRequest request = new CreateRequest(); request.setFactory(getFactory(TemplateTransfer.getInstance() .getTemplate())); return request; }也就是说在生成的request中已经 包含了使用工厂类的类别,就可以根据拖拽对象的不同生成对应的对象。
7.排序的常量是PositionConstants
转载地址:http://lnmhj.baihongyu.com/