刚刚做完GEF的HelloWorld,写一些东西,怕以后自己忘了。
给palette添加拖拽功能:
添加拖拽功能其实就是给view添加一个Listener。.
一、继承GraphicalEditorWithPalette的实现方法:
a、在initializeGraphicalViewer()中,给view添加Listener。
b、
createTransferDropTargetListener()方法实现
c、重写initializePaletteViewer()方法
d、在getPaletteRoot()方法中修改创建图形的Entry
注意:从CreationToolEntry改为
CombinedTemplateCreationEntry时,构造函数需要多传一个HelloModel.class的参数。少传了这个参数编译不会报错,但是拖拽到死也不会有图形创建出来。(本人就因为这点没仔细看,耽误了半天时间。不过最后弄出来的时候还是有恍然大悟的感觉。)
二、如果继承了GraphicalEditorWithFlyoutPalette,实现方法就简单一点了:
a -> b - > d
总结:感觉实现Creation的时候有两种,一种是在palette中点选后,点击创建,这时候需要的CreationFactory是在Entry中直接定义的CreationFactoy;而拖拽的话,则是需要在Listner中定义。GEF已经给我们准备好了一个默认的实现类SimpleFactory,大家用就行了。
给palette添加拖拽功能:
添加拖拽功能其实就是给view添加一个Listener。.
一、继承GraphicalEditorWithPalette的实现方法:
a、在initializeGraphicalViewer()中,给view添加Listener。
- protected void initializeGraphicalViewer() {
- ...
- getGraphicalViewer().addDropTargetListener(createTransferDropTargetListener());
- }
- /**
- * Create a transfer drop target listener. When using a CombinedTemplateCreationEntry
- * tool in the palette, this will enable model element creation by dragging from the palette.
- * @see #createPaletteViewerProvider()
- */
- private TransferDropTargetListener createTransferDropTargetListener() {
- return new TemplateTransferDropTargetListener(getGraphicalViewer()) {
- protected CreationFactory getFactory(Object template) {
- return new SimpleFactory((Class) template);
- }
- };
- }
- protected void initializePaletteViewer() {
- super.initializePaletteViewer();
- getPaletteViewer().addDragSourceListener(
- new TemplateTransferDragSourceListener(getPaletteViewer()));
- }
- protected PaletteRoot getPaletteRoot() {
- ...
- CombinedTemplateCreationEntry creationEntry =
- new CombinedTemplateCreationEntry(
- "Draw HelloModel",
- "Create HelloModel",
- HelloModel.class,
- new SimpleFactory(HelloModel.class),
- descriptor,
- descriptor);
- drawer.add(creationEntry);
- ...
- }
二、如果继承了GraphicalEditorWithFlyoutPalette,实现方法就简单一点了:
a -> b - > d
总结:感觉实现Creation的时候有两种,一种是在palette中点选后,点击创建,这时候需要的CreationFactory是在Entry中直接定义的CreationFactoy;而拖拽的话,则是需要在Listner中定义。GEF已经给我们准备好了一个默认的实现类SimpleFactory,大家用就行了。