Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как сделать вкладку детали неактивной (отключить) в Eclipse RCP?

Автор вопроса: xav9211Ответов: 3

У меня есть partStack с большим количеством частей во вкладках. Я хотел бы знать, как я могу сделать вкладки неактивными, когда они мне не нужны, и активными, когда они мне нужны.

Под неактивным я подразумеваю вкладку, которая видна, но я не могу щелкнуть по ней, и это похоже на отключение функции (например, текст на ней серый, а не черный).

Я использую e4 RCP (с Application.e4xmi).

Спасибо за помощь.

  • Это RCP e4 (с использованием Application.e4xmi) или RCP совместимости с 3.x? greg-449 07.12.2015
  • Я использую e4 RCP (обновлено в вопросе). xav9211 07.12.2015

javadesktop-applicationeclipse-rcpe4

Ответы

Ответ 1 · greg-449

Обработка выбора частей в стеке деталей осуществляется средством визуализации стека частей org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer, которое в основном использует CTabFolder.

Вы можете использовать фабрику средств визуализации, чтобы переопределить средство визуализации стека см. здесь

Вы можете расширить существующий класс StackRenderer и переопределить методы, чтобы изменить его поведение. В этом случае, вероятно, метод hookControllerLogic. Но вам придется внимательно изучить источник, чтобы увидеть, что нужно сделать.

Ответ 2 · Community

Вы можете попробовать использовать EPartService для управления частью, но я думаю, что активная/неактивная часть просто означает видимость или нет.

Или вы можете просто вручную отключить все элементы управления swt ????

Ответ 3 · Yogesh Bitake

Используйте фабрику Renderer для переопределения средства визуализации стека. Расширьте существующий класс StackRenderer и переопределите методы hookControllerLogic() или активировать() с пустой реализацией.

Пример-

public class MyE4Part extends ContributedPartRenderer {

/*
 * Don't activate the Part on part selection. part should not be gain the focus on any
 * selection on part .
 */

@Override
public void hookControllerLogic( MUIElement me )
{
    //Don't do anything.
    //super.hookControllerLogic( me );
}

}

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы