【问题标题】:RCP e4 programmatically create Toolbar with HandledToolItem in PartRCP e4 以编程方式在 Part 中使用 HandledToolItem 创建工具栏
【发布时间】:2019-01-16 19:12:39
【问题描述】:

我在 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);

【问题讨论】:

  • 您是否有理由不使用“PartDescriptor”来让您在 Application.e4xmi 中设计所有这些?

标签: rcp e4


【解决方案1】:

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

@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);

【讨论】:

  • 如果我想在每次单击按钮时创建一个新零件怎么办?我怎么能接受描述。我看到它的方式我将不得不以编程方式创建一个新的部分。如何在工作台中使用我的描述来做到这一点?
  • 使用EPartService.createPart从一个描述符创建几个部分。为答案添加了详细信息。
  • 好吧,我试着按照你说的做,但是我用 partService.createPart("part descriptor id") 创建的部分总是空的,即使 id 肯定是正确的,虽然这会很多比我的方法更容易
  • 对我来说很好。您确定零件描述符 id 正确吗 - 这必须是“零件描述符”列表中 Application.e4xmi 中的“零件描述符”对象(不是“窗口和对话框”中的“零件”)?
  • 天哪,非常感谢。我以为您指的是 Application.e4xmi 中的常用部件。甚至不知道还有其他东西存在:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
相关资源
最近更新 更多