RCP e4 以编程方式在 Part 中创建带有 HandledToolItem 的工具栏

RCP e4 programmatically create Toolbar with HandledToolItem in Part

我的 MToolbar 中的 HandledToolItem 有问题。 按下按钮时,应用程序应创建一个带有工具栏和一个 HandledToolItem 的新部件。问题是 HandledToolItem 总是灰色的,我还不知道为什么。

final MPart mPart = modelService.createModelElement(MPart.class);
mPart.setLabel("Test");
mPart.setElementId("newid");
mPart.setContributionURI("bundleclass://something");
mPart.setCloseable(true);

// create Toolbar
final MToolBar mBar = modelService.createModelElement(MToolBar.class);
mPart.setToolbar(mBar);

// create HanledToolItem
final MHandledToolItem mItem = modelService.createModelElement(MHandledToolItem.class);
mBar.getChildren().add(mItem);

// create Handle and Command
final MHandler toolHandler = modelService.createModelElement(MHandler.class);
final MCommand toolCommand = modelService.createModelElement(MCommand.class);

toolCommand.setElementId("dsadsadsa");
toolHandler.setCommand(toolCommand);
toolHandler.setContributionURI("bundleclass://something");

mItem.setIconURI("platform:/plugin/RCPCAN/icons/icon_con_scroll_lock.png");
mItem.setTooltip("Lock Table Scrollbar");
mItem.setCommand(toolCommand);
mItem.setEnabled(true);

// show part
partService.showPart(mPart, PartState.ACTIVATE);

您必须将您创建的任何处理程序添加到应用程序或组件的处理程序列表中:

@Inject
MApplication app;

...

app.getHandlers().add(handler);

必须将类似的命令添加到 getCommands 列表中。

注意:在包含零件设计的 Application.e4xmi 中使用 'PartDescriptor' 会容易得多。然后你可以打电话

partService.showPart("part descriptor id", PartState.ACTIVATE);

无需在代码中创建任何内容。

如果您想创建一个零件的多个副本,请使用:

MPart newPart = partService.createPart("part descriptor id");

partService.showPart(newPart, PartState.ACTIVATE);