eclipse平臺(tái)允許我們通過(guò)插件擴(kuò)展出另一個(gè)插件,與平臺(tái)緊密集成為用戶提供更好的體驗(yàn),本文將向您闡述如何向視圖和編輯器中添加動(dòng)作(上下文菜單),并且允許為您自己定義的視圖和編輯器添加其他新的動(dòng)作。文中的每一個(gè)示例將詳細(xì)的向您展示每一種不同應(yīng)用的特征。

上面的圖片顯示了插件中能添加動(dòng)作的眾多區(qū)域:
1、 在視圖和編輯器中添加上下文菜單
2、 在視圖上添加工具欄和下拉菜單
3、 在工作臺(tái)窗口的主工具欄和菜單上添加動(dòng)作
本文將對(duì)上面的種種進(jìn)行演示,并通過(guò)實(shí)例形式向您詳細(xì)講解。
我們假設(shè)您有插件開(kāi)發(fā)的基礎(chǔ),如果想獲得在eclipse平臺(tái)上開(kāi)發(fā)插件的更多信息,請(qǐng)閱讀Jim Amsden的入門(mén)文章“Your First Plug-in”,該示例的運(yùn)行結(jié)果,請(qǐng)點(diǎn)擊“running the examples”。
在上下文菜單中添加動(dòng)作
可以在視圖和編輯器的上下文菜單中添加動(dòng)作并緊密集成,比如,VCM插件在存在的視圖如Navigator或Packages中添加了許多新的動(dòng)作,對(duì)資源進(jìn)行版本管理.為了在上下文菜單中添加新的動(dòng)作,eclipse提供了插件點(diǎn)org.eclipse.ui.popupMenus,包括兩種類型的動(dòng)作,即能添加到視圖或編輯器的上下文菜單中,也能為指定的對(duì)象類型添加上下文菜單。下面的三個(gè)示例將為您詳細(xì)說(shuō)明。
示例一:為默認(rèn)的文本編輯器添加新的動(dòng)作
讓我們看看如何向默認(rèn)的文本編輯器添加一個(gè)動(dòng)作:
①<viewerContribution
id="org.eclipse.ui.articles.action.contribution.popup.editor"
② targetID="#TextEditorContext">
③ <action
id="org.eclipse.ui.articles.action.contribution.editor.action1"
label="Editor Action 1"
icon="icons/red_dot.gif"
④ menubarPath="additions"
⑤ class="first.plugin.action.ContextMenuAction">
</action>
</viewerContribution>
</extension>
上面的xml向指定編輯器添加了一個(gè)上下文菜單,該擴(kuò)展叫viewerContribution(①),可以用于視圖和編輯器。
targetID屬性(②)指定上下文菜單所依附的目標(biāo)視圖和編輯器標(biāo)識(shí)符,官方文檔提供了可用的標(biāo)識(shí)符列表,如果您設(shè)置的標(biāo)識(shí)符不存在,則上下文菜單不被注冊(cè)。一個(gè)視圖或編輯器可以有不只一個(gè)上下文菜單。
action(③)標(biāo)記用于定義一個(gè)動(dòng)作,id是該動(dòng)作的標(biāo)識(shí)符,label和icon表示菜單項(xiàng)的顯示文本和圖標(biāo),icon為可選項(xiàng)。menubarPath(④)屬性指定動(dòng)作菜單項(xiàng)的位置,從上下文菜單的根開(kāi)始,action將被添加到這里。在本示例中,“additions”其實(shí)是org.eclipse.ui.IWorkbenchActionConstants類的一個(gè)常量值(MB_ADDITIONS)。添加的動(dòng)作獨(dú)立成組,在上述情況下,如果menubarPath屬性沒(méi)有指定,工作臺(tái)將首先添加到“additions”組中,如果additions不存在,動(dòng)作將被添加到上下文菜單的末尾。
class(⑤)屬性是一個(gè)菜單項(xiàng)被用戶選中后將要執(zhí)行的動(dòng)作的類,如果是編輯器的上下文菜單,該類必須實(shí)現(xiàn)org.eclipse.ui.IEditorActionDelegate接口,如果是視圖的上下文菜單,則實(shí)現(xiàn)org.eclipse.ui.IViewActionDelegate接口。有一個(gè)非常重要的情況就是只有當(dāng)用戶選擇了菜單項(xiàng)后該類才被工作臺(tái)加載,這就意味著很多初始化的邏輯必須在XML文件中描述。一旦該類被工作臺(tái)加載,該類將可以控制動(dòng)作的啟用與禁用。如果動(dòng)作被選中,將執(zhí)行run()方法完成需要的功能。
下面是一個(gè)典型的實(shí)現(xiàn)類:
package first.plugin.action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.ui.IEditorActionDelegate;
import org.eclipse.ui.IEditorPart;
public class ContextMenuAction implements IEditorActionDelegate {
@Override
public void setActiveEditor(IAction action, IEditorPart targetEditor) {
}
@Override
public void run(IAction action) {
MessageDialog.openInformation(null, "", "我是上下文菜單");
}
@Override
public void selectionChanged(IAction action, ISelection selection) {
}
}