[GEF原理]個人理解


前言:學了兩個多星期的GEF,GEF這款圖形編輯器開發框架當然可以基於RCP或者eclipse插件開發,這裏談的是插件開發,如有錯誤,請大家在評論指出我會努力更改。


      我所理解的GEF框架可以分爲靜態創建圖形和動態創建圖形,先說靜態創建圖形原理

靜態:首先在GraphicalViewer的setContents這個方法中傳入一個模型,框架爲根據Model轉爲Editpart(所以這裏就是需要爲框架配置工廠的原因),將editpart添加爲rooteditpart的兒子,得到editpart的figure設置到rooteditpart的figure上(所以這裏就是需要重寫editpart的createfigure方法的原因),將model與editpart,figure與editpart,映射成hashmap存入框架。下次方便查找。調用refreshVisual和refreshChildren。refreshChildren中有getModelChildren方法會被調用。得到該editpart中有多少children model 根據model得到editpart然後,繼續遞歸調用addChild()。從而達到創建子editpart(註冊,刷新VIEW,刷新連接),一句話就是根據第一個editpart的childrenmodel找到第一個editpart的兒子們,給兒子們進行刷新view,註冊Map,等工作。從而實現圖形上的展示。

動態:鼠標點擊某個swt控件根據lws轉化爲draw2d事件傳到graphicalviewer傳到editdomain傳到tool轉換爲request,這個request就需要程序員進行捕獲調用了,可以根據type在editpart的performRequest方法中捕獲,或者安裝編輯策略進行捕獲。最終轉化爲command操作model,model改變。通知editpart,調用各種refresh從而刷新view(這就解釋了爲什麼要對Model實現監聽,完全是爲了刷新view)。




提一點,爲何要在連線model中設置src,target,因爲我會爲src,target中的list做綁定,而src,target這兩個model會被對應的editpart中的getsourceconnection,gettargetconnection調用獲取他們的list,abstractgrahpicaleditpart又會獲取list拿出連線model,與連線model的Editpartl建立聯繫,調用refresh方法進行刷新view.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章