構(gòu)建基于通用導(dǎo)航器架構(gòu)(CNF)的視圖 第一部分:定義ViewPart
Posted on 2008-07-15 11:01 鬼谷子 閱讀(1374) 評論(0) 編輯 收藏 所屬分類: Eclipse轉(zhuǎn)自:http://blog.csdn.net/windy444/archive/2007/12/30/2005315.aspx
由windy444翻譯,轉(zhuǎn)載請注明
原文名:Building a Common Navigator Framework (CNF) Viewer Part I: Defining the View Part ,作者: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.
關(guān)于擴(kuò)展點和API的特定文檔,可以在Eclipse的平臺幫助((Help > Help Content)中找到,Platform Plug-in Developer's Guide >Reference > API Reference | Extension Points Reference,涉及的擴(kuò)展點有org.eclipse.ui.navigator.viewer,org.eclipse.ui.navigator.navigatorContent。相關(guān)的API包為org.eclipse.ui.navigator。若你想知道這篇文章中提到的東西的更多細(xì)節(jié),這些東西可以作為參考。
好了,哪里開始呢?首先,我們將對包含該視圖的插件作一些配置,把org.eclipse.ui.navigator添加到依賴(dependencies)中。然后,我們用org.eclipse.ui.views擴(kuò)展點來定義一個view part,并把org.eclipse.ui.navigator.CommonNavigator類作為view part的實現(xiàn)類。這個類將為我們的視圖提供一些基礎(chǔ)功能。然后,我們定義org.eclipse.ui.navigator.viewer擴(kuò)展點,把視圖配置成通用導(dǎo)航器(Common Navigator)。最后,能夠通過定義org.eclipse.ui.navigator.navigatorContent擴(kuò)展點以及綁定(org.eclipse.ui.navigator.viewer/viewerContentBinding)來關(guān)聯(lián)擴(kuò)展點和視圖。
你不僅可以通過org.eclipse.ui.navigator.CommonNavigator,把該架構(gòu)用于導(dǎo)航器,你可以通過org.eclipse.ui.navigator.INavigatorContentService把該架構(gòu)用于從對話框到編輯器的任何地方,或者定義你自己的視圖和view part。但在這里,我們將只關(guān)注于基本功能。
基本設(shè)置
通用導(dǎo)航器架構(gòu)是Eclipse 3.2的一個新特性,因此,你至少需要安裝Eclipse 3.2。(譯者注:下面一些是開發(fā)過插件的人都知道的事情,此處略過)
定義View Part
當(dāng)要定義一個具有通用導(dǎo)航器功能的視圖,你必須定義一個實際的view part,這個是你視圖的容器。
(譯者注:略去一段無關(guān)緊要的,插件開發(fā)初學(xué)者可以去參考基本view的開發(fā),定義完成后的plugin文件如下:)
定義視圖配置
一旦定義好了view part,我們將通過org.eclipse.ui.navigator.viewer對我們的視圖作一些配置擴(kuò)展,這些擴(kuò)展將告訴架構(gòu)一些基礎(chǔ)的東西,例如,通用導(dǎo)航器的view part是哪個,彈出菜單的結(jié)構(gòu)是怎樣的,是否要定義object contributions,以及一些會影響視圖缺省行為的屬性。
(譯者注:略過定義plugin.xml文件過程,后面會附上該文件)
對于彈出菜單的一些評論。通用導(dǎo)航器架構(gòu)提供兩種方式讓視圖來定制菜單。第一種方式是通過指定org.eclipse.ui.navigator.viewer擴(kuò)展點下viewer的popupMenuId,來接受缺省的分隔符,以及菜單的group mark id。缺省值被記錄在org.eclipse.ui.navigator.viewer擴(kuò)展點下,為了方便,被列在了下面。
"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"
另一種方式,你可以選擇不去指定popupMenuId,作為替換,你可以指定<popupmenu />作為<viewer />元素的子元素。在這里,你可以定義自己的分隔符以及group mark id(能夠由后面的用戶來增加菜單)。如果你期望綁定平臺(Resource, Javatm)提供內(nèi)容擴(kuò)展的內(nèi)容(content)或者操作(Action),推薦您使用缺省分組(上面列出的)。
對于選項(option)的一些評論。<viewer />元素下的< options />元素能夠允許指定基于字符串的name=value對。這里有一些選項被基礎(chǔ)架構(gòu)所使用(在org.eclipse.ui.navigator.viewer擴(kuò)展點文檔的例子部分有記錄),但你自己的視圖或擴(kuò)展點也可以使用這種機(jī)制來提供額外的擴(kuò)展。請參考o(jì)rg.eclipse.ui.navigator.INavigatorViewerDescriptor中讀取<viewer />元素中屬性的API。你能通過通用導(dǎo)航器視圖的org.eclipse.ui.navigator.INavigatorContentService得到視圖描述符。
定義viewerId后的plugin文件:
定義好視圖后,我們需要添加內(nèi)容擴(kuò)展,并綁定到視圖上。我將在下一篇文章中給出一些更具體的信息。作為示例,我們簡單的把缺省的資源內(nèi)容(由org.eclipse.ui.navigator.resources插件定義)綁定到視圖上。
(譯者注:略過一些基本操作,定義完后的plugin文件如下:)
你現(xiàn)在可以啟動工作臺了(Run... > New Eclipse Application),這時能看到我們的視圖。但我們還未給視圖綁定操作,所以,你仍然要通過在資源導(dǎo)航器或包瀏覽器中創(chuàng)建工程,才能在我們的視圖中出現(xiàn)工程。后面,我們會增加資源操作和過濾器,但現(xiàn)在,讓我們看看該視圖擁有的缺省行為。目前有折疊所有按鈕(Collapse All),Link with Editor按鈕,過濾器(Filters)按鈕(以及一個"Available Filters"標(biāo)簽),和一個擴(kuò)展標(biāo)簽("Available Content")。
要綁定資源過濾器,我們需要在</includes>元素下增加另一個contentExtension元素,指定"org.eclipse.ui.navigator.resources.filters.*"為標(biāo)識符。這將會選取org.eclipse.ui.navigator.resources定義的所有的過濾器。當(dāng)然,你可以參考o(jì)rg.eclipse.ui.navigator.resources的plugin文件,選取你自己想要的過濾器的標(biāo)示符。
再一次選擇Run...,確認(rèn)在過濾器對話框中出現(xiàn)了一些資源過濾器。
接下來,我們將綁定默認(rèn)的資源操作。要綁定操作,需要在我們擴(kuò)展點的根下面,增加一個viewerActionBinding元素。(譯者注:略過一些操作,定義完后的plugin文件如下:)
現(xiàn)在,啟動工作臺后,在默認(rèn)的空視圖中(在視圖中右鍵空的地方),你將看到New, Import, Export, 和 Refresh操作。當(dāng)你選中視圖中的一個元素時,出現(xiàn)的菜單類似與資源導(dǎo)航器中的。
(譯者注:再次略過一段操作,不影響對文章的理解)
定義過濾器
今天我們將做的最后一件事,是用Eclipse核心表達(dá)式(Core Expressions)為我們的視圖定義一個過濾器。核心表達(dá)式架構(gòu)的文檔在org.eclipse.core.expressions插件中。我們將用org.eclipse.core.resources定義的屬性測試者(property testers)來測試特定的工程性質(zhì)(Nature),然后隱藏所有沒有該性質(zhì)的工程。
(譯者注:略過一些操作,定義完后的plugin文件如下:)
你也可以在擴(kuò)展點中設(shè)置activeByDefault屬性,來決定該過濾器是否在缺省配置中被激活。
最后,我們需要為我們的視圖定義contentExtension,來作為viewerContentBinding的一部分。確保使用了我們新建的過濾器的id,或者一個通用的樣式(如:"org.eclipse.ui.examples.navigator.filters.*")來綁定所有我們未來定義的匹配樣式的過濾器。最后的plug.xml如下:
現(xiàn)在,最后一次啟動工作臺。創(chuàng)建一個新的簡單工程和Java工程,當(dāng)“Hide non-Java Projects”被激活時,簡單工程會被隱藏。
(譯者注:第一部分終于翻譯完了)