GEF outline中添加菜单

 终于完成了在outline中添加菜单,只是想总结一下过程,首先说明我也是一个菜鸟

 

我在GEF outline中添加菜单,必须先找个它所对应的editor,本例是extenes  Page

在init()方法中

@Override
 public void init(IPageSite pageSite) {
  viewer.setContextMenu(new OutlineMenuProvider(getSite(),getViewer())  );
 super.init(pageSite);
 }

OutlineMenuProvider类的代码如下

public class OutlineMenuProvider extends ContextMenuProvider {

 public static String FEE_ACTION_LABLE="Add Fee";
 public static String DELETE_ACTION_LABLE="Delete";
 
 private ActionRegistry registry;
 private SelectionAction action;
 private LicenceFlowEditor editor;
// private IMenuListener listener;
 private EditPartViewer viewer;
 private IPageSite page;

 public OutlineMenuProvider(EditPartViewer viewer) {
  super(viewer);
 }

  public OutlineMenuProvider(IPageSite page, EditPartViewer viewer) {
  super(viewer);
  this.page = page;
  this.viewer = viewer;
  init();
//  listener = new OutlineMenuListener(viewer);
//  addMenuListener(listener);
 }

 @Override
 public void buildContextMenu(IMenuManager menu) {

  menu.removeAll();
  List actions = getActionRegistry().getActionList();
  if (actions == null)
   return;
  for (int i = 0; i < actions.size(); i++) {
   Object object = actions.get(i);
   if (object instanceof AbstractSelectAction) {
    AbstractSelectAction action = (AbstractSelectAction) object;
    if (action.shouldShow()) {
     action.refresh();
     menu.add(action);
    }
   }
  }

 }

 private void init() {
  registry = new ActionRegistry();
  action = new OutlineFeeAction(editor, viewer, FEE_ACTION_LABLE,ActionImageFactory.getImagePath(ActionImageConstant.NEW_FEE));
  registry.registerAction(action);
  action = new OutlineDeleteAction(editor, viewer, DELETE_ACTION_LABLE,ActionImageFactory.getImagePath(ActionImageConstant.DELETE));
  registry.registerAction(action);
 }

 public ActionRegistry getActionRegistry() {
  return registry;
 }

 public void setActionRegistry(ActionRegistry actionRegistry) {
  this.registry = actionRegistry;
 }

 

}

 

然后完成相就的action就行了

action 如下

 

public class OutlineFeeAction extends AbstractSelectAction {
 public static final String ACTION_ID = "Add fee";

 public OutlineFeeAction(IWorkbenchPart part, EditPartViewer tree,
   String title) {
  super(part, tree, title);
  setId(ACTION_ID);
 }

 public OutlineFeeAction(IWorkbenchPart part, EditPartViewer tree,
   String lable, String icon) {
  super(part, tree, lable,icon);
  setId(ACTION_ID);
 }

 @Override
 public void run() {
  AbstractModel model = (AbstractModel) getSelectionElement().getModel();
  super.run();
 }

 public boolean shouldShow() {
  AbstractModel model = (AbstractModel) getSelectionElement().getModel();
  if (model instanceof FeeCPContainer) {
   return true;
  }
  return false;
 }

结果如图

在这里说一下我用的是org.eclipse.gef.ui.parts.TreeViewer,如果用jface更好做

只说到这里,希望能一些我帮助。这是我的第一篇博客,请多多谅解……

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值