在Eclipse RCP中使用ResourceNavigator
Posted on 2007-06-28 00:30 nemo 閱讀(3593) 評論(12) 編輯 收藏 所屬分類: EclipseRCP/SWT/JFACEEclipse 的資源瀏覽器很強大,可以很方便的查看工作空間中可供適配的資源,并且提供了對排序、過濾等功能的支持。Eclipse的RCP項目組不贊成我們在富客戶端應(yīng)用程序中使用ResourceNavigator,原因是ResourceNavigator的實現(xiàn)代碼位于Eclipse IDE中,如果使用資源瀏覽器,生成的RCP產(chǎn)品將會增加二十多兆的空間,而且會增加許多我們的產(chǎn)品中并不使用的功能,很浪費磁盤和系統(tǒng)資源。他們贊成我們根據(jù)需要,為應(yīng)用程序量身定做樹形瀏覽器視圖,但是,基于方便和對強大功能的追求,以及對Eclipse代碼優(yōu)良性的肯定,插件開發(fā)者們?nèi)匀幌M麑①Y源瀏覽器直接加入到我們的RCP程序中。為了滿足廣大Eclipse開發(fā)者強烈的要求,本文對在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。可通過解壓.jar文件獲得圖像文件。
1. 如果我們的RCP程序中的默認(rèn)透視圖中要使用導(dǎo)航器,可能需要在RCP插件(包含有Application.java文件的插件)的plugin.xml中加入這個視圖:

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

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

為了正確的顯示項目的圖標(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)相對于RCP插件中的位置,YOURPlugin代表RCP插件中的插件類(或XXXActivator)
這樣我們便得到了我們希望的Navigaotor:

上面3-4行代碼也同時給我們提供了修改Eclipse Navigator中默認(rèn)圖標(biāo)的一種方式。Just Enjoy it!
其他的話:
Eclipse 3.2版本出臺后,Eclipse團(tuán)隊專門提供出了org.eclipse.ui.navigator插件,用來支持在ProjectExplorer的基礎(chǔ)上進(jìn)行的二次開發(fā)。而從GMF(Grapic Modeling Framework)2.0 M6開始,對自動生成樹形瀏覽器視圖提供了支持,所用到的正是這個插件所提供的功能強大的 org.eclipse.ui.navigatorContent擴展點:http://wiki.eclipse.org/index.php/GMF_New_and_Noteworthy#2.0_M6,這使得我們在對資源定制的基礎(chǔ)上,可以對資源中的元素進(jìn)行定制,因而功能更為強大(不過這個擴展點是我見過的最為復(fù)雜的擴展點之一)。這使得我們對ResourceNavigator的要求有所降低。Anyway,直接使用Eclipse的ResourceNavigator可以為快速定制的原型系統(tǒng)提供基本的支持,這對開發(fā)者來說還是非常有用的。
同資源導(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。可通過解壓.jar文件獲得圖像文件。
1. 如果我們的RCP程序中的默認(rèn)透視圖中要使用導(dǎo)航器,可能需要在RCP插件(包含有Application.java文件的插件)的plugin.xml中加入這個視圖:


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


1

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

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


1

2



3

4

5

6

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

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