很久很久以前

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            34 隨筆 :: 4 文章 :: 17 評論 :: 0 Trackbacks

          ?????? Tabbed Property是eclipse3.2中新加入一個(gè)view,可以使屬性編輯器的功能近乎無限的擴(kuò)大。這里說明一些Tabbed Property的使用方法。Tabbed Property中分成三個(gè)部分,Contributer,Tabs,Sections,一個(gè)Contributor包含若干個(gè)Tabs,一個(gè)Tabs又可以包含若干個(gè)sections。下面我們來分別進(jìn)行描述。
          ????? 1。Contributor 這需要擴(kuò)展org.eclipse.ui.views.properties.tabbed.PropertyContributor擴(kuò)展點(diǎn),定義時(shí),最重要的是定義contributId,這個(gè)id必須是全局唯一的,這樣在加載屬性頁時(shí),才能找到這個(gè)我們定義的屬性頁,一般地,我們都將對應(yīng)于這個(gè)屬性頁的workbenchpart的id作為本contributor的id,這樣我們在代碼中可以不硬編碼本id字符串,而使用getSite().getId()就可以得到這個(gè)id了(當(dāng)然,這樣定義id不是必須的)。一個(gè)property view可以被多個(gè)workbench part共享,但 一個(gè)workbench part只能有一個(gè)property view,這個(gè)workbench part需要實(shí)現(xiàn)ITabbedPropertySheetPageContributor?接口,這個(gè)接口只有一個(gè)方法,要求返回本part對應(yīng)的tabbed property Contributor id,一般只要return getSite().getId();
          ?? contributor有如下幾個(gè)attribute:
          ???1)typeMapper,這個(gè)類需要實(shí)現(xiàn)org.eclipse.ui.views.properties.tabbed.ITypeMapper,主要是實(shí)現(xiàn)類型的映射,因?yàn)槲覀冞x擇的元素并不一定是實(shí)現(xiàn)IPropertySource的元素(即能夠給property view提供內(nèi)容的元素),比如在GEF中,我們選擇的finger實(shí)際上是選擇了對應(yīng)的EditPart,而實(shí)際上實(shí)現(xiàn)了IPropertySource一般的是model部分的元素,所以這時(shí)候我們要將Editpart映射到對應(yīng)的model元素。
          ???2)labelProvider,需要一個(gè)實(shí)現(xiàn)org.eclipse.jface.viewers.ILabelProvider的類,主要是在各個(gè)tabs的最上面顯示文字和圖片。
          ???3)propertyCategory,用于聚合多個(gè)tabs,注意至少要定義一個(gè)category,來聚合tabs,否則,可能會顯示property失敗。

          ???2。Tabs,這個(gè)需要擴(kuò)展org.eclipse.ui.views.properties.tabbed.propertyTabs擴(kuò)展點(diǎn),其中contributorId就是與之相關(guān)聯(lián)的Contributor的id,然后我們可以定義多個(gè)tab,這些tab的屬性如下:
          ???1)label,用于顯示在property view的tab bar上的字
          ???2)category,填入的就是在Contributor擴(kuò)展點(diǎn)中定義的那些category,用于聚合tabs
          ???3)id,本tab的唯一標(biāo)識
          ???4)afterTab,用于tab之間的排序,如果這是第一個(gè)tab,則沒有afterTab,afterTab指的是在本tab之前的那個(gè)tab,并且afterTab描述的是在同一個(gè)category中的tabs,不同category之間的順序是按照在contributor中定義category的順序來定義的。
          ???5)indented,如果為ture,則各個(gè)tabs是有縮進(jìn)的
          ???6)image,本tab的圖片

          ???3。section ,需要擴(kuò)展 org.eclipse.ui.views.properties.tabbed.PropertySections擴(kuò)展點(diǎn),它的contributionId就是本section所在的Contribution的id,針對每個(gè)tab,我們可以定義多個(gè)section,每個(gè)section的attribut描述如下:
          ???1)id,本secation的唯一標(biāo)識
          ???2)tab,本section所屬tab的標(biāo)識
          ???3)class,實(shí)現(xiàn)了org.eclipse.ui.views.properties.tabbed.AbstractPropertySection抽象類的類,用于描述這個(gè)section的控件和布局。
          ???4)aftersection和上面的aftertab差不多,描述的是同一個(gè)tab中的section的順序,注意afterserction描述的是本section之前的section的id
          ???5)filter:一個(gè)實(shí)現(xiàn)org.eclipse.jface.viewers.IFilter接口的過濾器,對選中元素進(jìn)行過濾。
          ???6)enableFor:一個(gè)用于只是選擇數(shù)目的值,必須要符合這個(gè)舒服才能使能這個(gè)section。如果不符合,則這個(gè)section就被過濾了,如果省略本值,則section的使能器就不會工作了。這是一個(gè)自然數(shù),比如,當(dāng)enableFor=1時(shí),僅僅只有一個(gè)元素被選擇的時(shí)候,本section才會被使能。

          some notes:
          ??? 上面說過實(shí)現(xiàn)ITabbedPropertySheetPageContributor接口的workbench part除了要實(shí)現(xiàn)getContributeId方法外,還需要重載getAdapter方法,因?yàn)閑clipse的默認(rèn)加載的property veiw時(shí)原來的那個(gè)view,為了使tabbed property view能夠加載,我們就需要重載getAdapter方法,返回一個(gè)TabbedPropertySheetPage對象。

          ??? 在實(shí)現(xiàn)section class的時(shí)候需要注意,createcontrol時(shí)首先應(yīng)該先創(chuàng)建一個(gè)composite,一般是 Composite composite = getWidgetFactory().createFlatFormComposite(parent); 然后各個(gè)控件在這個(gè)composite上創(chuàng)建。


          posted on 2006-09-17 22:24 Long Long Ago 閱讀(2881) 評論(1)  編輯  收藏 所屬分類: Eclipse

          評論

          # re: eclipse的新功能——tabbed property 的使用 2008-05-15 08:44 veles
          您好,請教一下您如何才能讓typemapper返回一個(gè)model元素呢?我知道下列語句能得到相應(yīng)的模型元素。
          EditPart actor_part = (EditPart)((IStructuredSelection) object).getFirstElement();
          eObject = (EObject) ((org.eclipse.gmf.runtime.notation.View) actor_part.getModel()).getElement();
          如何返回這個(gè)值呢?這個(gè)class好像只能返回一個(gè)class值啊?
          ps:我java不是很好 :)
            回復(fù)  更多評論
            

          主站蜘蛛池模板: 康定县| 永德县| 辉县市| 沭阳县| 浦城县| 朝阳区| 信阳市| 赤城县| 仁怀市| 邢台市| 扶绥县| 安国市| 蒙阴县| 仙桃市| 香港| 永兴县| 志丹县| 新建县| 涟源市| 普安县| 合江县| 永胜县| 云安县| 通江县| 泰宁县| 诸暨市| 稷山县| 油尖旺区| 太仆寺旗| 乌兰县| 新余市| 西乌珠穆沁旗| 肃宁县| 红原县| 邵东县| 宁安市| 祥云县| 滦平县| 湖口县| 沂水县| 达日县|