雙桅漁船  
          漂泊,沒有終點
          日歷
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567
          統計
          • 隨筆 - 5
          • 文章 - 0
          • 評論 - 3
          • 引用 - 0

          導航

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

           

          2006年1月8日

          這個好像有幾種情形,想到三個就先寫三個:
          第一個是rcp中有默認的主菜單,如果你什么菜都不加它不會顯示,但當你加的菜單和默認菜單有同名情況時,rcp會向這個名稱的菜單里加入一些默認的選項。比如你要寫自己的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的一些現成組件的時候,當focus轉移到這些組件上會產生相應的菜單,而這些是你不想要的,可以這樣處理,將那個組件類繼承一下,使用你新生成的類,就可以去除不需要的菜單。
           在jdt的blugin里面給組件定義了viewAction的擴展,所以直接使用這些組件的時候會自動顯示定義的菜單,通過繼承就可以消除那些擴展點的影響。
          posted @ 2006-01-08 15:12 USTCEric 閱讀(688) | 評論 (0)編輯 收藏
           
               摘要:  自己遇到了這方面問題,在瀚海星云上咨詢了一下,解決后總結了一下?,F在收錄到自己的空間里:)前段時間為了使用jdt中的package explorer進行一個rcp程序的開發。在版面上進行了 提問,得到了simon lei,pandawang 的熱情幫助,在此表示感謝。經過一番學習,在幾個論 壇上問了一下,當時仍沒有找到解決方法(主要是使用package...  閱讀全文
          posted @ 2006-01-08 14:47 USTCEric 閱讀(1124) | 評論 (0)編輯 收藏
           

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

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

          step 2:動作觸發后要有editPart接收相應的request,然后轉交給某個editPolicy進行處理。在刪除過程中,是被刪除組件的editPart接收刪除request。在這個editPart中注冊一個繼承于ComponentEditPolicy的policy,editpart將把request轉交給這個policy處理。在policy中需要重寫createDeleteCommand(GroupRequest deleteRequest)方法來生成對刪除動作進行處理的command對象,并對該對象的屬性進行一些設置,然后返回。
          代碼如下:
          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:實現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);   
           }


          }


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

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

          posted @ 2006-01-08 12:33 USTCEric 閱讀(493) | 評論 (0)編輯 收藏

          2006年1月7日

           ResizableEditPolicy中的getAlignCommand方法是到組件的父(也就是承載組件的容器)editpolicy中調用 getCommand()方法,而這時容器的editpolicy必須是ConstrainedLayoutEditPolicy
          或者是繼承于它的editpolicy(如XYLayoutEditPolicy)才能支持align動作返回alignCommand。
          因此容器類繼承于ConstrainedLayoutEditPolicy或者XYLayoutEditPolicy才能實現align功能。
           
          這個在八進制的blog曾作為回復發過,為了以后自己看方便,就在這里再記錄一下。
          posted @ 2006-01-07 16:58 USTCEric 閱讀(376) | 評論 (0)編輯 收藏
           
          學習gef和rcp有一小段時間了,參照例子,寫了個簡易rcp平臺,寫了個簡單演示的gef界面。花了不少時間,學到不少東西?;仡^看看自己的收獲,又都變得模糊,技術的東西是需要總結的。前面的記起來就寫寫,后面的,學到什么新東西要趕緊記下來了,自己這殘疾的記憶太讓人失望。
          posted @ 2006-01-07 16:51 USTCEric 閱讀(364) | 評論 (3)編輯 收藏
           
          Copyright © USTCEric Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 新宁县| 缙云县| 甘泉县| 奉节县| 新乡县| 惠州市| 宝山区| 顺平县| 永福县| 贵阳市| 图片| 巴塘县| 义乌市| 自治县| 东乌珠穆沁旗| 申扎县| 宜兴市| 万载县| 新泰市| 乐清市| 曲沃县| 抚松县| 延边| 噶尔县| 湘潭县| 泰安市| 姜堰市| 聊城市| 东城区| 安塞县| 乐平市| 若羌县| 迭部县| 南雄市| 西乌珠穆沁旗| 台州市| 盈江县| 普兰店市| 雅安市| 定州市| 嘉兴市|