這個好像有幾種情形,想到三個就先寫三個:第一個是rcp中有默認的主菜單,如果你什么菜都不加它不會顯示,但當你加的菜單和默認菜單有同名情況時,rcp會向這個名稱的菜單里加入一些默認的選項。比如你要寫自己的file菜單,那命名最好換成ifile或者其它,不然,命名成file,rcp不管你是否需要,都會往里面加入通常的file功能條(都是灰色的)。第二個是通過代碼里去除不用的菜單。
跟著入門教程一步一步走下來,好歹有個可視化編輯器的樣子,看起來還像那么回事。回過頭,發現添加的組件還沒有刪除功能?,F在介紹一下如何實現組件刪除的功能。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操作。