停止部件不可拆卸

Stop Parts from being detachable

我想阻止 Parts 在 Eclipse RCP 4 中可分离。

目前,如果我右键单击 Part,我可以 select 分离。由此我可以关闭选项卡,即使 Part 不是 Closeable。在 RCP 3 中,当分离的 View 关闭时,它会 return 回到原来的位置,但现在它完全关闭了。

结构

部件配置

如何删除分离 Part 的选项?

另外,如何阻止分离的 Part 被关闭或使其 return 回到原来的位置?

检查错误:Eclipse Bug

我认为您必须等待 NoDetach 的修复程序可用

暂时可以使用NoMove标签来阻止dnd

Documentation

可以用 NoMove 标记注释一个部分,以指示拖放系统不应允许用户移动该部分。 (由 IPresentationEngine.NO_MOVE 定义)

为了阻止部件可拆卸,我使用了自定义堆栈渲染器并覆盖了填充选项卡菜单的方法。

import java.util.Arrays;
import java.util.Optional;

import javax.annotation.PostConstruct;
import javax.inject.Inject;

import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.ui.internal.workbench.renderers.swt.SWTRenderersMessages;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;

public class UndetachableStackRenderer extends StackRenderer
{
    @Inject 
    private IEclipseContext context;

    @PostConstruct
    public void init() 
    {
        super.init(context);
    }

    @Override 
    protected void populateTabMenu(final Menu menu, final MPart part)
    {
        super.populateTabMenu(menu, part);

        final MenuItem[] menuItems = menu.getItems();

        final Optional<MenuItem> detachMenuItem = Arrays.stream(menuItems).filter(item -> item.getText().equals(SWTRenderersMessages.menuDetach)).findFirst();

        if(detachMenuItem.isPresent())
        {
            detachMenuItem.get().dispose();
        }
    }
}

然后我在部件堆栈中添加了一个 Persisted State,我不想显示 Detach 选项。

如果有人在设置自定义堆栈渲染器时遇到问题,那么我的问题 可能会有所帮助。