重复上篇,我们有以下类:
1、模型相关:RouteMap、Homuncule,其中RouteMap含有一个或多个Homuncule
2、Policy相关:HomunculeLayoutPolicy;安装在RouteMapEditPart上用于移动Homuncule或重置它
的大小
3、EditPart相关:对应于RouteMap的RouteMapEditPart;对应于Homuncule的
HomunculeEditPart.
一个完整的feedback的方法调用请求如下:
showLayoutTargetFeedback(Request request)[HomunculeLayoutPolicy]-->showSourceFeedback(Request request)[HomunculeEditPart]-->showSourceFeedback(Request)[ResizableEditPolicy]-->createDragSourceFeedbackFigure()[ResizableEditPolicy]
查找引用关系,可以知道:ResizableEditPolicy对象只在以下处被调用:
createChildEditPolicy(EditPart child)[ConstrainedLayoutEditPolicy]
protected EditPolicy createChildEditPolicy(EditPart child) {
return new ResizableEditPolicy();
}
其中ConstrainedLayoutEditPolicy类的层级关系如下图:
所以我们知道,只要重写HomunculeLayoutPolicy的createChildEditPolicy(EditPart child)方法,返回一个ResizableEditPolicy的子类,并重写它的createDragSourceFeedbackFigure()方法即可!