GEF框架分析之一

2021-08-29 15:01:03 字數 3097 閱讀 2424

首先我們來建立乙個基於

gef的瀏覽器(而不是編輯器),也就是說,它只能瀏覽乙個模型,而不能夠進行編輯。先關注於瀏覽而不是編輯,有助於理解

gef的一些核心的概念。

graphicalviewercreatecontrol()方法

在開始之前,最先要弄明白的是,乙個

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 如果想用資料庫的長久連線還有...