点击尚未选择的EditParts
(因此没有“直接编辑请求”)时,不会调用EditPart
方法performRequest(Request)
。
那是怎么回事?如果是,Request
类型REQ_SELECTION
表示什么?文档说它“表示选择请求”,我认为这将是上述情况。
答案 0 :(得分:1)
在两个地方调用performRequest()
方法:当用户双击元素时,以及用户点击后,EditPart
已被选中。在第一种情况下,使用REQ_OPEN
请求调用该方法,在第二种情况下,使用REQ_DIRECT_EDIT
请求调用该方法。
其他请求(如REQ_SELECTION
)未传递给EditPart
。它们用于查找可以处理请求的匹配EditPolicy
,然后传递给此EditPolicy
。为什么不是这两个请求的情况是我从未理解过的,但这就是事情的运作方式。
答案 1 :(得分:0)
通过调用EditPart #setSelected(...)选择EditPart。从SelectionManager调用此方法,但选择内容的最佳方法是调用EditPartViewer#appendSelection(EditPart)。
我的经验中的EditPart#performRequest()调用以编程方式自动创建的请求以响应其他请求。 #perfromRequest(请求)的实现留给api客户端。鉴于editpart上有#setSelected(...)可用,不确定为什么会调用#performRequest(Request)。大多数请求被传递给editpart以创建执行命令EditPart#getCommand(Request)
如果您有特别喜欢的选择,请查看以下内容: SelectionTool和TargetingTool #handleButtonDown()和#handleButtonDown()方法。该工具在鼠标下更新editpart,并根据鼠标下的editpart设置工具的拖动跟踪器。因此,请参阅SelectEditPartTracker。
希望这有帮助。