Контекстные меню Eclipse e4

Я пытаюсь создать приложение RCP с Eclipse 4.2.

Первая проблема; У меня есть TreeViewer. Когда элемент выбран в средстве просмотра дерева, мне нужно отобразить один из двух сложенных MParts. Как активировать деталь в стеке деталей в e4?

Второй; У меня есть контекстное меню, связанное с одной из моих частей. Мне нужно, чтобы меню появлялось только при щелчке правой кнопкой мыши по определенным композитам. У меня есть обработчик мыши, который добавляет объект со всеми данными, которые мне нужны, в текущий контекст (IEclipseContext), но я не знаю, как получить к нему доступ из CoreExpression (что кажется единственным реальным способом управления видимость меню). Объект удаляется из контекста при наведении мыши. Скажем, мой класс RightClickData. Как написать базовое выражение для проверки существования экземпляра RightClickData в текущем контексте?

Изменить, часть моего Application.e4xmi:

        <children xsi:type="basic:InputPart" xmi:id="_6nSEEJuhEeGpoZf9DvK6pQ" elementId="com.example.MyEditor" contributionURI="bundleclass://MyPlugin/com.example.MyEditor" label="The Editor" tooltip="My Editor">
          <menus xsi:type="menu:PopupMenu" xmi:id="_UdHPEJ4SEeGi0uxvOaa4gw" elementId="MyPlugin.rsmenu" label="Asdf" tooltip="asdf">
            <children xsi:type="menu:HandledMenuItem" xmi:id="_jwOz0J4SEeGi0uxvOaa4gw" label="Add Column" command="_fhTxwJ4REeGi0uxvOaa4gw"/>
            <children xsi:type="menu:HandledMenuItem" xmi:id="_trlpsJ4SEeGi0uxvOaa4gw" label="Delete Column" command="_iAIkoJ4REeGi0uxvOaa4gw"/>
            <children xsi:type="menu:MenuSeparator" xmi:id="_v8f8YJ4SEeGi0uxvOaa4gw"/>
            <children xsi:type="menu:HandledMenuItem" xmi:id="_wR7Z0J4SEeGi0uxvOaa4gw" label="Add Row" command="_bXrp8J4REeGi0uxvOaa4gw"/>
            <children xsi:type="menu:HandledMenuItem" xmi:id="_yf5GMJ4SEeGi0uxvOaa4gw" label="Delete Row" command="_l58HwJ4REeGi0uxvOaa4gw"/>
          </menus>
        </children>

person Ethan Reesor    schedule 16.05.2012    source источник
comment
Это должно быть помечено e4, eclipse-juno, eclipse-e4, eclipse-4.2 или чем-то в этом роде.   -  person Ethan Reesor    schedule 17.05.2012
comment
Что касается второго вопроса, вы создали MPopupMenu для своего MPart и связали его с вашим контекстным меню с помощью EMenuService?   -  person Paul Webster    schedule 01.06.2012
comment
Я установил всплывающее меню в качестве дочернего элемента моей части в Application.e4xmi. Затем я использую EMenuService.registerContextMenu(...) для подключения.   -  person Ethan Reesor    schedule 04.06.2012


Ответы (2)


Для вашего первого вопроса вы можете использовать org.eclipse.e4.ui.workbench.modeling.EPartService.activate(MPart), чтобы активировать нужную часть.

person Paul Webster    schedule 01.06.2012
comment
Вот что я сделал: ps.showPart(ps.findPart("my.part.id"), PartState.VISIBLE);. В перечислении PartState также есть ACTIVATE и CREATE. Переменная ps является экземпляром EPartService, извлеченным из текущего контекста. Мне также пришлось установить идентификатор детали (для findPart(String id)) в Application.e4xmi. - person Ethan Reesor; 04.06.2012

Я делаю видимыми свои части следующим образом:

MPart part = partService.findPart("my.part.id");
if( part != null ){
    if( part.isVisible() == false )
        part.setVisible(true);
    partService.showPart( part, PartState.VISIBLE);
}
person The_Cute_Hedgehog    schedule 09.01.2014