2011-05-21 31 views
4

我正在开发一个RCP应用程序,我需要在此应用程序中剪切/复制/粘贴。由于eclipse已经提供了一些命令(org.eclipse.ui.edit.copy,...),我想在编辑器中使用它们(例如,我已经将它们添加到了工具栏中)。 我玩过一些,但我没有得到它如何对复制/粘贴命令作出反应。例如。如果复制或粘贴某个内容,我该如何在编辑器中获得通知?在自定义RCP应用中使用org.eclipse剪切/复制/粘贴

有没有简单的方法来使用像保存命令一样的命令。在那里我只需要实现ISaveablePart,然后调用doSave()或doSaveAs()方法...我真的很喜欢这个,但是我没有找到ICopyablePart,...接口;)

Thx in advance ,

TJ

回答

7

如果你需要你的编辑器或视图中的特定行为进行复制(或任何命令),你会激活它的处理程序。通常在你的createPartControl(Composite)方法:

IHandlerService serv = (IHandlerService) getSite().getService(IHandlerService.class); 
MyCopyHandler cp = new MyCopyHandler(this); 
serv.activateHandler(org.eclipse.ui.IWorkbenchCommandConstants.EDIT_COPY, cp); 

其他常见的方式是通过plugin.xml中提供处理程序:

<handler commandId="org.eclipse.ui.edit.copy" 
     handler="com.example.app.MyCopyHandler"> 
    <activeWhen> 
     <with variable="activePartId"> 
     <equals value="com.example.app.MyEditorId"/> 
     </with> 
    </activeWhen> 
</handler> 
在你的处理器

然后,你会得到积极的作用,并打电话给你的副本实施它。例如:

IWorkbenchPart part = HandlerUtil.getActivePart(event); 
if (part instanceof MyEditor) { 
    ((MyEditor)part).copy(); 
} 
+0

嗨保罗,我试了两种方法。但我总是得到这个异常:“没有处理程序执行命令org.eclipse.ui.edit.copy。”你知道我为什么得到这个吗? – TerenceJackson 2011-05-23 09:27:55

+0

嗨保罗,我已经解决了这个问题。如果isHandled()返回false,则会发生此错误...返回true将调用执行方法... – TerenceJackson 2011-05-23 11:41:50

+1

尝试抽象并且继承AbstractHandler而不是实现IHandler。在大多数情况下,它会表现正确。 – 2011-05-23 11:50:39

相关问题