`
tianke66
  • 浏览: 187984 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

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

阅读更多

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

<!--[if !supportLists]-->1、  <!--[endif]-->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;
	}
}
 

<!--[if !supportLists]-->2、  <!--[endif]-->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());
			}
	}

<!--[if !supportLists]-->3、  <!--[endif]-->在新增一个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

分享到:
评论

相关推荐

    GEF实现拷贝粘贴

    标题“GEF实现拷贝粘贴”涉及到的是在软件开发中使用Graphical Editing Framework(GEF)进行图形界面编辑时,如何实现复制和粘贴功能的技术。GEF是Eclipse平台下用于构建图形化编辑器的框架,它提供了一套完整的...

    gef 转折线的相关方法实现和 GEF的API chm 格式

    在本篇文章中,我们将深入探讨gef转折线的相关方法实现以及GEF的API。 首先,让我们理解一下什么是转折线。在图形编辑中,转折线通常指的是具有多个折点的线条,这些折点可以由用户交互式地调整,以改变线条的形状...

    GEF中文帮助实例

    在GEF中,模型是数据结构的抽象,用于存储和管理图形化编辑器所显示的信息。开发者需要定义自己的模型类,这些类通常继承自GEF提供的基础类,如`org.eclipse.gef.mvc.models.Model`。模型类中的属性和方法反映了图形...

    GEF中属性页面的实现

    在GEF(Graphical Editing Framework)中,属性视图(Property View)的实现是一个关键功能,它允许用户查看和编辑图形模型的属性。属性视图是数据源与用户界面之间的桥梁,确保图形模型和属性视图之间保持同步更新...

    GEF典型实现例子

    这两篇文章可能分别由CSDN博主和博客园博主分享了他们在使用GEF和相关技术,如Draw2D(用于在GEF中绘制2D图形的库)时的经验和技巧。 在深入理解GEF时,我们需要关注以下几个核心概念: 1. **模型-视图-控制器(MVC...

    GEF入门学习例子

    GEF中的视图由`GraphicalViewer`类实现,它管理着画布上的所有图形元素。 3. **编辑器(Editor)**: 编辑器是Eclipse插件开发中的一个关键组件,它提供了对模型的编辑功能。GEF编辑器通常基于`...

    GEF 入门教程 中文版

    在互联网上以及相关书籍(如IBM Redbook)中找到的主要文档更多地集中在GEF的理论概念上,而非具体如何使用GEF类的实际应用案例。因此,本教程旨在通过实际操作指导读者逐步掌握GEF的核心技术和实践技巧。 #### 二...

    GEF开发指南

    GEF为开发者提供了一个完整的图形化建模解决方案,它不仅能够单独使用,还能与其他技术,如EMF(Eclipse Modeling Framework)或GMF(Graphical Modeling Framework)相连接,从而在应用开发中实现更高层次的抽象。...

    GEF中文教程+代码

    **GEF(Graphical Editing Framework)** 是一个强大的开源框架,用于构建图形化编辑器,主要在Java平台上运行,由Eclipse基金会维护。这个框架提供了一整套工具,帮助开发者创建出具有专业级别的图形用户界面,特别...

    GEF理解系列三

    在GEF(Graphical Editing Framework)中,理解其工作流程对于开发图形编辑工具至关重要。GEF主要用于构建基于SWT和JFace的图形用户界面,它提供了丰富的功能来处理图形元素的绘制、操作和交互。本篇文章将深入探讨...

    [翻译]Eclipse图形化编辑框架(GEF)/更新第7章:层和视图

    “视图”在GEF中代表了一个图形化的显示区域,它展示了模型数据的某个方面或多个方面的可视化表示。一个视图可以包含多个层,每个层负责展示不同类型的图形元素。视图通常与Eclipse工作台中的其他组件一起使用,如...

    GEF_Demo_Code20170307

    这个项目旨在演示如何利用GEF进行图形界面开发,并且特别关注了通过适配器(Adapter)扩展点来实现属性页配置以及在非Editor的ViewPart中使用GEF。 GEF是Eclipse平台下的一个开源库,专门用于构建可自定义的、图形...

    GEF 入门版中文教程 源码

    在本教程中,你将学习如何使用GEF构建基本的图形编辑器,包括: - 创建模型类和绑定到视图 - 实现基本的绘图元素和连接线 - 处理用户交互,如拖放、选择和修改元素 - 集成RCP环境,构建完整的图形编辑器应用 - 使用...

    Eclipse开发使用GEF和EMF(IBM 红皮书)中英文对照版

    《Eclipse开发使用GEF和EMF》是IBM红皮书系列中的一部经典著作,主要探讨了如何在Eclipse环境中利用GEF(图形编辑框架)和EMF( Eclipse模型框架)进行图形化应用程序的开发。这两项技术是Eclipse平台上的核心组件,...

    GEF入门必读 GEF入门系列 GEF-whole-upload

    **GEF(Graphical Editing Framework)** 是一个用于构建图形化编辑器的开源框架,它在Eclipse平台上广泛使用,特别是在开发复杂的图形用户界面和工具时。本资料集旨在为初学者提供一个全面的入门指南,帮助理解GEF...

    GEF入门实例代码2《Eclipse插件开发》中实例

    总之,通过这个"GEF入门实例代码2",开发者可以了解到如何在Eclipse中构建一个基于GEF的图形编辑器,这不仅涉及数据模型的设计,还包括视图的绘制、用户交互的处理以及可撤销/重做机制的实现。通过实践,开发者可以...

    Eclipse的GEF学习

    在实际项目中,GEF被广泛应用于各种图形化编辑工具的开发中。无论是创建复杂的数据流图、UML图还是其他类型的图形编辑器,GEF都能提供坚实的基础框架。其丰富的API和高度可定制性,使开发者能够快速构建出既美观又...

    GEF-ALL-3.7+GEF-ALL-3.8+GEF_Draw2d学习资料

    通过这些资源,学习者可以深入理解GEF和Draw2D的工作原理,掌握如何在Eclipse环境中构建图形编辑器,并能够进行自定义图形编辑器的开发。这些文档涵盖了从安装、配置到实际编程的各个环节,对于提升图形界面开发能力...

    GEF-SDK-3.6.2 jar

    在Android ADT中,GEF的作用主要体现在可视化布局编辑器上,它允许开发者通过拖放的方式设计XML布局文件,实时预览UI效果,以及方便地调整控件的属性和布局关系。此外,GEF还支持图元工厂(MetaFactory),可以生成...

Global site tag (gtag.js) - Google Analytics