2015-11-06 27 views
0

处用HandledToolItem创建工具栏。 按下按钮时,应用程序应该创建一个带有工具栏和一个HandledToolItem的新零件。问题是HandledToolItem总是呈灰色,我不知道为什么。也许你们有一个想法。RCP e4在我的MToolbar中遇到了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); 
+0

是否有一个原因,为什么你不只是使用“PartDescriptor”,这将让你设计这一切都在Application.e4xmi? –

回答

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); 
+0

如果我想用每个按钮单击创建一个新零件,该怎么办?我怎么才能做到这一点。我看到它的方式,我将不得不以编程方式创建一个新零件。我如何在工作台中使用我的描述来做到这一点? – todayihateprogramming

+0

使用'EPartService.createPart'从描述符中创建几个部分。增加了答案的细节。 –

+0

好吧我试着按照你所说的去做,但是我用partService.createPart(“part descriptor id”)创建的部分总是空的,即使这个id是最初的正确的,虽然这会比我的方法更容易 – todayihateprogramming