一、改变Layer
GEF中会根据editpart的类型,把它们放在某个类型的Layer上,例如Scalable Layer, Handle Layer, FeedBack Layer.
根据设置的RootEditPart的类型,得到的Layer的类型和层次也是不同的。例如:
对于ScalableFreeformRootEditPart:
layeredPane.add(getScaledLayers(), SCALABLE_LAYERS);
layeredPane.add(new FreeformLayer(), HANDLE_LAYER);
layeredPane.add(new FeedbackLayer(), FEEDBACK_LAYER);
layeredPane.add(new GuideLayer(), GUIDE_LAYER);
对于ScalableRootEditPart:
layeredPane.add(getScaledLayers(), SCALABLE_LAYERS);
layeredPane.add(new Layer() {
public Dimension getPreferredSize(int wHint, int hHint) {
return new Dimension();
}
}, HANDLE_LAYER);
layeredPane.add(new FeedbackLayer(), FEEDBACK_LAYER);
layeredPane.add(new GuideLayer(), GUIDE_LAYER);
等等。
在GEF中,这些不同的layer处在不同的层级上。例如最上层是Feedback Layer,接下来是Handle Layer, 再下次是
Printable Layer。只有Primary 和Connection是可打印的。
可以通过重写这些RootEditPart的这些与layers相关的方法就可以达到修改layer的层次和可打印的layer。
二、改变Tool执行完后的行为
我们使用一个CreateTool创建一个模型后,有些应用是会保持这个Tool的选择不变,有的应用会重新把SelectionTool设成选择项。
这个可以通过增加一个PaletteListener来修改,如下:
@Override
protected void initializePaletteViewer() {
super.initializePaletteViewer();
getPaletteViewer().addPaletteListener(this);
}
@Override
public void dispose() {
getPaletteViewer().removePaletteListener(this);
super.dispose();
}
public void activeToolChanged(PaletteViewer palette, ToolEntry tool) {
Tool activeTool = getEditDomain().getActiveTool();
if(activeTool instanceof CreationTool){
((CreationTool)activeTool).setUnloadWhenFinished(false);
}
}
其中Editor实现了PaletteListener接口。