实现在GEF中被选中图形上的右键菜单

要实现在GEF中被选中图形上的右键菜单,每个action完成如下三项工作:

1、  action类定义,一般情况的action都会在选中图形后操作,所以,一般都会继承自org.eclipse.gef.ui.actions.SelectionAction

import org.eclipse.gef.ui.actions.SelectionAction;
import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeEditPart;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;

import dbdesigner.diagram.edit.parts.TableEditPart;

public class TableProAction extends SelectionAction{
	private IWorkbenchPart part;
	public TableProAction(IWorkbenchPart part) {		 
		 super(part);
	     setId("tablePro");
	     setText("属性");
	     this.part=part;
	 }
	 @Override
	public void run() {
	    super.run();
	    IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
	    TableEditPart tableEditPart = (TableEditPart) getSelectedObjects().get(0);
		TableProDialog tp = new TableProDialog(workbenchWindow.getShell(),tableEditPart);
		tp.open();
	}
	@Override
	protected boolean calculateEnabled() {
		if (getSelectedObjects().size() == 1 && (getSelectedObjects().get(0) instanceof ShapeEditPart)) {
			ShapeEditPart part = (ShapeEditPart) getSelectedObjects().get(0);
			if(part instanceof TableEditPart)
				return true;
		}
		return false;
	}
}
 

2、  DbdesignerDiagramEditorcreateActions中将上述action注册到ActionRegistry,并设定和selectionaction的关系,这个类的是GEF生成的代码,只需要修改以下两个地方


prot       protected void configureGraphicalViewer() {
		  super.configureGraphicalViewer();
		  IDiagramGraphicalViewer viewer = getDiagramGraphicalViewer();
			// configure the context menu provider
			ContextMenuProvider cmProvider = new MyDiagramContextMenuProvider(viewer, getActionRegistry());
			viewer.setContextMenu(cmProvider);
			getSite().registerContextMenu(cmProvider, viewer);
		}

	/**
	 * Create the actions
	 */
	protected void createActions() {
		// Create the actions
			super.createActions();
			ActionRegistry ar = getActionRegistry();
			//一组继承自selectionaction的action
			IAction[] actions = new IAction[] { new TableProAction(this) // 编辑属性
			};
			for (IAction a : actions) {
				ar.registerAction(a);
				getSelectionActions().add(a.getId());
			}
	}

3、  在新增一个MyDiagramContextMenuProvider类,注册到右键菜单

public class MyDiagramContextMenuProvider extends ContextMenuProvider{

	/** The editor's action registry. */
	private ActionRegistry actionRegistry;
	
	public MyDiagramContextMenuProvider(EditPartViewer viewer, ActionRegistry registry) {
		super(viewer);
		if (registry == null) {
			throw new IllegalArgumentException();
		}
		actionRegistry = registry;
	}
	
	  public void buildContextMenu(IMenuManager menu) {
		  
	     //添加用户自定义菜单项
		menu.add(getAction("tablePro"));
	   }
	  // 过滤不需要的上下文菜单
	   public IContributionItem[] getItems() {
	     IContributionItem[] ic = super.getItems();
	     filterSystemPopMenu(ic);
	     return ic; 
	   }
	   
	   private void filterSystemPopMenu(IContributionItem[] ic)
	   {
		   for (int i=0;i
 
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值