停止零件可拆卸

问题描述 投票:0回答:2

我想阻止Parts在Eclipse RCP 4中可拆卸。

目前,如果我右键单击Part,我可以选择分离。从此我可以关闭标签,即使Part不是Closeable。在RCP 3中,当分离的View关闭时,它将返回其原始位置,但现在它完全关闭。

结构体

enter image description here

部分配置

enter image description here

如何删除分离Part的选项?

另外,我如何阻止一个独立的Part关闭或让它返回原来的位置?

java eclipse-rcp rcp
2个回答
2
投票

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

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选项。

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


1
投票

查看错误:Eclipse Bug

我认为你必须等待NoDetach的修复,直到它可用

暂时你可以使用可以停止dnd的NoMove标签

Documentation

部件可以使用NoMove标签进行注释,以指示拖放系统不应允许用户移动此部件。 (由IPresentationEngine.NO_MOVE定义)

<code>Image</code>

© www.soinside.com 2019 - 2024. All rights reserved.