轉自:http://blog.csdn.net/windy444/archive/2007/12/31/2006309.aspx
由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來增加菜單。