首先我們來建立乙個基於
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.
設定editdomain4.
呼叫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
以進行顯示的。
SPI子系統分析之一 框架
核心版本 3.9.5 spi子系統概述 乙個spi主控制器對應一條spi匯流排,當然在系統中有唯一的匯流排編號.spi匯流排上有兩類裝置 主控端是spi匯流排的控制者,通過使用spi協議主動發起spi匯流排上的會話.而受控端則被動接受spi主控端的指令,並作出響應的響應.linux目前只支援spi主...
分析函式之一
1.row number 的使用原表資訊 sql break on deptno skip 1 為效果更明顯,把不同部門的資料隔段顯示。sql select deptno,ename,sal 2from emp 3order by deptno,sal desc deptno ename sal 1...
簡單php mysql框架之一 1
鏈結mysql資料庫,主機名,使用者名稱,賬號,密碼等資訊!db new pdo mysql host localhost dbname test root db new pdo mysql host localhost dbname m58a0811 root aw3 如果想用資料庫的長久連線還有...