E4 RCP Как установить выбор ToolBarItem, который содержит кнопки радио

В Eclipse E4 (Luna), используя модель приложения для создания частей, обработчиков, команд, обработанных пунктов меню и т. Д. (Они не создаются программно). У меня есть панель инструментов. Он содержит пункт подменю "Фильтр", который содержит другое подменю из двух фильтров. Два фильтра - это два элемента меню Handled, которые настроены как кнопки "Радио".

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

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

Изображение дизайна прилагается ниже: Элемент панели инструментов, содержащий обработанные пункты меню

Иерархия модели приложения выглядит следующим образом: иерархия

Заранее спасибо,

Марв

2 ответа

Решение

Я решил эту проблему, начав с MPart PartID и детализировав до HandledMenuItems, для которого я хотел установить выбор радиокнопок, затем установив свойство выбора для каждого отдельного HandledMenuItem.

Вероятно, это может быть изменено, чтобы быть более кратким, но я оставляю код с каждым шагом, чтобы облегчить чтение решения.

Кстати, в каждом случае / комбинации методов EModelService список возвращал размер 0. Так что я не уверен, сработает ли это для того, чего я пытаюсь достичь. Следующее действительно работает, хотя я не уверен, что это самое эффективное средство.

Я надеюсь, что это помогает другим.

    // Get view part
    MPart viewPart = _partService.findPart("part_id");

    //  get list of all menu items from the Part
    List<MMenu> viewPartMenu = viewPart.getMenus();

    // Get list of ViewMenus from viewPartMenu there is only one View Menu so it will be index 0
    MMenu viewMenu = viewPartMenu .get(0);

    // Get list of MMenuElements from the viewMenu - the children in the view menu
    List<MMenuElement> viewMenuElements = viewMenu.getChildren();

    // This gets me to the 2 HandledMenuItems 
    // Upper Most HandledMenuItem Radio Button is at viewMenuElements index 0.  This is cast to MHandledMenuItem
    MHandledMenuItem upperHandledMenuItem = (MHandledMenuItem) viewMenuElements.get(0);

    // Set Selection 
    upperHandledMenuItem.setSelected(false);

    // Lower Most HandledMenuItem Radio Button is at viewMenuElements index 1.  This is cast to MHandledMenuItem
    MHandledMenuItem lowerHandledMenuItem = (MHandledMenuItem) viewMenuElements.get(1);

    // Set selection 
    lowerHandledMenuItem.setSelected(true);

Вы можете использовать модельный сервис для поиска пунктов меню. Используйте что-то вроде:

@Inject
EModelService modelService;

@Inject
MApplication app;


List<MMenuItem> items = modelService.findElements(app, "menu item id", MMenuItem.class, Collections.emptyList(), EModelService.IN_MAIN_MENU);

Когда у вас есть MMenuItem Вы можете позвонить setSelected(boolean) способ изменить выбор.

Чтобы найти пункт меню, который находится в меню Part, используйте:

modelService.findElements(app, "menu item id", MMenuItem.class, Collections.emptyList(), EModelService.IN_PART);

(Аргумент IN_PART вместо IN_MAIN_MENU).

Вы также можете указать MPart, а не приложение в качестве первого аргумента findElements что может ускорить поиск.

Для меню, являющегося дочерним элементом элемента панели инструментов, кажется, что сервисы моделей не могут найти их напрямую. Однако вы можете найти элемент панели инструментов и посмотреть меню самостоятельно:

List<MToolItem> items = modelService.findElements(app, "tool bar item id", MToolItem.class, Collections.emptyList(), EModelService.IN_PART);

MToolItem item = items.get(0);

MMenu menu = item.getMenu();

List<MMenuElement> children = menu.getChildren();

... search menu elements
Другие вопросы по тегам