這個好像有幾種情形,想到三個就先寫三個:第一個是rcp中有默認的主菜單,如果你什么菜都不加它不會顯示,但當你加的菜單和默認菜單有同名情況時,rcp會向這個名稱的菜單里加入一些默認的選項。比如你要寫自己的file菜單,那命名最好換成ifile或者其它,不然,命名成file,rcp不管你是否需要,都會往里面加入通常的file功能條(都是灰色的)。第二個是通過代碼里去除不用的菜單。
跟著入門教程一步一步走下來,好歹有個可視化編輯器的樣子,看起來還像那么回事。回過頭,發(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)的詳細介紹,八進制的blog上有詳細介紹。step 2:動作觸發(fā)后要有editPart接收相應(yīng)的request,然后轉(zhuǎn)交給某個editPolicy進行處理。在刪除過程中,是被刪除組件的editPart接收刪除request。在這個editPart中注冊一個繼承于ComponentEditPolicy的policy,editpart將把request轉(zhuǎn)交給這個policy處理。在policy中需要重寫createDeleteCommand(GroupRequest deleteRequest)方法來生成對刪除動作進行處理的command對象,并對該對象的屬性進行一些設(shè)置,然后返回。代碼如下:NodeEditPart類中protected void createEditPolicies() { // TODO Auto-generated method stub…… installEditPolicy(EditPolicy.COMPONENT_ROLE, new NodeEditPolicy());
…… }NodeEditPolicy類
step3:實現(xiàn)command類
當然容器類的模型要實現(xiàn)removeChild方法才行 public void removeChild(nodeModelchild){ child.setParent(null); getChildren().remove(child); this.fireChildrenChange(child); }以上介紹的這些是我進行實現(xiàn)的一個過程,實際實現(xiàn)的時候應(yīng)該抽象出一個基類模型和對應(yīng)的editpart,這樣就不用重復在每個組件中編寫了。實現(xiàn)完成后工具條上的按鈕,主菜單中的刪除選項,鍵盤的del鍵都可以用來進行刪除操作。注意這里沒有寫command里的redo和undo操作。