Feeling

              三人行,必有我?guī)熝?/p>

             ::  :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            185 隨筆 :: 0 文章 :: 392 評(píng)論 :: 0 Trackbacks
          做Java UI的人應(yīng)該都很熟悉Look and Feel,Swing擁有的這個(gè)功能的確是相對(duì)于SWT的一個(gè)巨大優(yōu)勢(shì)。不過(guò)SWT的GC也可以畫(huà)出自己的UI,前提是這個(gè)控件是Custom的,而不是系統(tǒng)級(jí)的。Eclipse Presentation 就是對(duì)eclipse本身UI提供的一個(gè)擴(kuò)展。本來(lái)我還對(duì)這個(gè)擴(kuò)展很友好的,不過(guò)現(xiàn)在覺(jué)得真是一鍋粥里掉了個(gè)老鼠屎,完全變了味道。

          由于閑來(lái)無(wú)視,把一個(gè)1年半前一個(gè)德國(guó)人寫(xiě)的Eclipse VS L&F Plugin down了下來(lái),無(wú)奈bug太多,用戶體驗(yàn)也和我個(gè)人感覺(jué)不一致,索性就把代碼check out 出來(lái),作了一些本地修改。不過(guò)讓我吐血的地方就是,如果我從eclipse default L&F 切換到這個(gè)L&F,就問(wèn)題一堆,從其它的L&F切換就沒(méi)有問(wèn)題。Debug了半天,毫無(wú)進(jìn)展,只是發(fā)現(xiàn)很多地方都是Null Exception。于是把Eclipse 2.2 L&F的代碼翻了出來(lái),經(jīng)過(guò)仔細(xì)對(duì)照,還是沒(méi)有找到解決的方案,我就感覺(jué)怪怪的,也不知道哪兒出了問(wèn)題,覺(jué)得大概是自己沒(méi)有把Presentation的代碼吃透的原因。于是又回頭開(kāi)始一行行的從有問(wèn)題的代碼處開(kāi)始Debug,看看我的代碼和2.2L&F的代碼在運(yùn)行時(shí)到底有什么區(qū)別,終于功夫不負(fù)有心人,我發(fā)現(xiàn)這個(gè)代碼片斷:
              /**
               * 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)) 
          {
          原來(lái)3.3的L&F做了專門(mén)處理,而我的代碼和3.3是一致的,和 2.2L&F是不一致的,不過(guò)我找了半天,也沒(méi)有在2.2L&F的代碼里找出異樣之處,暈的不行。唯一的線索就是
          boolean useNewMinMax = preferenceStore.getBoolean(IWorkbenchPreferenceConstants.ENABLE_NEW_MIN_MAX);

          可惡的是,IWorkbenchPreferenceConstants.ENABLE_NEW_MIN_MAX 這個(gè)靜態(tài)常量是無(wú)法在項(xiàng)目里找到eclipse自身的引用。2.2L&F plugin里也沒(méi)有,該死的eclipse肯定是寫(xiě)死在代碼里了。于是翻出editplus,對(duì)eclipse ui workbench的代碼多文件搜索了一把,然后開(kāi)始吐血,它居然把所有的L&F的配置都寫(xiě)在UI Workbench的Preference Page里,這還算什么插件,根本就沒(méi)有把擴(kuò)展的接口給出來(lái),還是很重要的一個(gè)配置。其實(shí)2.2L&F以前只是它的一個(gè)內(nèi)部package,后來(lái)重構(gòu)成一個(gè)plugin,3.0L&F到現(xiàn)在依然還是一個(gè)package。不過(guò)我想既然2.2L&F做成插件了,怎么也改和系統(tǒng)獨(dú)立開(kāi)來(lái)呀,現(xiàn)在這樣就成了一個(gè)半吊子的plugin.

          Eclipse終于被我bs了一把^_^,林子大了,什么鳥(niǎo)都有。


          改過(guò)之后L&F自己覺(jué)得好用了不少

           


          評(píng)論

          # re: Eclipse Presentation 里的垃圾代碼,氣得我吐血。 2007-12-25 19:35 BeanSoft
          啥都不說(shuō)了,國(guó)人當(dāng)自強(qiáng)!  回復(fù)  更多評(píng)論
            

          # re: Eclipse Presentation 里的垃圾代碼,氣得我吐血。[未登錄](méi) 2007-12-26 10:39 Mike
          我們做外包是也是發(fā)現(xiàn)很多歐美外國(guó)人很喜歡把常量寫(xiě)死在代碼里,而不是放在xml之類(lèi)的文件里,這點(diǎn)讓我感到很驚訝,反而是做日本外包時(shí),什么都往xml里面放。  回復(fù)  更多評(píng)論
            

          # re: Eclipse Presentation 里的垃圾代碼,氣得我吐血。 2007-12-26 11:23 彈弓
          ENABLE_NEW_MIN_MAX
          這種開(kāi)關(guān)變量確實(shí)應(yīng)該放置到Preferrence中。  回復(fù)  更多評(píng)論
            

          # re: Eclipse Presentation 里的垃圾代碼,氣得我吐血。 2007-12-26 16:01 三人行,必有我?guī)熝?/a>
          是的,但是如果給外部用的話,應(yīng)該暴露一個(gè)方法,比如 setEnableNewMinMax(),在項(xiàng)目?jī)?nèi)部使用ENABLE_NEW_MIN_MAX而不暴露出來(lái)是對(duì)用戶不負(fù)責(zé)任的做法,而且在page里也沒(méi)有選項(xiàng)設(shè)置。  回復(fù)  更多評(píng)論
            

          # re: Eclipse Presentation 里的垃圾代碼,氣得我吐血。 2008-06-25 14:41
          通過(guò)PlatformUI.getPreferenceStore().setDefault(IWorkbenchPreferenceConstants.ENABLE_NEW_MIN_MAX, true)來(lái)設(shè)置  回復(fù)  更多評(píng)論
            


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          GitHub |  開(kāi)源中國(guó)社區(qū) |  maven倉(cāng)庫(kù) |  文件格式轉(zhuǎn)換 
          主站蜘蛛池模板: 水城县| 樟树市| 五指山市| 深水埗区| 奉新县| 广宗县| 建德市| 礼泉县| 普兰县| 林甸县| 阳春市| 康定县| 眉山市| 唐海县| 滦南县| 白山市| 承德市| 抚宁县| 西和县| 青川县| 利辛县| 昌平区| 乐至县| 武宁县| 五常市| 中宁县| 太湖县| 繁峙县| 沅陵县| 高平市| 梧州市| 平安县| 海宁市| 那曲县| 北票市| 新乡市| 平南县| 县级市| 红河县| 临潭县| 扶风县|