GEF:编辑部分被选中时是否调用了EditPart.performRequest(Request)?

时间:2014-10-13 19:57:49

标签: java eclipse-plugin eclipse-gef

点击尚未选择的EditParts(因此没有“直接编辑请求”)时,不会调用EditPart方法performRequest(Request)

那是怎么回事?如果是,Request类型REQ_SELECTION表示什么?文档说它“表示选择请求”,我认为这将是上述情况。

2 个答案:

答案 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。

希望这有帮助。