2011-05-21 56 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

相關問題