在Eclipse RCP中使用ResourceNavigator
Posted on 2007-06-28 00:30 nemo 閱讀(3584) 評論(12) 編輯 收藏 所屬分類: EclipseRCP/SWT/JFACEEclipse 的資源瀏覽器很強大,可以很方便的查看工作空間中可供適配的資源,并且提供了對排序、過濾等功能的支持。Eclipse的RCP項目組不贊成我們在富客戶端應用程序中使用ResourceNavigator,原因是ResourceNavigator的實現代碼位于Eclipse IDE中,如果使用資源瀏覽器,生成的RCP產品將會增加二十多兆的空間,而且會增加許多我們的產品中并不使用的功能,很浪費磁盤和系統資源。他們贊成我們根據需要,為應用程序量身定做樹形瀏覽器視圖,但是,基于方便和對強大功能的追求,以及對Eclipse代碼優良性的肯定,插件開發者們仍然希望將資源瀏覽器直接加入到我們的RCP程序中。為了滿足廣大Eclipse開發者強烈的要求,本文對在Eclipse RCP中使用ResourceNavigator的方法做較為全面的介紹。
同資源導航器相關的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程序中的默認透視圖中要使用導航器,可能需要在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="導航器">
8
</view>
9
</extension>
2. 如果我們需要在RCP程序中默認顯示導航器,則需要在定義的透視圖(假設透視圖已經定義)類中加入類似下面的代碼:

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

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

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

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


1

2

3

4

5

6

7

8

9

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


1

2

3

4

第1、2兩行創建一個IFolderLayout實例,表示在編輯器區域左側創建一個FolderLayout。
第3行為ResourceNavigator添加一個占位符,使用的是ResourceNavigator的ID,后面的“:*”表示還可以有更多的內容,即可以同更多的視圖共享這個位置。
第4行將ResourceNavigator加入這個布局中,從而在應用程序啟動,默認透視圖打開時,導航器出現在頁面的左側。
3. 導航器在RCP程序中無法顯示的問題。
許多開發者在使用Navigator生成RCP程序時都遇到過這樣的錯誤:


1

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

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


1

2



3

4

5

6

上面代碼的第4行中的路徑"icons/prj_obj.gif"為我們為工程文件夾提供的圖標相對于RCP插件中的位置,YOURPlugin代表RCP插件中的插件類(或XXXActivator)
這樣我們便得到了我們希望的Navigaotor:

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