这个好像有几种情形,想到三个就先写三个:第一个是rcp中有默认的主菜单,如果你什么菜都不加它不会显示,但当你加的菜单和默认菜单有同名情况时,rcp会向这个名称的菜单里加入一些默认的选项。比如你要写自己的file菜单,那命名最好换成ifile或者其它,不然,命名成file,rcp不管你是否需要,都会往里面加入通常的file功能条(都是灰色的)。第二个是通过代码里去除不用的菜单。
跟着入门教程一步一步走下来,好歹有个可视化编辑器的样子,看起来还像那么回事。回过头,发现添加的组件还没有删除功能。现在介绍一下如何实现组件删除的功能。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操作。