Feeling

    三人行,必有我师焉

   ::  :: 新随笔 :: 联系 ::  :: 管理 ::
  85 随笔 :: 0 文章 :: 392 评论 :: 0 Trackbacks
做Java UI的人应该都很熟悉Look and Feel,Swing拥有的这个功能的确是相对于SWT的一个巨大优势。不过SWT的GC也可以画出自己的UI,前提是这个控件是Custom的,而不是系统级的。Eclipse Presentation 就是对eclipse本身UI提供的一个扩展。本来我还对这个扩展很友好的,不过现在觉得真是一锅粥里掉了个老鼠屎,完全变了味道。

由于闲来无视,把一个1年半前一个德国人写的Eclipse VS L&F Plugin down了下来,无奈bug太多,用户体验也和我个人感觉不一致,索性就把代码check out 出来,作了一些本地修改。不过让我吐血的地方就是,如果我从eclipse default L&F 切换到这个L&F,就问题一堆,从其它的L&F切换就没有问题。Debug了半天,毫无进展,只是发现很多地方都是Null Exception。于是把Eclipse 2.2 L&F的代码翻了出来,经过仔细对照,还是没有找到解决的方案,我就感觉怪怪的,也不知道哪儿出了问题,觉得大概是自己没有把Presentation的代码吃透的原因。于是又回头开始一行行的从有问题的代码处开始Debug,看看我的代码和2.2L&F的代码在运行时到底有什么区别,终于功夫不负有心人,我发现这个代码片断:
    /**
     * Sets the minimized state for this stack. The part may call this method to
     * minimize or restore itself. The minimized state only affects the view
     * when unzoomed.
     *
     * This implementation is specific to the 3.3 presentation's
     * min/max story; otherwise it just forwards the call.
     
*/

    
public void setMinimized(boolean minimized) {
        
// 'Smart' minimize; move the stack to the trim

        Perspective persp = getPage().getActivePerspective();
        
if (Perspective.useNewMinMax(persp)) 
{
原来3.3的L&F做了专门处理,而我的代码和3.3是一致的,和 2.2L&F是不一致的,不过我找了半天,也没有在2.2L&F的代码里找出异样之处,晕的不行。唯一的线索就是
boolean useNewMinMax = preferenceStore.getBoolean(IWorkbenchPreferenceConstants.ENABLE_NEW_MIN_MAX);

可恶的是,IWorkbenchPreferenceConstants.ENABLE_NEW_MIN_MAX 这个静态常量是无法在项目里找到eclipse自身的引用。2.2L&F plugin里也没有,该死的eclipse肯定是写死在代码里了。于是翻出editplus,对eclipse ui workbench的代码多文件搜索了一把,然后开始吐血,它居然把所有的L&F的配置都写在UI Workbench的Preference Page里,这还算什么插件,根本就没有把扩展的接口给出来,还是很重要的一个配置。其实2.2L&F以前只是它的一个内部package,后来重构成一个plugin,3.0L&F到现在依然还是一个package。不过我想既然2.2L&F做成插件了,怎么也改和系统独立开来呀,现在这样就成了一个半吊子的plugin.

Eclipse终于被我bs了一把^_^,林子大了,什么鸟都有。


改过之后L&F自己觉得好用了不少

 

posted on 2007-12-25 19:19 三人行,必有我师焉 阅读(3392) 评论(5)  编辑  收藏

评论

# re: Eclipse Presentation 里的垃圾代码,气得我吐血。 2007-12-25 19:35 BeanSoft
啥都不说了,国人当自强!  回复  更多评论
  

# re: Eclipse Presentation 里的垃圾代码,气得我吐血。[未登录] 2007-12-26 10:39 Mike
我们做外包是也是发现很多欧美外国人很喜欢把常量写死在代码里,而不是放在xml之类的文件里,这点让我感到很惊讶,反而是做日本外包时,什么都往xml里面放。  回复  更多评论
  

# re: Eclipse Presentation 里的垃圾代码,气得我吐血。 2007-12-26 11:23 弹弓
ENABLE_NEW_MIN_MAX
这种开关变量确实应该放置到Preferrence中。  回复  更多评论
  

# re: Eclipse Presentation 里的垃圾代码,气得我吐血。 2007-12-26 16:01 三人行,必有我师焉
是的,但是如果给外部用的话,应该暴露一个方法,比如 setEnableNewMinMax(),在项目内部使用ENABLE_NEW_MIN_MAX而不暴露出来是对用户不负责任的做法,而且在page里也没有选项设置。  回复  更多评论
  

# re: Eclipse Presentation 里的垃圾代码,气得我吐血。 2008-06-25 14:41
通过PlatformUI.getPreferenceStore().setDefault(IWorkbenchPreferenceConstants.ENABLE_NEW_MIN_MAX, true)来设置  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航:
 
GitHub |  开源中国社区 |  maven仓库 |  文件格式转换