[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.

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