【问题标题】:Eclipse Rcp - Is there a recommended way to get the parent view or editor that calls an event in the handler?Eclipse Rcp - 是否有推荐的方法来获取在处理程序中调用事件的父视图或编辑器?
【发布时间】:2019-08-26 19:58:27
【问题描述】:

我正在为可以从不同视图调用的事件扩展 AbstractHandler。处理程序查找调用事件的视图或编辑器的推荐方法是什么?

HandlerUtil.getActivePart(event) 未返回引发事件的视图,因为活动视图在事件到达处理程序之前已更改。 (这是因为我们在非 UI 线程中有代码,它会定期收集信息并更新不同的视图,从而使不同的视图变为活动状态。)

此代码似乎有效,但是否推荐使用?由于它实际上不在 api 中,因此该密钥或实现会发生变化吗?

public class MyHandler extends AbstractHandler
{
    public Object execute(ExecutionEvent event) throws ExecutionException
    {
        org.eclipse.core.expressions.IEvaluationContext context = (org.eclipse.core.expressions.IEvaluationContext) event.getApplicationContext();
        String myParentContext = context.getVariable("parentContext").toString();

这返回了

PartImpl (correct.view.id) Context

一个想法可能是为处理程序使用命名约定,这样它们就不会在不同的视图中重复使用。但是,这不包括视图具有辅助 ID 的情况。我们需要知道辅助 id 才能找到视图并在对其执行操作后刷新对象。

【问题讨论】:

  • 是的,该字符串很容易更改,因为它不是 API 的一部分。无论如何,“父母”观点是什么意思?当没有视图处于活动状态时,主菜单或键绑定调用的处理程序是什么。
  • “父级”是指当用户选择它的菜单项或弹出事件时的活动视图。到处理程序被调用时,活动部分已经改变。
  • 一切都使用 HandlerUtil.getActiveXXX 代码,不知道还有没有别的。您的后台线程不应更改活动部分。

标签: event-handling eclipse-rcp


【解决方案1】:

格雷格回答了上面评论中的问题。

用例是:

  • 用户对 View1 中的选择执行操作
  • 这是一个长时间运行的作业,因此处理程序会启动一个作业来更新 View2 中该作业的状态
  • 作业更新 View2 经常使用以下方法来访问视图
    showView("View2",null,IWorkbenchPage.VIEW_VISIBLE)  
  • 问题:用户对 View1 中的新选择执行另一个操作,但处理程序的 getActivePart(event) 返回 View2 而不是 View1

格雷格回答了这个问题:

您的后台线程不应更改活动部分

解决方案

  • View1 的处理程序现在执行以下操作
    IWorkBenchPart part = HandlerUtil.getActivePart(event)    
    // saved to refresh View1's selection when long running Job is done
    showView("View2",null,IWorkbenchPage.VIEW_VISIBLE)   
    //so user doesn't have to manually show view themselves. It does change the active view to View2  

                                                  

  • 计划的作业现在执行以下操作
    findView("View2")    
  • 在后台访问视图以进行状态更新
  • 当用户在 View1 上执行另一个操作时,处理程序的 getActiveParent(event) 会返回 View1,因为该操作将 View1 标记为活动
  • findView 不会破坏后台作业的活动视图,所以现在一切正常。谢谢格雷格

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 2014-01-05
    • 2022-06-18
    • 2011-08-16
    相关资源
    最近更新 更多