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

          導航

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

           

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

          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 on 2006-01-08 12:33 USTCEric 閱讀(502) 評論(0)  編輯  收藏

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


          網站導航:
           
           
          Copyright © USTCEric Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 大方县| 洛川县| 红安县| 二连浩特市| 安龙县| 安阳市| 张家港市| 屏东市| 平陆县| 临沂市| 宾川县| 新平| 陵水| 尖扎县| 淳安县| 定陶县| 紫金县| 平果县| 宜城市| 绥化市| 平乡县| 正宁县| 乐业县| 呼和浩特市| 花垣县| 襄汾县| 沙坪坝区| 横峰县| 哈尔滨市| 桑日县| 定襄县| 兴安县| 神木县| 岱山县| 台南县| 辽宁省| 英山县| 西昌市| 弥渡县| 锦屏县| 南丹县|