Запретите части быть съемными - PullRequest
0 голосов
/ 08 ноября 2018

Я бы хотел помешать отключению Parts в Eclipse RCP 4.

В настоящее время, если я щелкну правой кнопкой мыши на Part, я могу выбрать отсоединить. После этого я могу закрыть вкладку, даже если Part не Closeable. В RCP 3, когда отключенный View закрывается, он затем возвращается в исходное положение, но теперь он полностью закрывается.

Структура

enter image description here

Конфигурация детали

enter image description here

Как убрать опцию отсоединения Part?

Также, как я могу предотвратить закрытие отключенного Part или вернуть его в исходное местоположение?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Чтобы предотвратить отсоединение деталей, я использовал собственный рендеринг стека и переопределил метод, чтобы заполнить меню вкладок.

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.

Если у кого-то возникнут проблемы с настройкой пользовательского стека, тогда мой вопрос здесь может помочь.

0 голосов
/ 23 ноября 2018

Проверка ошибки: Ошибка Eclipse

Я думаю, вам нужно дождаться исправления для NoDetach, пока оно не станет доступно

На данный момент вы можете использовать тег NoMove, который может остановить dnd

Документация

Часть может быть помечена тегом NoMove, чтобы указать, что система перетаскивания не должна позволять пользователю перемещать эту часть. (Определено IPresentationEngine.NO_MOVE)

imageImage">

...