Eclipse 3.2的What's new 正式推出了“The Eclipse Tabbed Properties View”,这个东西以前就是IBM的一个内部项目,最近由于WTP的缘故给开放了出来。有的时候不得不佩服IBM的创意和能力,人多就是力量大。3.2推出了很多新的Feature,都颇有亮点。不知道IBM为这些新的Feature投入了多少人力物力。
Eclipse Tabbed Properties View实际上是对传统的PropertySheet的一个替换,在Eclipse3.2的new feature中,可以看到一个共同点,那就是界面变得花梢了,Eclipse Tabbed Properties View也是如此。Tab标签和UI-Form的结合,界面显得更加清爽。所有的Property都可以自定义编辑界面,重用性也得到了提高,另外还有完美的MVC架构。
实际上Eclipse Tabbed Properties View的代码我并不会感到陌生,我手头上的项目关于Property上的架构和它基本一致,都是Element,setInput,createContent,refresh这一套逻辑。不过这段逻辑不是我写的,不知道是是谁从IBM抄来的,当时抄的是GEF的架构,说是为了保持架构的一致,实际上非常冗余,挖了无数的坑。现在这个Tabbed Properties View走的还是一样的套路,由此可见IBM内部项目的架构应当非常一致。
Eclipse官方提供了一篇关于Tabbed Properties View的文章:
http://www.eclipse.org/articles/ Article-Tabbed-Properties/tabbed_properties_view.html
,里面的介绍还算详细。我这儿只说一些它没有提到的东西。
Tabbed Properties View 的Tab以及Section都定义在Plugin.xml中,这里包含了一个依赖关系,Section依赖于input object,而Tab依赖于Section,于是当我们选中一个element的时候,系统会判断哪些Section的input object和这个element类型一致。这些Section将会被Property Page加载,每个Section都对应一个Tab,这个Tab会在Section创建之前先创建出来。当Section创建完毕之后,会进行setInput操作,将Model传给Section,最后在refresh的时候,给Section赋值。
另外一点,一个Section可以对应多个input,这样不同的input object可以采用同一个Section,提高了系统的可重用性。
不足的地方是Section的enablefor属性过于简单,对上下文支持不够,只能把上下文写在Section的逻辑里面了。