雙桅漁船  
          漂泊,沒有終點
          日歷
          <2006年1月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234
          統(tǒng)計
          • 隨筆 - 5
          • 文章 - 0
          • 評論 - 3
          • 引用 - 0

          導(dǎo)航

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

           

          2006年1月8日

          這個好像有幾種情形,想到三個就先寫三個:
          第一個是rcp中有默認(rèn)的主菜單,如果你什么菜都不加它不會顯示,但當(dāng)你加的菜單和默認(rèn)菜單有同名情況時,rcp會向這個名稱的菜單里加入一些默認(rèn)的選項。比如你要寫自己的file菜單,那命名最好換成ifile或者其它,不然,命名成file,rcp不管你是否需要,都會往里面加入通常的file功能條(都是灰色的)。
          第二個是通過代碼里去除不用的菜單。

          WorkbenchWindow window = (WorkbenchWindow)Workbench.getInstance().getActiveWorkbenchWindow();

          MenuManager menuManager 
          = window.getMenuManager();
          IContributionItem[] items 
          = menuManager.getItems();
             
          ActionSetContributionItem element 
          = (ActionSetContributionItem)items[1];

          MenuManager fileMenuManager 
          = (MenuManager)element.getInnerItem();
             
          fileMenuManager.remove(
          "action1");
          第三個是用jdt的一些現(xiàn)成組件的時候,當(dāng)focus轉(zhuǎn)移到這些組件上會產(chǎn)生相應(yīng)的菜單,而這些是你不想要的,可以這樣處理,將那個組件類繼承一下,使用你新生成的類,就可以去除不需要的菜單。
           在jdt的blugin里面給組件定義了viewAction的擴(kuò)展,所以直接使用這些組件的時候會自動顯示定義的菜單,通過繼承就可以消除那些擴(kuò)展點的影響。
          posted @ 2006-01-08 15:12 USTCEric 閱讀(693) | 評論 (0)編輯 收藏
           
               摘要:  自己遇到了這方面問題,在瀚海星云上咨詢了一下,解決后總結(jié)了一下。現(xiàn)在收錄到自己的空間里:)前段時間為了使用jdt中的package explorer進(jìn)行一個rcp程序的開發(fā)。在版面上進(jìn)行了 提問,得到了simon lei,pandawang 的熱情幫助,在此表示感謝。經(jīng)過一番學(xué)習(xí),在幾個論 壇上問了一下,當(dāng)時仍沒有找到解決方法(主要是使用package...  閱讀全文
          posted @ 2006-01-08 14:47 USTCEric 閱讀(1133) | 評論 (0)編輯 收藏
           

          跟著入門教程一步一步走下來,好歹有個可視化編輯器的樣子,看起來還像那么回事。
          回過頭,發(fā)現(xiàn)添加的組件還沒有刪除功能。現(xiàn)在介紹一下如何實現(xiàn)組件刪除的功能。

          step 1:要能刪除組件必須要有菜單、按鈕或者用del鍵,于是需要在你編輯器的ActionBarContributor中添加相關(guān)的代碼來獲得主工具條上的刪除按鈕,同時也將激活edit菜單中的delete選項。
          public void contributeToToolBar(IToolBarManager toolBarManager) {
            // TODO Auto-generated method stub
            ……  
            toolBarManager.add(getAction(ActionFactory.DELETE.getId()));
          ……
          }
          關(guān)于工具條菜單部分功能實現(xiàn)的詳細(xì)介紹,八進(jìn)制的blog上有詳細(xì)介紹。

          step 2:動作觸發(fā)后要有editPart接收相應(yīng)的request,然后轉(zhuǎn)交給某個editPolicy進(jìn)行處理。在刪除過程中,是被刪除組件的editPart接收刪除request。在這個editPart中注冊一個繼承于ComponentEditPolicy的policy,editpart將把request轉(zhuǎn)交給這個policy處理。在policy中需要重寫createDeleteCommand(GroupRequest deleteRequest)方法來生成對刪除動作進(jìn)行處理的command對象,并對該對象的屬性進(jìn)行一些設(shè)置,然后返回。
          代碼如下:
          NodeEditPart類中
          protected void createEditPolicies() {
            // TODO Auto-generated method stub
          ……
            installEditPolicy(EditPolicy.COMPONENT_ROLE, new NodeEditPolicy());

          ……
           }

          NodeEditPolicy類

          public class NodeEditPolicy extends ComponentEditPolicy {

           
          public NodeEditPolicy() {
            
          super();
            
          // TODO Auto-generated constructor stub
           }

           
          protected Command createDeleteCommand(GroupRequest deleteRequest) {
            
          // TODO Auto-generated method stub
            Object parent = getHost().getParent().getModel();  
            RemoveNodeCommand command 
          = new RemoveNodeCommand();
            command.setParent((BaseModel)parent);
            command.setChild((BaseModel)getHost().getModel());  
            
          return command;  
           }


          }




          step3:實現(xiàn)command類

          public class RemoveNodeCommand extends Command {
           
           
          //private List parent;
           private NodeModel parent;
           
          private NodeModel child;

           
          public NodeModel  getChild() {
            
          return child;
           }


           
          public void setChild(NodeModel child) {
            
          this.child = child;
           }


           
          public NodeModel getParent() {
            
          return parent;
           }


           
          public void setParent(NodeModel parent) {
            
          this.parent = parent;
           }


           
          public RemoveNodeCommand() {
            
          super();
            
          // TODO Auto-generated constructor stub
           }


           
          public RemoveNodeCommand(String label) {
            
          super(label);
            
          // TODO Auto-generated constructor stub
           }

           
           
          public void execute() {
            
          // TODO Auto-generated method stub
             Assert.isNotNull(parent);
            Assert.isNotNull(child);  
            parent.removeChild(child);   
           }


          }


          當(dāng)然容器類的模型要實現(xiàn)removeChild方法才行
           public void removeChild(nodeModelchild){
               child.setParent(null);
               getChildren().remove(child);
               this.fireChildrenChange(child);
              }

          以上介紹的這些是我進(jìn)行實現(xiàn)的一個過程,實際實現(xiàn)的時候應(yīng)該抽象出一個基類模型和對應(yīng)的editpart,這樣就不用重復(fù)在每個組件中編寫了。實現(xiàn)完成后工具條上的按鈕,主菜單中的刪除選項,鍵盤的del鍵都可以用來進(jìn)行刪除操作。
          注意這里沒有寫command里的redo和undo操作。

          posted @ 2006-01-08 12:33 USTCEric 閱讀(502) | 評論 (0)編輯 收藏
           
          Copyright © USTCEric Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 容城县| 将乐县| 荆门市| 汤原县| 黄陵县| 株洲市| 久治县| 古浪县| 常山县| 永丰县| 舞阳县| 金堂县| 玉门市| 盐池县| 略阳县| 金阳县| 永德县| 平武县| 东平县| 郸城县| 黄山市| 勃利县| 商都县| 大兴区| 楚雄市| 滨州市| 和龙市| 阜城县| 武定县| 徐汇区| 麻江县| 信丰县| 封开县| 科技| 汝南县| 桃源县| 陆河县| 昌都县| 沙雅县| 华亭县| 大埔区|