在Eclipse RCP中使用ResourceNavigator
Posted on 2007-06-28 00:30 nemo 閱讀(3585) 評(píng)論(12) 編輯 收藏 所屬分類: EclipseRCP/SWT/JFACEEclipse 的資源瀏覽器很強(qiáng)大,可以很方便的查看工作空間中可供適配的資源,并且提供了對(duì)排序、過(guò)濾等功能的支持。Eclipse的RCP項(xiàng)目組不贊成我們?cè)诟豢蛻舳藨?yīng)用程序中使用ResourceNavigator,原因是ResourceNavigator的實(shí)現(xiàn)代碼位于Eclipse IDE中,如果使用資源瀏覽器,生成的RCP產(chǎn)品將會(huì)增加二十多兆的空間,而且會(huì)增加許多我們的產(chǎn)品中并不使用的功能,很浪費(fèi)磁盤和系統(tǒng)資源。他們贊成我們根據(jù)需要,為應(yīng)用程序量身定做樹形瀏覽器視圖,但是,基于方便和對(duì)強(qiáng)大功能的追求,以及對(duì)Eclipse代碼優(yōu)良性的肯定,插件開發(fā)者們?nèi)匀幌M麑①Y源瀏覽器直接加入到我們的RCP程序中。為了滿足廣大Eclipse開發(fā)者強(qiáng)烈的要求,本文對(duì)在Eclipse RCP中使用ResourceNavigator的方法做較為全面的介紹。
同資源導(dǎo)航器相關(guān)的ID為:
ID: org.eclipse.ui.views.ResourceNavigator
CLASS: org.eclipse.ui.ide/org.eclipse.ui.views.navigator/ResourceNavigator.class
ICON: 位于org.eclipse.ui.ide工程目錄的icons文件夾中,名稱為fileNav_nav.gif。可通過(guò)解壓.jar文件獲得圖像文件。
1. 如果我們的RCP程序中的默認(rèn)透視圖中要使用導(dǎo)航器,可能需要在RCP插件(包含有Application.java文件的插件)的plugin.xml中加入這個(gè)視圖:

plugin.xml
1
<extension
2
point="org.eclipse.ui.views">
3
<view
4
class="org.eclipse.ui.views.navigator.ResourceNavigator"
5
icon="icons/filenav_nav.gif"
6
id="org.eclipse.ui.views.ResourceNavigator"
7
name="導(dǎo)航器">
8
</view>
9
</extension>
2. 如果我們需要在RCP程序中默認(rèn)顯示導(dǎo)航器,則需要在定義的透視圖(假設(shè)透視圖已經(jīng)定義)類中加入類似下面的代碼:

Perspective.java
1
IFolderLayout leftFolder = layout.createFolder("leftFolderLayout", //$NON-NLS-1$
2
IPageLayout.LEFT, 0.25f, editorArea);
3
leftFolder.addPlaceholder("org.eclipse.ui.views.ResourceNavigator"+":*");
4
leftFolder.addView("org.eclipse.ui.views.ResourceNavigator");
第1、2兩行創(chuàng)建一個(gè)IFolderLayout實(shí)例,表示在編輯器區(qū)域左側(cè)創(chuàng)建一個(gè)FolderLayout。
第3行為ResourceNavigator添加一個(gè)占位符,使用的是ResourceNavigator的ID,后面的“:*”表示還可以有更多的內(nèi)容,即可以同更多的視圖共享這個(gè)位置。
第4行將ResourceNavigator加入這個(gè)布局中,從而在應(yīng)用程序啟動(dòng),默認(rèn)透視圖打開時(shí),導(dǎo)航器出現(xiàn)在頁(yè)面的左側(cè)。
3. 導(dǎo)航器在RCP程序中無(wú)法顯示的問(wèn)題。
許多開發(fā)者在使用Navigator生成RCP程序時(shí)都遇到過(guò)這樣的錯(cuò)誤:

Log
1
Unable to create view: Plug-in "newPmbe.custom" was unable to instantiate class "org.eclipse.ui.views.navigator.ResourceNavigator".
這個(gè)問(wèn)題的具體描述我已經(jīng)在前面的博客中介紹了,它需要安裝兼容性插件同以前的系統(tǒng)兼容。在PDE環(huán)境下,打開plugin.xml,在“Dependencies”頁(yè)面中加入下面的插件:
org.eclipse.core.runtime.compatibility
上述所說(shuō)的問(wèn)題便解決了。
4. 工作空間的資源在導(dǎo)航器中無(wú)法顯示的問(wèn)題。
解決了第三個(gè)問(wèn)題后,導(dǎo)航器中的資源可以顯示了,但是其中的工程文件夾圖標(biāo)仍然無(wú)法顯示,只能光禿禿的顯示一個(gè)項(xiàng)目名,如下圖所示:

為了正確的顯示項(xiàng)目的圖標(biāo),我們需要在RCP插件的ApplicationWorkbenchAdvisor類中加入如下代碼:

ApplicationWorkbenchAdvisor
1
public void initialize(IWorkbenchConfigurer configurer)
2
{
3
configurer.declareImage(IDE.SharedImages.IMG_OBJ_PROJECT,
4
YOURPlugin.getImageDescriptor("icons/prj_obj.gif"), true);
5
super.initialize(configurer);
6
}
上面代碼的第4行中的路徑"icons/prj_obj.gif"為我們?yōu)楣こ涛募A提供的圖標(biāo)相對(duì)于RCP插件中的位置,YOURPlugin代表RCP插件中的插件類(或XXXActivator)
這樣我們便得到了我們希望的Navigaotor:

上面3-4行代碼也同時(shí)給我們提供了修改Eclipse Navigator中默認(rèn)圖標(biāo)的一種方式。Just Enjoy it!
其他的話:
Eclipse 3.2版本出臺(tái)后,Eclipse團(tuán)隊(duì)專門提供出了org.eclipse.ui.navigator插件,用來(lái)支持在ProjectExplorer的基礎(chǔ)上進(jìn)行的二次開發(fā)。而從GMF(Grapic Modeling Framework)2.0 M6開始,對(duì)自動(dòng)生成樹形瀏覽器視圖提供了支持,所用到的正是這個(gè)插件所提供的功能強(qiáng)大的 org.eclipse.ui.navigatorContent擴(kuò)展點(diǎn):http://wiki.eclipse.org/index.php/GMF_New_and_Noteworthy#2.0_M6,這使得我們?cè)趯?duì)資源定制的基礎(chǔ)上,可以對(duì)資源中的元素進(jìn)行定制,因而功能更為強(qiáng)大(不過(guò)這個(gè)擴(kuò)展點(diǎn)是我見過(guò)的最為復(fù)雜的擴(kuò)展點(diǎn)之一)。這使得我們對(duì)ResourceNavigator的要求有所降低。Anyway,直接使用Eclipse的ResourceNavigator可以為快速定制的原型系統(tǒng)提供基本的支持,這對(duì)開發(fā)者來(lái)說(shuō)還是非常有用的。
同資源導(dǎo)航器相關(guān)的ID為:

CLASS: org.eclipse.ui.ide/org.eclipse.ui.views.navigator/ResourceNavigator.class
ICON: 位于org.eclipse.ui.ide工程目錄的icons文件夾中,名稱為fileNav_nav.gif。可通過(guò)解壓.jar文件獲得圖像文件。
1. 如果我們的RCP程序中的默認(rèn)透視圖中要使用導(dǎo)航器,可能需要在RCP插件(包含有Application.java文件的插件)的plugin.xml中加入這個(gè)視圖:


1

2

3

4

5

6

7

8

9

2. 如果我們需要在RCP程序中默認(rèn)顯示導(dǎo)航器,則需要在定義的透視圖(假設(shè)透視圖已經(jīng)定義)類中加入類似下面的代碼:


1

2

3

4

第1、2兩行創(chuàng)建一個(gè)IFolderLayout實(shí)例,表示在編輯器區(qū)域左側(cè)創(chuàng)建一個(gè)FolderLayout。
第3行為ResourceNavigator添加一個(gè)占位符,使用的是ResourceNavigator的ID,后面的“:*”表示還可以有更多的內(nèi)容,即可以同更多的視圖共享這個(gè)位置。
第4行將ResourceNavigator加入這個(gè)布局中,從而在應(yīng)用程序啟動(dòng),默認(rèn)透視圖打開時(shí),導(dǎo)航器出現(xiàn)在頁(yè)面的左側(cè)。
3. 導(dǎo)航器在RCP程序中無(wú)法顯示的問(wèn)題。
許多開發(fā)者在使用Navigator生成RCP程序時(shí)都遇到過(guò)這樣的錯(cuò)誤:


1

這個(gè)問(wèn)題的具體描述我已經(jīng)在前面的博客中介紹了,它需要安裝兼容性插件同以前的系統(tǒng)兼容。在PDE環(huán)境下,打開plugin.xml,在“Dependencies”頁(yè)面中加入下面的插件:

上述所說(shuō)的問(wèn)題便解決了。
4. 工作空間的資源在導(dǎo)航器中無(wú)法顯示的問(wèn)題。
解決了第三個(gè)問(wèn)題后,導(dǎo)航器中的資源可以顯示了,但是其中的工程文件夾圖標(biāo)仍然無(wú)法顯示,只能光禿禿的顯示一個(gè)項(xiàng)目名,如下圖所示:
為了正確的顯示項(xiàng)目的圖標(biāo),我們需要在RCP插件的ApplicationWorkbenchAdvisor類中加入如下代碼:


1

2



3

4

5

6

上面代碼的第4行中的路徑"icons/prj_obj.gif"為我們?yōu)楣こ涛募A提供的圖標(biāo)相對(duì)于RCP插件中的位置,YOURPlugin代表RCP插件中的插件類(或XXXActivator)
這樣我們便得到了我們希望的Navigaotor:

上面3-4行代碼也同時(shí)給我們提供了修改Eclipse Navigator中默認(rèn)圖標(biāo)的一種方式。Just Enjoy it!
其他的話:
Eclipse 3.2版本出臺(tái)后,Eclipse團(tuán)隊(duì)專門提供出了org.eclipse.ui.navigator插件,用來(lái)支持在ProjectExplorer的基礎(chǔ)上進(jìn)行的二次開發(fā)。而從GMF(Grapic Modeling Framework)2.0 M6開始,對(duì)自動(dòng)生成樹形瀏覽器視圖提供了支持,所用到的正是這個(gè)插件所提供的功能強(qiáng)大的 org.eclipse.ui.navigatorContent擴(kuò)展點(diǎn):http://wiki.eclipse.org/index.php/GMF_New_and_Noteworthy#2.0_M6,這使得我們?cè)趯?duì)資源定制的基礎(chǔ)上,可以對(duì)資源中的元素進(jìn)行定制,因而功能更為強(qiáng)大(不過(guò)這個(gè)擴(kuò)展點(diǎn)是我見過(guò)的最為復(fù)雜的擴(kuò)展點(diǎn)之一)。這使得我們對(duì)ResourceNavigator的要求有所降低。Anyway,直接使用Eclipse的ResourceNavigator可以為快速定制的原型系統(tǒng)提供基本的支持,這對(duì)開發(fā)者來(lái)說(shuō)還是非常有用的。