`

eclipse学习点滴

 
阅读更多

近一段事件在研究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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics