E4 RCP 如何设置包含单选按钮的 ToolBarItem 的选择
E4 RCP How to set selection of ToolBarItem that contains Radio Buttons
在 Eclipse E4 (Luna) 中,使用应用程序模型创建部件、处理程序、命令、处理的菜单项等(这些不是以编程方式创建的)。我有一个工具栏。这包含一个名为 "Filter" 的子菜单项,其中包含另一个包含两个过滤器的子菜单。这两个过滤器是两个已处理的菜单项,它们被设置为 "Radio" 按钮。
当我从 selection select 我的 运行 应用程序的 UI 中选择合适的按钮时,单选按钮切换到 selected 项目。但是,我希望这个 selection 在我的 ViewPart 通过其他 UI select离子。目前我的 ViewPart 更新了,但是单选按钮通过 UI.
在同一个 selection 上
有没有一种方法可以让我在更新查看器时访问两个已处理菜单项的 ID 并设置 selection(一个为 false,另一个为 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)
方法来更改选择。
要查找部件菜单中的菜单项,请使用:
modelService.findElements(app, "menu item id", MMenuItem.class, Collections.emptyList(), EModelService.IN_PART);
(IN_PART 参数而不是 IN_MAIN_MENU).
您还可以将 MPart 而不是应用程序指定为 findElements
的第一个参数,这可能会加快搜索速度。
对于作为工具栏项子项的菜单,模型服务似乎无法直接找到它们。不过你可以找到Tool Bar Item,自己看看菜单:
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
我解决了这个问题,方法是从 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);
在 Eclipse E4 (Luna) 中,使用应用程序模型创建部件、处理程序、命令、处理的菜单项等(这些不是以编程方式创建的)。我有一个工具栏。这包含一个名为 "Filter" 的子菜单项,其中包含另一个包含两个过滤器的子菜单。这两个过滤器是两个已处理的菜单项,它们被设置为 "Radio" 按钮。
当我从 selection select 我的 运行 应用程序的 UI 中选择合适的按钮时,单选按钮切换到 selected 项目。但是,我希望这个 selection 在我的 ViewPart 通过其他 UI select离子。目前我的 ViewPart 更新了,但是单选按钮通过 UI.
在同一个 selection 上有没有一种方法可以让我在更新查看器时访问两个已处理菜单项的 ID 并设置 selection(一个为 false,另一个为 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)
方法来更改选择。
要查找部件菜单中的菜单项,请使用:
modelService.findElements(app, "menu item id", MMenuItem.class, Collections.emptyList(), EModelService.IN_PART);
(IN_PART 参数而不是 IN_MAIN_MENU).
您还可以将 MPart 而不是应用程序指定为 findElements
的第一个参数,这可能会加快搜索速度。
对于作为工具栏项子项的菜单,模型服务似乎无法直接找到它们。不过你可以找到Tool Bar Item,自己看看菜单:
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
我解决了这个问题,方法是从 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);