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

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

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

    在Eclipse中去掉多余的UI組件的幾個方法

    Eclipse的擴展機制是其一個重要特色,但隨著Eclipse功能越做越強,插件越來越多,你會發現GUI上的圖標越來越多,Menu,toolbar,context menu都被占滿了,其實很多item并不是我們需要的,但是contribute這些item的插件我們是需要的,那怎么去掉它們擴展的那些菜單項呢?
    1.在Plugin.xml中定制
       這是最簡單的辦法,很多時候我們自己想寫代碼來去掉一些菜單項,但效果并不好.所以能在Plugin.xml中定制的,我們就 盡量寫在plugin.xml里面.下面舉一個右鍵菜單的例子:
       擴展右鍵菜單需要擴展org.eclipse.ui.popupMenus擴展點,我們一般都在它下面new一個action,但這個action擴展之后不管在  任何界面都會出現,如果我們想在某些條件下隱藏掉它該怎么辦?仔細觀察下org.eclipse.ui.popupMenus擴展點,其實我們還可以新建objectContribution擴展
       <extension
             point="org.eclipse.ui.popupMenus">
       <objectContribution
                id="my.example.objectContribution"
                nameFilter="*example*"
                objectClass="java.io.File">
             <action
                   class="my.example.MyAction"
                   id="my.example.MyAction"
                   label="Exe"
                   menubarPath="additional">
             </action>
          </objectContribution>
        </extension>
        objectContribution里面也包含一個action,但這個action在popupmenu里出現是有條件的:我們給它定義了一個nameFilter, 只有當selection()的path中包含了"example"才會顯示,否則這個action是不會出現在 popupmenu里的.這里的selection假設選中的是一個File,如果選中的是你自己寫的類,那namefilter會在你的類的toString方法里面找keyword.
    2.使用Eclipse的Activities擴展
      plugin.xml并不能解決所有問題,當我們實在沒有辦法在plugin.xml中限制某些extension的出現的時候,可以考慮使用Eclipse的Activities.Activities的官方定義大家可以google一下eclipse的help.我個人的理解就是它可以和perspective一樣控制UI的顯示,但是Perspective設計的太易于擴展了,假如Plugin A在perspective上擴展了一個UI,那么Plugin B在每次進入這個perspective的時候就一定可以看得見它,而且在Eclipse的擴展機制下,Plugin B是沒有權利去刪了Plugin A的contribution的(Eclipse的ExtensionRegistry倒是提供了一個removeExtension方法,但運行的時候會報錯).在這樣的情況下,Activities的價值就體現出來了,你只要給它一個Extension的id,它就可以幫你把這個Extension disable掉.例如:
    <extension
             point="org.eclipse.ui.activities">
          <activity
                id="my.example.activity"
                name="WizardActivity">
          </activity>
          <activityPatternBinding
                activityId="my.example.activity"
                pattern="my\.example/mywizard">
          </activityPatternBinding>
     </extension>
     比較重要的是activityPatternBinding中的pattern屬性,它是由plugin id + "/" + local-id組成.比如在插件my.example中擴展了 org.eclipse.ui.newWizards,id是mywizard,那么上面這個activityPatternBinding就會disable掉my.example的mywizard擴展,你在 GUI中就看不見這個wizard了.pattern是支持正則表達式的,所以如果有"."的話需要用轉義字符\.注意,這里的disable的意思并不是說我把mywizard這個擴展刪掉了,而是屏蔽了它,mywizard仍然在 ExtensionRegistry中.
    3.用代碼來動態控制UI
     方法2只是隱藏掉一些擴展,但是有一些需求并不是簡單的隱藏就可以了,我最近碰到的一個需求就是:有一個flag,只有當flag==1的時候擴展是可見的,否則是不可見的,需要disable這個擴展.這時就必須要加一些代碼才能實現了,還是以方法2中的mywizard為例:
     IWorkbenchActivitySupport workbenchActivitySupport = PlatformUI.getWorkbench().getActivitySupport();
      IActivityManager activityManager = workbenchActivitySupport.getActivityManager();
      Set enabledActivityIds = new HashSet(activityManager.getEnabledActivityIds());
            if(flag==1)
      {
              if (enabledActivityIds.add("my.example.activity"))
                  workbenchActivitySupport.setEnabledActivityIds(enabledActivityIds); 
      }
      else{
               if(enabledActivityIds.remove("my.example.activity"))
                  workbenchActivitySupport.setEnabledActivityIds(enabledActivityIds);
      }
     Activities可以是enable或者disable的,當你在plugin.xml中定義好了一個Activity,缺省它是disable的,就是說activityPatternBinding 匹配的擴展是會被disable的,但你也可以把Activities設成enable的(在plugin.xml或者用代碼都可以設置),它匹配的擴展是可以正常使用的.
     在上面的code sample中,我們通過activityManager.getEnabledActivityIds()得到所有enable的Activities.如果flag==1,那my.example.activity 也應該被加入到enable Activities中,這樣mywizard就可以顯示在界面上,反之,就要在enable Activities中remove掉my.example.activity,它就變成
     disable,會把mywizard隱藏.

    posted on 2009-07-26 15:59 小牛小蝦 閱讀(2035) 評論(0)  編輯  收藏


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


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    eclipse

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久综合给合久久国产免费 | 国产无遮挡色视频免费视频| 自怕偷自怕亚洲精品| 永久免费AV无码网站国产| 亚洲成色在线综合网站| 免费成人在线视频观看| 婷婷亚洲综合五月天小说| 97青青草原国产免费观看| 亚洲经典在线中文字幕| 精品成在人线AV无码免费看| 亚洲二区在线视频| 日韩特黄特色大片免费视频| 亚洲av午夜电影在线观看 | 成人免费无码视频在线网站| 亚洲精品自偷自拍无码| 免费a在线观看播放| 国产男女爽爽爽免费视频| 亚洲男人天堂av| 免费精品国产日韩热久久| 久久精品国产亚洲AV天海翼 | 免费看国产一级特黄aa大片| h视频在线观看免费| 亚洲∧v久久久无码精品| 国产va免费精品观看精品| 国产大陆亚洲精品国产| 亚洲综合国产一区二区三区| 人与禽交免费网站视频| 激情小说亚洲色图| 亚洲国产一区国产亚洲 | 国产区在线免费观看| 亚洲视频在线播放| 永久免费毛片手机版在线看| 岛国岛国免费V片在线观看| 亚洲美免无码中文字幕在线| 狠狠久久永久免费观看| 大地资源中文在线观看免费版| 亚洲av成人一区二区三区| 久久精品国产亚洲Aⅴ蜜臀色欲| 999任你躁在线精品免费不卡| 亚洲爆乳少妇无码激情| 亚洲αv在线精品糸列|