2013-05-10 99 views
0

我有一個命令,我已經添加到視圖的上下文菜單(其中有一個treeviewer)和我的自定義編輯器的上下文菜單。Eclipse RCP:視圖和編輯器的命令處理程序

在我的處理程序中有什麼辦法可以區分哪個上下文菜單命令已被調用?這是因爲,在視圖中的情況下,我用這樣的事情來獲得我所需要的數據,

ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event) 
       .getActivePage().getSelection(); 
     if (selection != null & selection instanceof IStructuredSelection) 
     { 
      IStructuredSelection strucSelection = (IStructuredSelection) selection; 
..... 

在編輯器的情況下,選擇是空的,當然。所以我增加了以下處理編輯器部件,

IEditorPart editor = HandlerUtil.getActiveEditor(event); 
IEditorInput input = editor.getEditorInput(); 
     IPath path = ((FileEditorInput)input).getPath(); 

但發生的事情是,即使我從我的視圖下執行該命令,它總是返回一個激活的編輯器。這是否意味着我必須寫入單獨的處理程序,這些處理程序將基於視圖或編輯器是否處於焦點而處於活動狀態?

謝謝!

+1

請將'HandlerUtil.getActiveWorkbenchWindow(event).getActivePage()。getSelection()'改爲'HandlerUtil.getCurrentSelectionChecked(event)'... :-) – 2013-05-10 19:18:16

+0

謝謝!漂亮的指針! – nbz 2013-05-10 23:43:22

回答

1

這是否意味着我必須寫信給不同的處理器將基於視圖或編輯器是否處於對焦被激活?

是的。但是,您的單獨處理程序可以是調用常用類來執行命令的大部分工作的小類。我不知道你的命令需要運行什麼數據,但是你的單獨的處理程序可以準備這些數據並通過一個或多個構造函數將它傳遞給公共類。

+0

謝謝!我只是想確保沒有其他辦法可以讓我失蹤。 – nbz 2013-05-10 13:12:13

+0

我只需要在活動編輯器中獲取文件的路徑,並在我的樹視圖中選擇文件的路徑。 – nbz 2013-05-10 14:35:05

0

可以具有相同的處理器,以及基於HandlerUtil.getActiveEditor(event)行爲決定(這是唯一的非null當活動部分是編輯器)和HandlerUtil.getActiveView(event)(這是唯一的非null當活動部分是一個視圖)。

或者你可以讓你的處理函數中實現IExecutableExtension並提供方法setInitializationData(IConfigurationElement config, String propertyName, Object data)' which is invoked when the handler is created. Here數據is usually given in theattribute of the handler declaration (see the Javadoc of setInitializationData`)...

在這種情況下,我寧願前一種方法,但我常常用後一種方法,只要我無法在運行時決定行爲。

+0

我不知道爲什麼,但是當我實現前一種方法時(就像我在我的問題中提到的那樣),getActiveEditor總是返回一個編輯器,即使視圖處於焦點狀態。 – nbz 2013-05-13 15:03:13

+0

我會檢查。我非常確定'getActiveView(...)'只會在視圖實際上處於活動狀態時才返回視圖... – 2013-05-14 09:31:01

+0

是的,getActiveView就像您說的那樣;我談論的是getActiveEditor。即使在我調用處理程序時我的視圖處於焦點時,我也會收到一個編輯器。 – nbz 2013-05-15 10:54:23

相關問題