跟著入門教程一步一步走下來,好歹有個可視化編輯器的樣子,看起來還像那么回事。回過頭,發現添加的組件還沒有刪除功能。現在介紹一下如何實現組件刪除的功能。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類
step3:實現command類
當然容器類的模型要實現removeChild方法才行 public void removeChild(nodeModelchild){ child.setParent(null); getChildren().remove(child); this.fireChildrenChange(child); }以上介紹的這些是我進行實現的一個過程,實際實現的時候應該抽象出一個基類模型和對應的editpart,這樣就不用重復在每個組件中編寫了。實現完成后工具條上的按鈕,主菜單中的刪除選項,鍵盤的del鍵都可以用來進行刪除操作。注意這里沒有寫command里的redo和undo操作。