【问题标题】:Creating a "live" view in the background在后台创建“实时”视图
【发布时间】:2013-07-05 21:37:54
【问题描述】:

我想定义一个自包含的 Eclipse 视图,但只要启动 Workbench 应用程序,即使视图不可见,它也能够响应选择事件,只要它显示为文件夹中的“背景视图”。换句话说,我需要一个“钩子”,在创建视图的占位符时调用它。

问题在于,当 Workbench 应用程序启动时,后台视图通常不会被实例化。您当然可以实现IPerspectiveFactory 在Eclipse 中进行初始透视布局,但工厂仅在初始选择透视时使用;之后,在随后的启动中,Eclipse 会保留不涉及创建视图的纪念品。

有没有办法做到这一点?

【问题讨论】:

    标签: eclipse eclipse-rcp


    【解决方案1】:

    我认为将驱动视图的数据模型与视图 UI 分开是个好主意。这将允许不断更新数据模型并添加或删除视图,而无需维护任何类型的状态。

    您可以将数据模型添加为您的插件 Activator 中的 SelectionService 侦听器:

    private ISelectionListener listener;
    
    public void start(BundleContext context) throws Exception {
        super.start(context);
        listener = new ISelectionListener() {
    
            @Override
            public void selectionChanged(IWorkbenchPart part,
                    ISelection selection) {
                // Update model
            }
        };
        PlatformUI.getWorkbench().getActiveWorkbenchWindow()
                .getSelectionService()
                .addSelectionListener(listener);
    }
    
    public void stop(BundleContext context) throws Exception {
        PlatformUI.getWorkbench().getActiveWorkbenchWindow()
                .getSelectionService().removeSelectionListener(listener);
        super.stop(context);
    }
    

    创建视图后,它可以使用数据模型填充 UI 组件并侦听数据模型以获取任何实时更新。

    您需要确保在启动应用程序时激活您的插件。以下问题可以对此有所帮助。

    auto-start OSGi service

    编辑

    即使视图当前处于隐藏状态,以下代码也可用于激活您的视图(调用 createPartControl)。通过将此代码放在您的激活器中,它可以在您的插件激活后立即开始监听模型事件。

    PlatformUI.getWorkbench().addWindowListener(new IWindowListener() {
    
    ...
    
        @Override
        public void windowActivated(IWorkbenchWindow window) {
            IViewReference view = window.getActivePage().findViewReference(
                VIEW_ID);
            if (view != null) {
                view.getPart(true);
            }
        }
    });
    

    【讨论】:

    • 是的,已经有一个独立于视图的模型。我试图保持组件之间的分离,所以我不希望模型显式地将事件发送到视图(当然),只是通用事件。如果布局中存在它的占位符,我希望视图被公开并响应这些事件,但如果它不存在 - 即,如果用户在某个时候关闭了视图 - 我不这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    相关资源
    最近更新 更多