gef布局的一点感想

gef布局的一点感想

前言

这三天来,一直在为一个问题所困扰。

我做的项目是将emf和gef结合的一个典型实例。其实我接触这些东西也才4,5个月,两个Eclipse工具都很熟悉,但是并不能说是精通。

在项目制作的过程中,编辑器的布局问题并没有拿到桌面上来讨论。毕竟,功能没有实现,编辑器作的再漂亮也不起作用。

现在,所有的功能点全部按要求实现了,可是再看看编辑器,就会觉得很外行,呵呵。

尽管老大不在公司,但是我想他肯定支持我的这个想法:将界面作的professional一点。

于是,我浪费了3天时间来重新做布局。



搜索icon

项目组没有给我配备美工,所有的图片都是临时的,我就采用了一些qq表情图,所以编辑器很“可爱”。现在需要根据每个模型的实际含义来配备icon,于是利用google & baidu搜了一些图片下来。好在我还会点ps,那二十多个图标就算定了。


研究布局

这次的代码大改造,需要严重的感谢一个人:reload_cn。非常感谢他能耐心的听我不停的发牢骚,并给于正确的指导。这对后来的改造成功起决定性作用。尽管他将社区里的帅照改成了黑猩猩......

好,转入正题。目前的编辑器功能已经实现了,但是为什么要改布局呢?因为现在编辑器采用的是xyLayout,创建一个对象之后,将它的xywh保存在模型对象中,然后再refreshVisual的时候设置Figure的Bound。这么做的问题是,首先,没有很好的计算坐标,所以坐标有点出入(有的时候坐标出入大的难以接受),其次,本工具定义的主要是流程,所以编辑器里的“内容”很多,每创建一个对象都需要手工拖拽到合适的位置上。

在reload_cn的提示下,我研究了一下GEF的Flow例子。由于时间关系(元旦之后就会发布最终版本,要不加班,要不加快脚步干活),我直接就将flow里的GraphLayoutManager拿过来用了...

结果是,经常报些莫名其妙的错误。

所谓心急吃不了热豆腐。

继续在reload_cn的提示下,研究了他的sequnce diagram的例子。在这个例子中,他做了个很简单的布局处理。

从这里例子中,我领悟出了真谛:
      在EditPart中设置的Layout Policy其实主要处理的是创建对象等等request,并不处理真正的编辑器布局。又或者说它的布局是逻辑意义上的。真正处理布局,来让我们看到效果的,是Figure的布局。而这个正好是我常常忽略的。

Figure怎么布局??我一般用的就是xyLayout和ToolbarLayout。但是如果要作出漂亮的效果,这些还是不够的。八进制的blog中提到了draw2d的tree example。我看过了,然后研究了一下,觉得太简单了,不能符合本项目的需求。

回头再看看flow,觉得这个例子本身就是流程定义,并且跟我的项目在Figure上有很多共同点。。。

仍然心有余悸,毕竟用flow的代码作的所有尝试(用了1天的时间)全部失败了,而且还败的莫名其妙。


开始尝试

不能因为失败,所以放弃(但是可以有放弃的想法,呵呵)。我决定一点一点地来尝试。

首先,我替换了所有的icon,至少图标看起来已经舒服多了。

接着,根据flow中figure的做法,更新了项目中的所有Figure。运行一下看看,呵呵,至少图标很象了。

我很喜欢flow中自动计算Figure位置的功能和动态移动效果。怎么办?继续改装代码。

将GraphLayoutManager小心翼翼的搬了过来。没有效果。但是至少没有出错。

开始使用GraphLayoutManager来进行坐标计算。(这个过程漫长而痛苦,不停的报异常,不停的对比代码,不停的跟踪,不停的发牢骚....)

最后出的问题最有意思,假如编辑器根模型的Figure采用flow中的figure,那么编辑器中只显示连线。为什么呢?因为我的编辑器中使用的是viewer.setRootEditPart(new ScalableFreeformRootEditPart());而flow中用的是getGraphicalViewer().setRootEditPart(new ScalableRootEditPart());所以在我这边,figure采用FreeformLayer就no problem了。

最终得结果是改好了,一切都跟flow那么象

结果

1.GIF     2.GIF


结论

假如你和我一样,在项目制作后期修改编辑器的布局,这里有几个建议:

1 研究一下例子,从简单的开始,一直到难的,让理论知识根深蒂固。
2 作个小例子,或者将你已经作的小例子进行类似的改编,看看出什么问题,为什么出问题。
3 例子没做出来没关系,这些跟头栽在小例子上比栽在项目中让人欣慰的多。
4 先修改Figure。尽量接近你想要的效果。
5 引入布局,暂时不要使用它,只要他的流程走下来没有问题就成功了一半。
6 使用布局。会出现很多问题,但是很容易定位问题。调试吧。

暂时就这么多吧,刚刚的改动导致了编辑器中的删除功能抛异常,我得看看去

你可能感兴趣的:(gef布局的一点感想)