eroself

          關于人生的程式,在這里譜寫......
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理

          擴展Eclipse視圖彈出菜單

          Posted on 2008-02-23 10:37 鬼谷子 閱讀(1484) 評論(0)  編輯  收藏 所屬分類: Eclipse

          轉自:http://cnfree2000.spaces.live.com/blog/cns!6201144F025F9D77!426.entry

          Eclipse里每種編輯器都有它自己的視圖,有時候我們需要在上面添加自己的功能,擴充視圖彈出菜單則是必不可少的工作之一。

          在一個視圖的Popup Menu里增加一個菜單項,含有2種方式:

          1、viewerContribution,也就是通過視圖的id。這樣只有視圖id和給定的id一致的時候,它的彈出菜單才會增加我們定義的菜單項。

          2、objectContribution,通過對象類型。當在視圖里選定的對象類型和給定的一致時,在視圖的彈出菜單增加我們定義的菜單項。

          菜單項的Action需要繼承org.eclipse.ui.actions.ActionDelegate,然后實現(xiàn)特殊的View的ActionDelegate接口。比如要擴展Java編輯器:

          public class FinderActionDelegate extends ActionDelegate implements
                  IEditorActionDelegate {

          來看看插件的Plugin.xml的組成部分:

          viewerContribution形式:
             <extension
                   point="org.eclipse.ui.popupMenus">
                <viewerContribution
                      targetID="#TextEditorContext"
                      id="com.cnfree.finder.editor">
                   <action
                         label="查找最大ID"
                         icon="icon/search.gif"
                         helpContextId="com.cnfree.finder.finderaction"
                         class="com.cnfree.finder.FinderActionDelegate"
                         menubarPath="additions"
                         enablesFor="+"
                         id="com.cnfree.finder">
                   </action>
                </viewerContribution>
                <viewerContribution
                      targetID="#CompilationUnitEditorContext"
                      id="com.cnfree.finder.editor">
                   <action
                         label="查找最大ID"
                         icon="icon/search.gif"
                         helpContextId="com.cnfree.finder.finderaction"
                         class="com.cnfree.finder.FinderActionDelegate"
                         menubarPath="additions"
                         enablesFor="*"
                         id="com.cnfree.finder">
                   </action>
                </viewerContribution>
             </extension> < br />   <extension
                   point="org.eclipse.ui.editorActions">
             </extension>

          這里我們需要知道擴展的視圖它的菜單項在Eclipse插件注冊表里定義的id(稍后我會附上Eclipse插件菜單項ID注冊表)。比如Java編輯器對應的ID為:
          #TextEditorContext 和 #CompilationUnitEditorContext,我們定義好 targetID,就把我們的插件id指向視圖菜單的id了。這樣Java編輯器就會添加我們的菜單項了。

          <!ATTLIST action
             id            CDATA #REQUIRED
             label         CDATA #REQUIRED
             menubarPath   CDATA #IMPLIED
             toolbarPath   CDATA #IMPLIED
             icon          CDATA #IMPLIED
             disabledIcon  CDATA #IMPLIED
             hoverIcon     CDATA #IMPLIED
             tooltip       CDATA #IMPLIED
             helpContextId CDATA #IMPLIED
             style         (push|radio|toggle) "push"
             state         (true | false) 
             class         CDATA #REQUIRED
             enablesFor    CDATA #IMPLIED>
          < br />此元素定義用戶可在用戶界面中調用的操作。


          • id - 用作此操作的引用的唯一標識。 
          • label - 用作菜單項文本或工具欄按鈕標簽的可翻譯名稱。此名稱可包括助記符信息。
          • menubarPath - 用來指定下拉菜單中此操作位置的以斜杠(“/”)定界的路徑。路徑中的每個標記(最后一個標記除外)都必須表示層次結構中現(xiàn)有菜單的有效標識。最后一個標記表示要將操作添加到其中的命名組。如果省略了路徑,則此操作將不會出現(xiàn)在下拉菜單中。 
          • toolbarPath - 目標視圖的本地工具欄內的命名組。如果該組不存在,則將創(chuàng)建它。如果省略該項,則操作將不會出現(xiàn)在本地工具欄中。 
          • icon - 用來在操作的上下文中可視地表示操作的圖標的相對路徑。如果省略該項且操作出現(xiàn)在工具欄中,則“工作臺”將使用占位符圖標。該路徑是相對于添加插件的 plugin.xml 文件的位置的。圖標將出現(xiàn)在工具欄中,但是不會出現(xiàn)在下拉菜單中。
          • disabledIcon - 當禁用操作時,用于在操作的上下文中可視地表示操作的圖標的相對路徑。如果省略該項,則正常圖標將變灰。該路徑是相對于添加插件的 plugin.xml 文件的位置的。禁用的圖標將出現(xiàn)在工具欄中,但是不會出現(xiàn)在下拉菜單中。
          • hoverIcon - 當鼠標指針位于操作上時,用來在操作的上下文中可視地表示操作的圖標的相對路徑。如果省略此項,則將使用正常圖標。該路徑是相對于添加插件的 plugin.xml 文件的位置的。
          • tooltip - 表示操作的工具提示的可翻譯文本。僅當操作出現(xiàn)在工具欄中時才使用。
          • helpContextId - 一個指示此操作的幫助上下文的唯一標識。如果操作作為菜單項出現(xiàn),則在突出顯示該菜單項時按 F1 鍵將顯示幫助。
          • style - 用來定義操作的用戶界面樣式類型的可選屬性。如果定義了此項,則屬性值將是下列其中一項: 
               push - 作為普通菜單項或工具項。 
               radio - 作為單選樣式菜單項或工具項。同一菜單或工具欄組內具有單選樣式的操作相當于單選按鈕集。初始值由 state 屬性指定。
               toggle - 作為復選樣式菜單項或切換工具項。初始值由 state 屬性指定。 
          • state - 指示初始狀態(tài)(true 或 false)的可選屬性,當 style 屬性具有值 radio 或 toggle 時使用。
          • class - 實現(xiàn) org.eclipse.ui.IViewActionDelegate 的標準類的名稱。
          • enablesFor - 指示必須滿足才能啟用操作的選擇計數(shù)的值。如果指定了此屬性并且滿足條件,則啟用操作。如果條件不滿足,則禁用操作。如果沒有指定任何屬性,則對選擇了任意數(shù)目的項啟用操作。下列屬性格式受支持: ! - 選擇了零項  
               ? - 選擇了零項或一項  
               + - 選擇了一項或多項 
               multiple, 2+ - 選擇了兩項或多項 
               n - 選擇了精確數(shù)目的項。例如:nablesFor=" 4" 僅當選擇了 4 個項時才啟用操作。 
               * - 選擇了任意數(shù)目的項

          objectContribution形式:

             <objectContribution objectClass="com.cnfree.action.IOpenable" >
                <action
                      id="com.cnfree.open"
                      menubarPath="new.ext"
                      definitionID="com.cnfree.open.selection"
                      label="&Open@Ctrl+O"
                      tooltip="Open the selected item(s)"
                      helpContextId="com.cnfree.open.selection"
                      icon="icon/open.gif"
                      class="com.cnfree.action.Op enSelectedActionDelegate"
                      enablesFor="+">
                </action>
             </objectContribution>

          action Open實現(xiàn)了IOpenable,這樣就意味著,所有包含了IOpenable對象的視圖,當我們選中其中的IOpenable對象時,它的彈出菜單都會增加我們自定義的菜單項。

          附帶的例子:
          cnfree editor plugin

          使用說明:建立一個Java文件,在它的注釋里添加 xxx.yyy ,xxx為一個類名,yyy為一個三位數(shù)ID,比如cnfee.100,cnfree.101,cnfree.102,在Java透視圖里打開這個Java文件,右鍵菜單會有一個選項:查找最大ID,打開后輸入cnfree,它就會自動找到cnfree.102,并將該字符串高亮顯示。

          Eclipse插件菜單ID注冊表參考:http://www.jdg2e.com/ch21.actions.table/doc/

          參考資料:
          http://www.eclipsesource.com/EN_ARCHIVE/etips_07072004.html 
          Eclipse幫助:org.eclipse.platform.doc.isv/guide/workbench_basicext_popupMenus.htm

          主站蜘蛛池模板: 井冈山市| 夏河县| 潼南县| 礼泉县| 陆良县| 宁陵县| 朝阳市| 碌曲县| 江安县| 永和县| 兴仁县| 镇江市| 横峰县| 门头沟区| 三门县| 宣汉县| 上思县| 疏附县| 巴东县| 海晏县| 怀仁县| 屯留县| 黑龙江省| 北票市| 蛟河市| 丰顺县| 定南县| 偃师市| 镇平县| 黄浦区| 航空| 遂溪县| 安龙县| 建阳市| 兴文县| 吉水县| 嘉峪关市| 抚顺县| 巫山县| 时尚| 张家港市|