Eclipse插件开发学习笔记 Views

Posted on 2009-07-31 13:42 eric_xu 阅读(1229) 评论(0)  编辑  收藏 所属分类: Eclipse Plugin

创建编辑器的上下文操作,targetID="#TextEditorContext",为eclipse默认文件编辑器的上下文菜单标识符。实现类必须实现IEditorActionDelegate接口。

Java编辑器对应的ID为:#TextEditorContext #CompilationUnitEditorContext,定义好targetID,就把我们的插件id指向视图菜单的id了。这样Java编辑器就会添加我们的菜单项了。

targetID用来与特定的编辑器,查看器,菜单绑定。

命令与键绑定,和操作相关联。命令只是操作的声明,操作的具体实现细节由操作本身来完成。将命令从操作实现中分离出来。

Org.eclipse.ui.commands扩展点 定义命令

Org.eclipse.ui.bindings扩展点 与命令和键绑定

 

视图的实现类都必须实现org.eclipse.ui.IViewPart接口,一般都会集成org.eclipse.ui.ViewPart类。

视图的行为由一个实现了org.eclipse.ui.IViewPart接口的类定义

 

IStructuredContentProvider结构化内容提供者负责从输入对象中提取对象,把它传递给表格查看器进行显示。AddressViewContentProvider实现IStructuredContentProvider(内容与查看器的绑定)和 AddressManagerListener接口(监听模型变化)。

AddressViewContentProvider通过AddressManager获取模型来提供显示

AddressViewContentProvider实现AddressManagerListeneraddressesChanged方法。

LableProvider标签提供者将获取内容提供者返回的一个表格行对象,并提取要显示到的列上的值。

ITableLabelProvider接口要求实现getColumnTextgetColumnImage两个主要的方法,getColumnText返回指定单元格的显示文本,getColumnImage返回指定单元格的显示图标。

根据对表格列的判断来显示相应区域的文本和图像。

public String getColumnText(Object element, int columnIndex),其中element表示单元格所在行的对象,columnIndex表示单元格所在的列,返回显示的文本。

public Image getColumnImage(Object element, int columnIndex),其中element表示单元格所在行的对象,columnIndex表示单元格所在的列,返回此单元格的显示图标。

ViewerSorter查看器排序器用于对内容提供者提供的元素进行排序,继承ViewerSorter类。

一个视图仅可以有一个内容提供者,一个标签提供者和一个排序器,但过滤器可以有很多个。

ViewerFilter类用于确定显示内容提供者返回的哪些行对象,不显示哪些行对象。

 

获取当前选中项,先查找视图,找到该视图后,调用getSelection()得到当前选择项,然后马上转换为IStructuredSelection,以后的操作就是统一的了,因为有IStructuredSelection接口。如果是在action中遇到这种需求,就将event调用getSelection(),然后转换为IStructuredSelection,后续操作相同。

 

Eclipse的每个视图(View)都有自己的菜单和工具条,View通过与自己相关的IViewSite对象与这些东西打交道,确切的说,是通过这个IViewSite对象的IActionBars对象来管理,ActionBars对象负责菜单、工具条和状态栏。

makeActions是创建操作,必要的IAction对象,这些对象可用在菜单、工具条里。

hookContextMenu是把刚刚创建的IAction对象放进与View相关的MenuManager里。

当触发了menu事件时,重新填充(fillContextMenu

setRemoveAllWhenShown(true)的作用是清空以前显示的菜单项。不把removeAllWhenShow置为true的话,每点一下右键你就会看到菜单项多出一倍来。

MenuManager可以创建出一个Menu对象,然后我们用表格的setMenu方法将表格控件与Menu控件联系在一起就好了。

getSite().registerContextMenu(menuMgr, viewer)这是context menu能不能显示的关键。一个视图中可以有多个context menu,而每一个context menu都必须注册给workbench。这需要通过调用org.eclipse.ui.IWorkbenchPartSite.registerContextMenu(MenuManager menuManager, ISelectionProvider selectionProvider)或者(当有多个注册的context menu时)org.eclipse.ui.IWorkbenchPartSite.registerContextMenu(String menuId, MenuManager menuManager, ISelectionProvider selectionProvider) 增加的参数menuId用于区分不同的context menu

上下文菜单比工具栏多一步创建上下文菜单。

 

属性视图支持所有实现IResource接口的资源。

一个视图(View)希望得到另外一个视图显示的内容,或者选择的内容。在Eclipse中,比较标准的做法是通过ISelectionProviderISelectionListener来完成的。

Eclipse为了解决这个问题,提供了所谓的Site,以及ISelectionService机制,来处理视图之间的简单的交互。简单的说,ViewSite提供了一个交互的中心点,其它ViewViewSite提供选择事件,或者向其注册监听器,而事件的触发与转发则由ViewSite()来完成。只需在View中实现ISelectionListener接口,就可以监听其他Workbench部分发生的选择事件。

Workbench注册监听器

getSite().getPage().addSelectionListener(this);

向特定WorkbenchID注册监听器

getSite().getPage().addSelectionListener(String WorkbenchID, ISelectionListener);

并实现selectionChanged方法来处理监听器捕获到的事件。

 

一个ISelectionProvider如果希望被别的View进行监听的话,则应该向其Site()进行注册。

getViewSite().setSelectionProvider(viewer);

IPropertySource的实现类必须为每个显示在属性视图中的项创建一个属性描述符。

ComboBoxPropertyDescriptor可以在属性视图的单元格中显示复选框,但必须为其定义标签提供者和一组String数组为显示内容。getText的参数是getPropertyValue的返回值,这个返回值必须是整数。在ComboBoxPropertyDescriptor中,每个项是按照它们的索引号来区分的。在initProperties中,将类别名用整数表示。

Integer item = (Integer)element;

 

表格查看器添加状态栏支持,则表格查看器添加监听器ISelectionChangedListener


只有注册用户登录后才能发表评论。


网站导航:
 

posts - 37, comments - 5, trackbacks - 0, articles - 0

Copyright © eric_xu