双桅渔船  
漂泊,没有终点
日历
<2006年1月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234
统计
  • 随笔 - 5
  • 文章 - 0
  • 评论 - 3
  • 引用 - 0

导航

常用链接

留言簿(1)

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 

2006年1月8日

这个好像有几种情形,想到三个就先写三个:
第一个是rcp中有默认的主菜单,如果你什么菜都不加它不会显示,但当你加的菜单和默认菜单有同名情况时,rcp会向这个名称的菜单里加入一些默认的选项。比如你要写自己的file菜单,那命名最好换成ifile或者其它,不然,命名成file,rcp不管你是否需要,都会往里面加入通常的file功能条(都是灰色的)。
第二个是通过代码里去除不用的菜单。

WorkbenchWindow window = (WorkbenchWindow)Workbench.getInstance().getActiveWorkbenchWindow();

MenuManager menuManager 
= window.getMenuManager();
IContributionItem[] items 
= menuManager.getItems();
   
ActionSetContributionItem element 
= (ActionSetContributionItem)items[1];

MenuManager fileMenuManager 
= (MenuManager)element.getInnerItem();
   
fileMenuManager.remove(
"action1");
第三个是用jdt的一些现成组件的时候,当focus转移到这些组件上会产生相应的菜单,而这些是你不想要的,可以这样处理,将那个组件类继承一下,使用你新生成的类,就可以去除不需要的菜单。
 在jdt的blugin里面给组件定义了viewAction的扩展,所以直接使用这些组件的时候会自动显示定义的菜单,通过继承就可以消除那些扩展点的影响。
posted @ 2006-01-08 15:12 USTCEric 阅读(678) | 评论 (0)编辑 收藏
 
     摘要:  自己遇到了这方面问题,在瀚海星云上咨询了一下,解决后总结了一下。现在收录到自己的空间里:)前段时间为了使用jdt中的package explorer进行一个rcp程序的开发。在版面上进行了 提问,得到了simon lei,pandawang 的热情帮助,在此表示感谢。经过一番学习,在几个论 坛上问了一下,当时仍没有找到解决方法(主要是使用package...  阅读全文
posted @ 2006-01-08 14:47 USTCEric 阅读(1116) | 评论 (0)编辑 收藏
 

跟着入门教程一步一步走下来,好歹有个可视化编辑器的样子,看起来还像那么回事。
回过头,发现添加的组件还没有删除功能。现在介绍一下如何实现组件删除的功能。

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 @ 2006-01-08 12:33 USTCEric 阅读(486) | 评论 (0)编辑 收藏
 
Copyright © USTCEric Powered by: 博客园 模板提供:沪江博客