<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    在GEF中實現帶content assist的Directedit

    GEF中自帶有Directeditrequest,所以實現Directedit還是比較容易的,八進制的gef例子里面就有實現.但我在給directedit加上content assist的時候卻發現由一個小bug不太好弄,費了兩天才搞定,現在先記下來,以供參考
      directedit是通過一個text celleditor來實現編輯功能的,所以可以在directeditmanager類里面的initCellEditor方法里面加上ContentAssistHandler來實現auto complete.但是加上去之后卻發現有一個問題:不支持用鼠標來選擇proposal.只能用鍵盤上的上下箭頭來選擇.雖然也可以用,但是終究不是那么的人性化.
      為了修復這個bug,走了不少的彎路,一開始以為是contentassist的問題,因為它是deprecated,所以換了3.3里面的assist api,發現還是不行.后來才知道是因為celleditor有一個focus listener,當用戶點擊proposals 來選擇一行的時候,celleditor的focus就lost了,就會調用focusLost方法,導致directedit編輯失敗.所以我重寫了celleditor的focusLost方法,把它設成當focus在contentassist的popup dialog就什么都不干,否則調用父類的focusLost方法.理論上是一個好的解決方法,但是contentassist的hasPopupFocus居然一直都返回false,這個方法也失敗了.
       最后,在bug.eclipse.org上面有人提到GMF里面的TextDirectEditManager是可以做到用鼠標選擇proposal的,于是又去看gmf的這個類,它也是繼承自DirectEditManager,不過它消除這個bug不是在listener上作文章,而是在commit方法里面,在這個方法里面判斷popup dialog是否是active的,如果是的話則給celleditor加上deactive lock,不允許它deactive,這樣來實現用鼠標選擇proposal.
    下面是TextDirectEditManager的方法commit里面的部分代碼:

    Shell activeShell = Display.getCurrent().getActiveShell();
            if (activeShell != null
                && getCellEditor().getControl().getShell().equals(
                    activeShell.getParent())) {
                Control[] children = activeShell.getChildren();
                if (children.length == 1 && children[0] instanceof Table) {
                    /*
                     * CONTENT ASSIST: focus is lost to the content assist pop up -
                     * stay in focus
                     */
                    getCellEditor().getControl().setVisible(true);
                    ((MyTextCellEditor) getCellEditor()).setDeactivationLock(true);
                    return;
                }
            }

      下面是MyTextCellEditor里面對于deactive lock的應用,MyTextCellEditor的deactive之前會判斷一下deactive lock是否為true:
    public boolean isDeactivationLocked() {
      return deactivationLock;
     }
     public void deactivate() {
      if (! isDeactivationLocked())
       super.deactivate();
      setDeactivationLock(false);
     }
     

     public void setDeactivationLock(boolean deactivationLock) {
      this.deactivationLock = deactivationLock;
     }

    posted on 2008-08-05 17:09 小牛小蝦 閱讀(1119) 評論(1)  編輯  收藏

    評論

    # re: 在GEF中實現帶content assist的Directedit[未登錄] 2008-08-06 08:56 寒武紀

    不錯!  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    <2008年8月>
    272829303112
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    導航

    統計

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    eclipse

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲美女又黄又爽在线观看| 亚洲中文字幕久久无码| 黄页网址大全免费观看12网站 | 久久嫩草影院免费看夜色| 免费毛片在线看片免费丝瓜视频| 亚洲码国产精品高潮在线| 国产成人高清亚洲一区91| 久久经典免费视频| 亚洲AV永久无码精品一百度影院| 国产AV无码专区亚洲AV琪琪 | 免费无码看av的网站| 久久精品亚洲精品国产色婷| 国产精品玖玖美女张开腿让男人桶爽免费看 | 亚洲欧洲日本在线观看| 久久午夜免费鲁丝片| 中文字幕亚洲一区| jzzijzzij在线观看亚洲熟妇| 国产成人免费网站| 亚洲美女免费视频| 欧洲人免费视频网站在线| 亚洲精品国自产拍在线观看| 亚洲日本天堂在线| 国产香蕉免费精品视频| 亚洲精品视频在线| 免费毛片在线看不用播放器| av在线亚洲欧洲日产一区二区| 亚洲第一se情网站| 四虎在线免费播放| 学生妹亚洲一区二区| 亚洲免费视频观看| 久久亚洲AV无码精品色午夜麻| 一级一级一级毛片免费毛片| 人人狠狠综合久久亚洲高清| 亚洲av无码一区二区三区天堂| 国产美女在线精品免费观看| 亚洲一卡2卡4卡5卡6卡残暴在线| 1000部夫妻午夜免费| 亚洲男人的天堂在线播放| 国产午夜免费高清久久影院| 亚洲精品无码mv在线观看网站 | 国产偷国产偷亚洲高清日韩|