




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、引言Eclipse 具有豐富的菜單功能,給開(kāi)發(fā)人員提供了很好的用戶(hù)體驗(yàn)??傮w而言,Eclipse 菜單種類(lèi)包括視圖 / 編輯器菜單,主菜單(Main Menu),視圖 / 編輯器菜單(ViewPart/EditorPart Menu)和上下文菜單(Context Menu)。插件開(kāi)發(fā)人員通過(guò)靈活應(yīng)用這些菜單,可以給用戶(hù)提供很好的體驗(yàn)。由于視圖和編輯器菜單功能類(lèi)似,因此本文重點(diǎn)講述視圖菜單(視圖下拉菜單及其工具欄菜單),除此之外,還將講述主菜單和上下文菜單。如圖 1 所示為 Project Explorer 視圖的菜單,包括視圖下拉菜單和工具欄菜單(折疊樹(shù)節(jié)點(diǎn))。通常而言,出現(xiàn)在視圖工具欄的菜單
2、都會(huì)出現(xiàn)在視圖的下拉菜單,也就是說(shuō),比較常用的視圖菜單放在視圖的工具欄。圖 1. Project Explorer 視圖的菜單如圖 2 所示為 Project Explorer 視圖中的上下文菜單,只有當(dāng)我們右鍵點(diǎn)擊時(shí)才會(huì)出現(xiàn)。通常而言,出現(xiàn)頻率較高的菜單項(xiàng)才會(huì)出現(xiàn)在菜單中。上下文菜單具有很強(qiáng)的靈活項(xiàng),它可以隨著我們點(diǎn)擊的對(duì)象不同,彈出的菜單也會(huì)有相應(yīng)的變化。圖 2. Project Explorer 視圖中的上下文菜單如圖 3 所示為 Eclipse 的主菜單,包括最上面的主菜單項(xiàng)(不可移動(dòng))及其下面的工具欄菜單(可以移動(dòng),并且 Eclipse 提供了顯示 / 不顯示這些菜單的功能),Ecl
3、ipse 并不建議我們?yōu)槊恳粋€(gè)插件都添加新的主菜單,這樣容易造成冗余,而且不方便用戶(hù)操作。通常,我們可以把菜單項(xiàng)添加到 Eclipse 已有的菜單,如插件的查找功能可以添加一個(gè)查找菜單項(xiàng)到 Eclipse 的 Search 主菜單上。圖 3. Eclipse 的主菜單前面講到 Eclipse 的各種菜單,那么,如何在開(kāi)發(fā)插件或 RCP 應(yīng)用程序的時(shí)候添加這些菜單?本文下面的篇幅將詳細(xì)介紹如何擴(kuò)展 Eclipse 的菜單功能,使讀者深入了解 Eclipse 的菜單功能,并能夠開(kāi)發(fā)具有這些菜單的應(yīng)用程序。因此,必須掌握三方面的內(nèi)容:菜單種類(lèi),菜單的擴(kuò)展點(diǎn),菜單控制(顯示 / 隱藏或啟用 / 禁用菜
4、單項(xiàng))。下面從概念上介紹這三方面內(nèi)容,下一小節(jié)將會(huì)進(jìn)行詳細(xì)介紹。菜單種類(lèi)正如前面所講到的,Eclipse 的菜單包括視圖菜單,主菜單及上下文菜單三個(gè)種類(lèi)。菜單項(xiàng)的擴(kuò)展點(diǎn)Eclipse 提供了兩種擴(kuò)展點(diǎn)供用戶(hù)添加菜單項(xiàng)到相應(yīng)的位置。這兩種擴(kuò)展點(diǎn)為 mands(本文簡(jiǎn)稱(chēng)為 Commands 方式)和 org.eclipse.ui.actionSets(本文簡(jiǎn)稱(chēng)為 Actions 方式)。Actions 方式為界面上不同區(qū)域的表現(xiàn)方式提供了相應(yīng)的擴(kuò)展點(diǎn),并且沒(méi)有分離其界面表現(xiàn)和內(nèi)在實(shí)現(xiàn)。恰恰相反,Commands 方式通過(guò)三步有效的達(dá)到界面表現(xiàn)和內(nèi)部實(shí)現(xiàn)的分離:首先,通過(guò) mands 擴(kuò)展點(diǎn)創(chuàng)建命令
5、和類(lèi)別(Category),并且可以把某些命令放在一個(gè)類(lèi)別(Category)中;然后,通過(guò) org.eclipse.ui.menus 指定命令出現(xiàn)在界面的哪個(gè)區(qū)域(視圖菜單 / 主菜單 / 上下文菜單);最后通過(guò) org.eclipse.ui.handlers 指定命令的實(shí)現(xiàn)。因此,Eclipse 推薦新開(kāi)發(fā)的插件使用 Commands 來(lái)創(chuàng)建您的界面菜單。當(dāng)然,由于 Actions 在現(xiàn)有的插件中用得比較多,如果我們需要擴(kuò)展或基于之前的插件開(kāi)發(fā),也需要對(duì)其進(jìn)行了解。除此之外,針對(duì)上下文菜單,雖然 Commands 和 Actions 方式均可以創(chuàng)建上下文菜單,但是 Eclipse 還提供了
6、另外一種創(chuàng)建上下文菜單的擴(kuò)展點(diǎn) org.eclipse.ui.popupMenus(本文簡(jiǎn)稱(chēng)為 popupMenus 方式),本文將就這三種擴(kuò)展點(diǎn)做詳細(xì)的介紹。菜單控制菜單控制是一個(gè)非常常見(jiàn)的功能,例如,隨著選定的內(nèi)容或當(dāng)前窗口的不同,菜單中的菜單項(xiàng)會(huì)有相應(yīng)的變化(顯示 / 隱藏或啟用 / 禁用菜單項(xiàng)),因此,如何控制菜單是插件開(kāi)發(fā)人員必須掌握的知識(shí)。Eclipse 為菜單控制提供了兩種方法,一種是通過(guò)擴(kuò)展點(diǎn);另一種是通過(guò) API 的方式編寫(xiě)程序控制。回頁(yè)首Eclipse 菜單功能及其擴(kuò)展點(diǎn)至此,我們對(duì) Eclipse 菜單有了感觀的認(rèn)識(shí)。由上一節(jié)我們可知,要深入理解 Eclipse 菜單功能
7、,我們需要從三個(gè)方面去掌握:菜單種類(lèi),菜單的擴(kuò)展點(diǎn)和菜單控制。下面將進(jìn)行詳細(xì)講述。菜單種類(lèi)針對(duì)各種菜單,Eclipse 提供了相應(yīng)的擴(kuò)展點(diǎn),因此,開(kāi)發(fā)人員可以通過(guò)這些擴(kuò)展點(diǎn)把菜單放到界面的不同區(qū)域,詳細(xì)內(nèi)容請(qǐng)參考 2.2 小節(jié)。菜單的擴(kuò)展點(diǎn)視圖菜單的擴(kuò)展點(diǎn)采用 Commands 方式創(chuàng)建視圖菜單,需要引入 org.eclipse.ui.menus 擴(kuò)展點(diǎn);而 Actions 方式需要引入 org.eclipse.ui.actionSets.1、視圖菜單(Commands 方式):MenuContribution locationURI = “Scheme:id?argument-list”其中
8、,Scheme 為該菜單項(xiàng)出現(xiàn)的區(qū)域,menu 為視圖的下拉菜單,toolbar 為視圖的工具欄菜單;id 為菜單區(qū)域 ID;argument-list 為該菜單項(xiàng)出現(xiàn)在指定菜單的位置。例如:在 ProbelmView 的下拉菜單加一個(gè)菜單項(xiàng),其 MenuContribution 的 locationURI 應(yīng)為:menu:org.eclipse.ui.views.ProblemView?after=additions;在 ProblemView 的工具欄菜單中加入一個(gè)菜單項(xiàng),其 locationURI 應(yīng)為:toolbar:org.eclipse.ui.views.ProblemView?a
9、fter=additions。2、視圖菜單(Actions 方式):采用 Actions 方式創(chuàng)建菜單,需要引入 org.eclipse.ui.actionSets 擴(kuò)展點(diǎn),并通過(guò)設(shè)定 action 的 menubarPath 指定下拉菜單 / 菜單項(xiàng)出現(xiàn)的位置;通過(guò)設(shè)定 action 的 toolbarPath 設(shè)定工具欄菜單 / 菜單項(xiàng)出現(xiàn)的位置。例如,添加一個(gè)下拉菜單項(xiàng)到 Problems 視圖中,其 menubarPath 應(yīng)為:org.eclipse.ui.views.ProblemView/additions主菜單的擴(kuò)展點(diǎn)1、主菜單(Commands 方式)通過(guò) Commands
10、方式把菜單項(xiàng)添加到主菜單及其工具欄上,和視圖菜單一樣,也是通過(guò)擴(kuò)展點(diǎn) org.eclipse.ui.menus 實(shí)現(xiàn),需要設(shè)定其 menuContribution 的 locationURI。例如,添加一個(gè)菜單(菜單可以包含若干個(gè)菜單項(xiàng))到主菜單一欄中,其 locationURI 為:menu:org.eclipse.ui.main.menu?after=additions添加一個(gè)菜單到工具欄之中,其 locationURI 為:toolbar:org.eclipse.ui.main.toolbar?after=additions當(dāng)然,我們也可以把菜單項(xiàng)添加到已經(jīng)存在的菜單當(dāng)中,例如添加一個(gè)菜
11、單項(xiàng)到 Eclipse 的 Search 主菜單當(dāng)中,其 locationURI 為:menu:org.eclipse.search.menu?dialogGroup2、主菜單(Actions 方式)通過(guò) Actions 方式把菜單項(xiàng)添加到主菜單及其工具欄上,和視圖菜單一樣,也是通過(guò)擴(kuò)展點(diǎn) org.eclipse.ui.actionSets 實(shí)現(xiàn),需要設(shè)定 action 的 menubarPath 和 toolbarPath 實(shí)現(xiàn)。例如,添加一個(gè)菜單項(xiàng)到 Eclipse 的 Search 主菜單中,其 menubarPath 應(yīng)為:org.eclipse.search.menu/dialogG
12、roup注意:如果采用上述方式添加一個(gè)菜單項(xiàng)到 Search 主菜單,當(dāng)我們運(yùn)行時(shí)并沒(méi)有出現(xiàn)添加的菜單項(xiàng),這時(shí)候需要換一個(gè) workspace,其原因是 Eclipse 緩存了與其相關(guān)的某些信息在 workspace 當(dāng)中。上下文菜單的擴(kuò)展點(diǎn)上下文菜單除了通過(guò) Commands 和 Actions 方式添加,還可以使用擴(kuò)展點(diǎn) org.eclipse.ui.popupMenus 方式添加,下面分別進(jìn)行介紹。1、上下文菜單(Commands 方式)Commands 方式與添加視圖菜單和主菜單的方式一樣,通過(guò)設(shè)定其 menuContribution 的 locationURI 來(lái)實(shí)現(xiàn)。例如,添加一個(gè)
13、上下文菜單到 Problems 視圖中,其 locationURI 為:popup:org.eclipse.ui.views.ProblemView?after=additions。如果我們想讓某個(gè)上下文菜單項(xiàng)出現(xiàn)在任何區(qū)域,則可以使用下面的 locationURI:popup:org.eclipse.ui.popup.any?after=additions2、上下文菜單(Actions 方式)Actions 方式?jīng)]有直接提供擴(kuò)展點(diǎn)添加上下文菜單,但是我們可以通過(guò)編程的方式實(shí)現(xiàn),如下代碼清單 1 為 TreeViewer 添加上下文菜單,通過(guò) IMenuManager 的 add 方法添加 a
14、ctions。清單 1. 通過(guò) Actions 方式編程實(shí)現(xiàn)添加上下文菜單 private void hookContextMenu() IMenuManager fMenuMgr = new MenuManager(“#PopupMenu”); fMenuMgr.setRemoveAllWhenShown(true); / 添加 Actions fMenuMgr.add(action ) fMenuMgr.createContextMenu(treeViewer.getControl(); treeViewer.getControl().setMenu(fMenu); getSite().r
15、egisterContextMenu(fMenuMgr, treeViewer); 3、上下文菜單(popupMenus 方式)通過(guò) popupMenus 擴(kuò)展點(diǎn)實(shí)現(xiàn)上下文菜單,需要設(shè)定 objectContribution 的 objectClass 屬性把上下文菜單添加到相應(yīng)的區(qū)域。例如,如果我們想當(dāng)用戶(hù)點(diǎn)擊 Eclipse 中的資源時(shí),彈出的上下文菜單包括某個(gè)菜單項(xiàng),我們可以設(shè)定 objectClass 屬性為:org.eclipse.core.resources.IResource通過(guò) Commands 方式創(chuàng)建菜單項(xiàng)通過(guò) Commands 方式創(chuàng)建菜單項(xiàng),首先需要?jiǎng)?chuàng)建 Command
16、,通過(guò)擴(kuò)展點(diǎn) mands,然后我們可以把這個(gè) Command 放到任何區(qū)域,上一小節(jié)已經(jīng)講到,通過(guò) org.eclipse.ui.menus 擴(kuò)展點(diǎn)確定菜單創(chuàng)建的區(qū)域,最后通過(guò)擴(kuò)展點(diǎn) org.eclipse.ui.handlers 定義這個(gè) command 的具體行為。在創(chuàng)建 Command 時(shí),我們可以先創(chuàng)建一個(gè) Category,并把相關(guān)的一些命令放到這個(gè) Category 中,這樣有利于管理。代碼清單 2 創(chuàng)建一個(gè) Command(“Show in Glossary Explorer”),并放到一個(gè) Category 中,然后把該 Command 放到 BGSearchResultVie
17、w 視圖的上下文菜單中,最后通過(guò)擴(kuò)展 org.eclipse.ui.handlers 定義該 Command 的實(shí)現(xiàn)類(lèi)。清單 2. 通過(guò) Commands 方式添加菜單項(xiàng) <!- 添加 command -> <extension point="mands"> <category description="Business Glossary" id="mands.category" name="%category.BusinessG"> </categ
18、ory> <command categoryId="mands.category" description="Show in Glossary Explorer" id="mands.BGShowInBrowser" name="%command.ShowInGE.name"> </command> </extension> <!- 把 Command 放到界面的對(duì)應(yīng)區(qū)域 -> <extension point="org.eclipse.ui.m
19、enus"> <menuContribution locationURI= "popup:ernal.ui.search.BGSearchResultView?after=additions"> <command commandId="mands.BGShowInBrowser" style="push" tooltip="%command.ShowInGE.tooltip"> </command> </menuContribut
20、ion> </extension> <!- 定義 command 的實(shí)現(xiàn)類(lèi) -> <extension point="org.eclipse.ui.handlers"> <handler class="ernal.ui.handlers.BGShowInBrowser" commandId="mands.BGShowInBrowser"> </handler> </extension>通過(guò) Actions 方式創(chuàng)建菜單項(xiàng)正如前面講
21、到,Actions 方式?jīng)]有分離界面的表現(xiàn)和內(nèi)部實(shí)現(xiàn),因此,所有這些均通過(guò) action 來(lái)完成。如下代碼清單 3 為添加一個(gè) Search 菜單項(xiàng)到 Eclipse 的 Search 主菜單(通過(guò) action 的 menubarPath 指定)中,其中 class 對(duì)應(yīng)的值為該 Action 的實(shí)現(xiàn)類(lèi),該類(lèi)需要實(shí)現(xiàn)接口 IWorkbenchWindowActionDelegate。清單 3. 通過(guò) Actions 方式添加菜單項(xiàng) <extension point="org.eclipse.ui.actionSets"> <actionSet id=&q
22、uot;com.ibm.bg.ui.workbenchActionSet" label="%.0" visible="true"> <action class="ernal.ui.handlers.BGSearchHandler" definitionId="mands.BGSearch" icon="icons/search.png" id="mands.BGSearch" label="
23、%action.searchGlossayInMainMenu.label" menubarPath="org.eclipse.search.menu/dialogGroup" style="push"> </action> </actionSet> </extension>通過(guò) popupMenus 方式創(chuàng)建菜單項(xiàng)popupMenus 方式創(chuàng)建上下文菜單項(xiàng)也是通過(guò) action 來(lái)實(shí)現(xiàn),下面例子為添加一個(gè)菜單項(xiàng)到用戶(hù)右擊 IGraphicalEditPart 對(duì)象時(shí)彈出的上下文菜單,通過(guò) menuba
24、rPath 指定該 Action 出現(xiàn)的區(qū)域,通過(guò) class 指定該 action 的實(shí)現(xiàn)類(lèi),該類(lèi)需要實(shí)現(xiàn)接口 IObjectActionDelegate。清單 4. 通過(guò) popupMenus 方式添加菜單項(xiàng) <extension point="org.eclipse.ui.popupMenus"> <objectContribution adaptable="false" id="com.ibm.bg.uml.objectContributions.BGAssignToGlossary" objectClass
25、="org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart"> <action class="ernal.uml.actions.BGAssignToGlossary" enablesFor="+" icon="icons/assign.png" id="ernal.uml.actions.BGAssignToGlossary" label="%B
26、GAssignToGlossary.item" menubarPath="com.ibm.bg.uml.popupMenuGroup"> </action> </objectContribution> </extension>菜單控制視圖菜單的控制主要包括啟用 / 禁用,顯示 / 隱藏菜單。通過(guò) Command 方式創(chuàng)建的菜單,可以通過(guò) mands 的 visibleWhen 屬性控制菜單的隱藏和顯示,通過(guò) org.eclipse.ui.handlers 的 activewhen 或 enabledWhen 控制菜單的啟用
27、或禁用。通過(guò) Actions 方式創(chuàng)建的菜單,可以通過(guò) action 的 enablement 屬性控制菜單的啟用 / 禁用。通過(guò) popupMenus 方式創(chuàng)建的菜單,可以通過(guò) objectContribution 的 visibility 和 enablement 來(lái)設(shè)置該 objectContribution 下的 action 的顯示 / 隱藏和啟用 / 禁用,我們也可以設(shè)置 action 的 enablement 來(lái)控制該菜單的啟用 / 禁用。這里不詳細(xì)講述 enablement,visibleWhen 和 enabledWhen 的參數(shù)及如何設(shè)置,讀者可以參考第三節(jié)的例子和本文的參
28、考文獻(xiàn)?;仨?yè)首編程實(shí)踐本文將結(jié)合前兩節(jié)講到的知識(shí),以例子的形式說(shuō)明如何創(chuàng)建并且控制菜單。首先創(chuàng)建一個(gè)視圖(Menu Example),然后分別通過(guò) Commands,Actions 和 popupMenus 方式創(chuàng)建若干個(gè)菜單,并添加相應(yīng)的菜單控制點(diǎn)。創(chuàng)建 Menu Example 視圖擴(kuò)展 org.eclipse.views 創(chuàng)建“Menu Example”視圖,如下代碼清單 5 為創(chuàng)建視圖的 xml 代碼。清單 5. 擴(kuò)展 org.eclipse.ui.views 創(chuàng)建視圖 <extension point="org.eclipse.ui.views"> &
29、lt;category id="com.free.menu.category" name="Menu Example View"> </category> <view category="com.free.menu.category" class="com.free.menu.view.MenuExplorer" id="com.free.menu.view.MenuExplorer" name="Menu Explorer" restorable=&
30、quot;true"> </view> </extension>創(chuàng)建 Commands采用 Command 方式創(chuàng)建“Menu Example”主菜單(包含 AngryCommand 和 JokeCommand 兩個(gè)菜單項(xiàng)),并且基于這兩個(gè)菜單項(xiàng)創(chuàng)建了 Menu Example 視圖的下拉菜單和工具欄菜單,及其 TreeViewer 的上下文菜單。如下代碼清單 6 為擴(kuò)展 mands 創(chuàng)建 Menu Example 命令和類(lèi)別,并且包含兩個(gè)命令:Joke Command 和 Angry Command。清單 6. 擴(kuò)展 mands 創(chuàng)建命令 <ex
31、tension point="mands"> <category id="com.free.menu.category" name="Menu Example"> </category> <command categoryId="com.free.menu.category" id="mands.jokeCommand" name="Joke Command"> </command> <command categor
32、yId="com.free.menu.category" id="mands.angryCommand" name="Angry Command"> </command> </extension>關(guān)聯(lián) Commands 到主菜單如下代碼清單 7 為擴(kuò)展 org.eclipse.ui.menus,并基于前面創(chuàng)建的 Comands,添加一個(gè)主菜單 Menu Example,并且包含 Joke Command 和 Angry Command 菜單項(xiàng)。清單 7. 創(chuàng)建 Menu Example 主菜單 <m
33、enuContribution locationURI="menu:org.eclipse.ui.main.menu?after=additions"> <menu id="com.free.menu.MenuExample" label="Menu Example"> <command commandId="mands.jokeCommand" style="push"> </command> <command commandId="m
34、ands.angryCommand" style="push"> </command> </menu> </menuContribution>關(guān)聯(lián) Commands 到視圖菜單如下代碼清單 8 為擴(kuò)展 org.eclipse.ui.menus,并基于 Commands 方式創(chuàng)建 Menu Example 視圖的下拉菜單,工具欄菜單和上下文菜單,通過(guò) locationURI 來(lái)設(shè)定。Joke Command 即為下拉菜單也是工具欄菜單,只有當(dāng)我們選擇了 TreeViewer 中的節(jié)點(diǎn)時(shí)該菜單項(xiàng)才是可見(jiàn)的,參考下面的 visi
35、bleWhen->with->iterate->or->instanceof。清單 8. 通過(guò) Commands 方式創(chuàng)建視圖菜單 <extension point="org.eclipse.ui.menus"> <menuContribution locationURI="menu:com.free.menu.view.MenuExplorer?after=additions"> <command commandId="mands.jokeCommand" icon="
36、icons/searchres.gif" style="push"> <visibleWhen checkEnabled="false"> <with variable="selection"> <iterate ifEmpty="true" operator="or"> <or> <instanceof value="com.free.menu.model.Person"> </instanc
37、eof> </or> </iterate> </with> </visibleWhen> </command> </menuContribution> <menuContribution locationURI="toolbar:com.free.menu.view.MenuExplorer?after=additions"> <command commandId="mands.jokeCommand" icon="icons/searchres.g
38、if" style="push"> <visibleWhen checkEnabled="false"> <with variable="selection"> <iterate ifEmpty="true" operator="or"> <or> <instanceof value="com.free.menu.model.Person"> </instanceof> </or&g
39、t; </iterate> </with> </visibleWhen> </command> </menuContribution> <menuContribution locationURI="popup:com.free.menu.view.MenuExplorer?after=additions"> <command commandId="mands.jokeCommand" icon="icons/searchres.gif" style=&quo
40、t;push"> </command> <command commandId="mands.angryCommand" style="push"> </command> </menuContribution> </extension>Commands 的實(shí)現(xiàn)類(lèi)如下代碼清單 9 所示擴(kuò)展 org.eclipse.ui.handlers 為 Joke Command 和 Angry Command 創(chuàng)建事件處理類(lèi),其中 Joke Command 通過(guò) enabledWhen 屬性控制
41、該菜單項(xiàng)是否啟用,當(dāng)我們同時(shí)選擇了兩個(gè)對(duì)象時(shí) Joke Command 處于啟用狀態(tài),否則為禁用。清單 9. 擴(kuò)展 org.eclipse.ui.handlers 為 Commands 創(chuàng)建實(shí)現(xiàn)類(lèi) <extension point="org.eclipse.ui.handlers"> <handler class="com.free.menu.actions.JokeCommand" commandId="mands.jokeCommand"> <enabledWhen> <count val
42、ue="2"> </count> </enabledWhen> </handler> <handler class="com.free.menu.actions.AngryCommand" commandId="mands.angryCommand"> </handler> </extension>創(chuàng)建 Action 并關(guān)聯(lián)到 Eclipse 的 Search 主菜單采用 Actions 方式在 Eclipse 的主菜單 Search 中添加創(chuàng)建菜單項(xiàng) Sm
43、ileAction。擴(kuò)展 org.eclipse.ui.actionSets 在 Eclipse 的主菜單 Search 中添加一個(gè)菜單項(xiàng) Smile Action。如下代碼清單 10 所示創(chuàng)建該 action 并添加到 search 主菜單,只有當(dāng)我們選擇至少一個(gè)對(duì)象時(shí)(設(shè)置 enablesFor 屬性為“+”),該菜單項(xiàng)才處于啟用狀態(tài)。清單 10. 通過(guò) Actions 方式創(chuàng)建菜單項(xiàng) <extension point="org.eclipse.ui.actionSets"> <actionSet id="com.free.menu.acti
44、onSet.MenuExample" label="Menu Example" visible="true"> <action class="com.free.menu.actions.SmileAction" enablesFor="+" icon="icons/searchres.gif" id="com.free.menu.actions.smileAction" label="Smile Action" menubarPath
45、="org.eclipse.search.menu/dialogGroup" style="push"> </action> </actionSet> </extension>pupupMenus 方式創(chuàng)建 Action 并關(guān)聯(lián)到 IResource 資源的上下文菜單擴(kuò)展 org.eclipse.ui.popupMenus 創(chuàng)建菜單“Menu Example”,該菜單包含一個(gè)菜單項(xiàng) HelloAction。當(dāng)我們?cè)?Eclipse 任何區(qū)域右擊 org.eclipse.core.resources.IResour
46、ce 資源時(shí)彈出的上下文菜單中會(huì)出現(xiàn)“Menu Example”菜單。如下代碼清單 11 為創(chuàng)建該上下文菜單的 xml 代碼。清單 11. popupMenus 方式創(chuàng)建上下文菜單 <extension point="org.eclipse.ui.popupMenus"> <objectContribution adaptable="true" id="com.free.menu.popupMenu" objectClass="org.eclipse.core.resources.IResource&quo
47、t;> <menu label="Menu Example" path="additions" id="com.free.menu.popupSubMenu"> <separator name="additions"> </separator> </menu> <action label="Hello Action" class="com.free.menu.popup.actions.HelloAction" me
48、nubarPath="com.free.menu.popupSubMenu/additions" enablesFor="1" id="com.free.menu.newAction"> </action> </objectContribution> </extension>pupupMenus 方式創(chuàng)建 Action 并關(guān)聯(lián)到 IResource 資源的上下文菜單擴(kuò)展 org.eclipse.ui.popupMenus 創(chuàng)建菜單項(xiàng) GreetAction 和 CryAction,當(dāng)我們右擊
49、Menu Example 視圖中的 TreeViewer 節(jié)點(diǎn)時(shí)彈出。如下代碼清單 12 所示擴(kuò)展 org.eclipse.ui.popupMenus 為 Menu Example 視圖創(chuàng)建 GreetAction 和 CryAction 上下文菜單項(xiàng)。使用 visiblity 的 objectState 屬性控制菜單項(xiàng)的可見(jiàn)狀態(tài),使用該屬性要求其選擇的對(duì)象實(shí)現(xiàn)了 org.eclipse.ui.IActionFilter 接口,具體可參見(jiàn) Person 類(lèi)的實(shí)現(xiàn)。清單 12. 擴(kuò)展 org.eclipse.ui.popupMenus 創(chuàng)建菜單 <extension point="
50、;org.eclipse.ui.popupMenus"> <objectContribution adaptable="false" id="com.free.menu.views.popupMenu" objectClass="com.free.menu.model.Person"> <action class="com.free.menu.actions.GreetAction" enablesFor="+" id="com.free.menu.a
51、ctions.greetAction" label="Greet Action" menubarPath="additions"> </action> <visibility> <objectState name="firstName" value="Dan"> </objectState> </visibility> </objectContribution> </extension> <extension
52、point="org.eclipse.ui.popupMenus"> <objectContribution adaptable="false" id="com.free.menu.views.popupMenu2" objectClass="com.free.menu.model.Person"> <action class="com.free.menu.actions.CryAction" enablesFor="+" id="com.f
53、ree.menu.actions.cryAction" label="Cry Action" menubarPath="additions"> <enablement> <objectState name="firstName" value="David"> </objectState> </enablement> </action> <visibility> <objectState name="lastName" value="Rubel"> </objectState> </visibility> </objectContribution> </extension>Menu Example 視圖的代碼實(shí)現(xiàn)類(lèi)如下代碼清單 13 所示為 Menu Example 視圖的代碼,該視圖中有一個(gè)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 抖音商戶(hù)直播投流ROI評(píng)估與優(yōu)化制度
- 全球生物制藥行業(yè)2025年創(chuàng)新藥研發(fā)管線(xiàn)與靶點(diǎn)深度報(bào)告
- 八大物流企業(yè)綠色物流實(shí)踐與行業(yè)規(guī)范制定報(bào)告
- 黑龍江中醫(yī)藥大學(xué)《藥用植物學(xué)實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 公眾參與機(jī)制在2025年環(huán)境影響評(píng)價(jià)中的實(shí)踐與反思報(bào)告
- 2025屆江蘇省無(wú)錫市青陽(yáng)初級(jí)中學(xué)七年級(jí)數(shù)學(xué)第一學(xué)期期末監(jiān)測(cè)試題含解析
- 安慶醫(yī)藥高等專(zhuān)科學(xué)?!夺t(yī)學(xué)微生物與臨床微生物檢驗(yàn)學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 內(nèi)蒙古自治區(qū)赤峰市翁牛特旗烏敦套海中學(xué)2024年九年級(jí)化學(xué)第一學(xué)期期末復(fù)習(xí)檢測(cè)試題含解析
- 2024-2025學(xué)年天津市河西區(qū)新華圣功學(xué)校九上化學(xué)期末復(fù)習(xí)檢測(cè)試題含解析
- 黑龍江幼兒師范高等專(zhuān)科學(xué)?!吨袊?guó)文化通論》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年6月22日四川省市直事業(yè)單位遴選筆試真題及答案解析
- 慶陽(yáng)市隴東學(xué)院招聘事業(yè)編制筆試真題2024
- 心理學(xué)考試題及答案
- 護(hù)理領(lǐng)域的職業(yè)發(fā)展與前景展望
- 2025上海濟(jì)光職業(yè)技術(shù)學(xué)院輔導(dǎo)員考試試題及答案
- 2024年江蘇三支一扶真題
- 主、被動(dòng)防護(hù)網(wǎng)施工方案-圖文
- 2025年初中語(yǔ)文文學(xué)常識(shí):???00題匯編
- 君易和文化課件
- 藥食同源106種25年4月更新
評(píng)論
0/150
提交評(píng)論