java - 阻止零件可拆卸

标签 java eclipse-rcp rcp

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

目前,如果我右键单击零件,我可以选择分离。由此,即使 Part 不是 Closeable,我也可以关闭该选项卡。在 RCP 3 中,当关闭分离的 View 时,它会返回到其原始位置,但现在它完全关闭。

结构

enter image description here

零件配置

enter image description here

如何删除分离部件的选项?

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

最佳答案

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

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();
        }
    }
}

然后,我将一个持久状态添加到零件堆栈中,但我不想显示分离选项。

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

关于java - 阻止零件可拆卸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53205912/

相关文章:

java - 在共享目录中启动 Eclipse 产品

java - eclipse RCP : how to export launch configuration plugins?

java - Eclipse Memory Analyzer - Leak Suspects Report 没有指向我的类 - 为什么?

java - Maven下载特定版本,如何强制下载其他版本?

java - 无法从我的应用程序连接到 IMS apn

c - 如何在 RCP 应用程序中添加 C 编辑器

Eclipse RCP 菜单和新的 Natty Unity

java - 使用 javax 在 RCP Java 应用程序中发送带有附件的电子邮件

java - Android:无法检索日期

java - 为什么在 Java 和 C++ 中不允许隐藏虚函数/方法?