GEF架構分析之一

來源:互聯網
上載者:User

 

首先我們來建立一個基於
GEF
的瀏覽器(而不是編輯器),也就是說,它只能瀏覽一個模型,而不能夠進行編輯。先關注於瀏覽而不是編輯,有助於理解
GEF
的一些核心的概念。

 



GraphicalViewer







createControl



()


方法



在開始之前,最先要弄明白的是,一個
GEF
的圖如何能夠顯示在由

ViewPart



createPartControl

(Component parent)
中提供的這個
parent
控制項上。這是通過
GEF


GraphicalViewer

(準確的說應該是

EditPartViewer



GraphicalViewer



EditPartViewer

的子介面,

EditPartViewer

的名字可能更容易理解一些:是為

EditPart

建立一個
Viewer
進行顯示)來進行的。

GraphicalViewer

可以將其自身適配到任何一個
SWT Control
上。它的

createControl

()
方法接受一個
SWT Control

來作

為適配的對象,將
GEF
所產生的
Figure
顯示在這個
SWT Control
之上。(在內部實現上,

GraphicalViewer

使用
Draw2D


LightweightSystem

來做這個事情,將
Draw2d

Figure
對象繪製在
SWT

Control
上)

 

在弄明白了這一點之後,我們就會知道,實際上是將
GEF
放在

ViewPart

中還是放在

EditorPart

對於
GEF
而言是沒有本質的區別的,甚至將
GEF
放在任何的
SWT Composite
上都是可以的。不過
GEF
架構中提供了對建立

EditorPart

的預設實現。而如果要在
Editor
之外使用
GEF
的話,需要額外的對

GraphicalViewer

做一些設定。

 

下面的這個圖,給出了
GEF
中的幾個主要關係,下面會有對這個圖的解釋。

 








setContent





()





GraphicalViewer

的思想,類似於

JFace

中所實現的
Viewer
思想:要顯示一個控制項,需要輸入的是一個模型對象,要顯示的內容根據輸入的模型對象來進行的。因此,

GraphicalViewer

同所有

JFace

Viewer
一樣有一個方法,叫做

setContent

(Object o)
來接受一個模型對象,而對這個模型對象如何進行處理並顯示,就是
GEF
的工作了。

 

在建立一個


GraphicalViewer


之後,要使
GEF
能夠運轉起來,還需要做如下幾件事情:


1.      


設定一個



RootEditPart




RootEditPart

的是使整個
GEF
架構運行起來的關鍵之一。

RootEditPart

並不對應於任何的模型對象,它將從

setContents

()
方法中接收到的模型對象進行轉換,並添加到整個的

EditPart

體系中去,具體的添加過程後面會有詳細討論。


2.      


設定其



EditPartFactory


:負責從模型到

EditPart

的轉換。一般來說一個模型對象對應於一個

EditPart

。這個類的


3.      


設定



EditDomain


:用來接收事件並選擇恰當的事件處理函數進行處理,因為我們尚不需要進行編輯,因此這一個可以暫時略過。


4.      


調用



setContents



()


方法

:為其設定要顯示的內容。

 



GraphicalViewer

所顯示的內容,肯定是一個
Draw2d
中的

IFigure

對象。而如何從一個模型對象到一個
Figure
對象呢?這中間的聯絡就是通過

EditPart

來完成的。
GEF
使用的是
MVC
模式,
Model
部分可以使任意的模型對象;
View
部分就是
Draw2d


IFigure

對象,聯絡
Model

View

Controller
,在
GEF
中稱為

EditPart

。簡單的說,
GEF
中的

EditPart

,負責將模型轉換為

IFigure

的顯示,它從模型中讀取資訊,產生
Figure
;另一方面,

EditPart

負責從
View
接收事件,並將這些事件轉化為對模型的修改。在這一部分中,我們暫時只關注於第一個方面:

EditPart

是如何將一個模型轉換為
Figure
以進行顯示的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.