構建基於通用導航器架構(CNF)的視圖 第三部分:配置菜單

 由windy444翻譯,轉載請註明

原文名:Building a Common Navigator Framework (CNF) Viewer Part III: Configuring Menus,作者:MICHAEL ELDER,出處:http://scribbledideas.blogspot.com/(本人從未能打開過,呵呵)。

先上Copyright

The opinions and ideas expressed herin are my own and do not represent the intent, opinion, or official statement of any company or organization.
All postings by me to this site are copyrighted (C) by Michael D. Elder, 2006 and made available under the terms of the Eclipse Public License 1.0 with the constraint that any reuse of the content must contain this copyright statement.

    在前面的文章中,我們通覽瞭如何構件一個通用導航器架構視圖,以及提供了一個基礎擴展來展示屬性文件。現在,我們將要學習如何爲CNF配置菜單,以及如何爲我們的視圖添加操作來操作我們的內容。

概覽

    這邊有兩個基本選擇來爲CNF視圖增加操作:

    • 使用org.eclipse.ui.popupMenus作爲objectContributions或viewerContributions來提供操作。...popupMenus擴展點能讓你在整個Eclipse工作臺上提供操作代理。CNF視圖能被配置成接受這些操作代理(缺省情況下),或者忽略他們。在平臺提供的Project Explorer視圖中,對象或視圖操作是被接受的(在第四部分中會詳細介紹)。

    • 使用org.eclipse.ui.navigator.navigatorContent作爲actionProviders來提供操作。有時候,客戶需要更加有計劃的控制下面這些內容:對於特定上下文環境中給定的菜單,要提供怎樣的操作;基於當前的選擇項,需要提供什麼可重定向操作。

    CNF的操作提供者,只被CNF視圖所接受。(將在第五部分給出詳細信息)

配置菜單結構

    在第一部分,我們定義了示例<viewer />元素,彈出菜單被簡要的提到了。

    回憶一下,這裏有兩種方法來配置彈出菜單。第一種可能就是簡單的爲org.eclipse.ui.navigator.viewer中<viewer />元素下的popupMenuId指定一個值,第二種可能就是採取一種更主動的方法來配置菜單支持的插入點。

    提示:popupMenuId和popupMenu元素同時被指定將導致錯誤。

    如果我們想要設置popupMenuId,將如同下面看到的一樣:

 

    該標識符能被org.eclipse.ui.popupMenus的擴展者所使用,來爲視圖增加一個特定的viewerContributions;然而objectContributions不需要任何的標識符。

    當只有popupMenuId屬性被指定,缺省的插入點(insertion points)集合會自動的配置到彈出菜單中。在org.eclipse.ui.navigator.viewer的schema參考中,列出了缺省配置。爲方便起見,這裏也列出了:

"group.new" separator="true"
"group.goto"
"group.open" separator="true"
"group.openWith"
"group.edit" separator="true"
"group.show" separator="true"
"group.reorganize"
"group.port"
"group.generate" separator="true"
"group.search" separator="true"
"group.build" separator="true"
"additions" separator="true"
"group.properties" separator="true"

    這些值能被org.eclipse.ui.popupMenus中的menubarPath屬性元素所使用。

    當有計劃的使用和搜索菜單項時,這些值也能被使用(參考org.eclipse.jface.action.IContributionManager,特別是insertAfter(),insertBefore(), 和appendToGroup())。

    所有字符常量("group.*")都沒定義在org.eclipse.ui.navigator.ICommonMenuConstants中,以便有計劃的使用。

    作爲替換,我們可以選擇定義<viewer/>的子元素<popupMenu />,這裏我們可以定義自己的插入點(insertion points)。(譯者注:略過一個基本操作)。

    在我們的例子中,我們可以使用同Project Explorer一樣的菜單配置。

        每個<insertionPoint />元素暗示這一個GroupMarker能通過IContributionMenu API被訪問到。當separator屬性被設置成true時,菜單將會展現一條水平線。Eclipse中的菜單有足夠的智能,只顯示必要的線,兩條背靠背的線將只被顯示成一條。

       讓我們注意一下<popupMenu />下的allowsPlatformContributions="true"屬性。缺省情況下,CNF接受..popupMenus提供的操作。若把該屬性設置成false,將會限制菜單隻接受操作提供者(Action Providers)。

    上面的例子並沒有做什麼神奇的事,在你自己的CNF視圖中,你可以根據需要定義自己的插入點("group.example")。推薦的命名規約爲"group.*",除了additions group之外,上面的那些group都遵循了。

    對於擴展或操作CNF菜單插入點集合的一些評論。對於一個已經配置好的視圖,是沒有可能來聲明性操作或擴展他的插入點集合的。有可能的是,通過Action Providers,來增加新的GroupMarkers 或Separators,但這裏需要當心。在第五部分,我們將詳細介紹這個是如何完成的,現在只是提醒一下,需要當心,並且當只有需要用到<actionProvider />中dependsOn屬性時。該dependsOn的值指明爲菜單提供額外插入點集合的Action Provider的標識符。永遠不要programmatically(譯者注:不知道該怎麼翻)刪除插入點,因爲其它擴展可能會依賴與他們。如果你自己定義的視圖不需要使用某個插入點,則在定義你自己的<popupMenu />元素時,不要定義他就好了。

總結

    在這篇文章中,我們討論瞭如何爲CNF視圖配置菜單,下面的文章將討論如何使用org.eclipse.ui.popupMenus 和org.eclipse.ui.navigator.navigatorContent/actionProvider來增加菜單。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章