● 代表一个编辑器窗口
● 编辑器扩展点在plugin.xml中的定义
<extension point="org.eclipse.ui.editors"> <editor id="org.eclipse.ui.examples.readmetool.ReadmeEditor" name="%Editors.ReadmeEditor" icon="icons/obj16/editor.png" class="org.eclipse.ui.examples.readmetool.ReadmeEditor" extensions="readme" contributorClass="org.eclipse.ui.examples.readmetool.ReadmeEditorActionBarContributor"></editor> </extension>
● org.eclipse.ui.editors扩展点用来将新的编辑器添加到工作台,编辑器是工作台页面内的可视化组件,它通常用来编辑或浏览文档及输入对象,用户通过将对IFile调用打开,当执行此操作时,将查阅工作台注册表以便为文件类型确定适当的编辑器,然后创建编辑器类型新实例。
● 工作台创建内部编辑器的情况下,可实现工作台窗口与编辑器部件之间的紧密集成,工作台菜单和工具栏预装了许多公共操作(剪切、复制、粘贴),视图或编辑器应会提供这些操作的实现。
● 要实现Eclipse的编辑器,就必须实现EditorPart类的抽象方法
● doSave(IProgressMonitor monitor) 单击保存按钮将调用此方法
● daSaveAs() 单击另存为菜单将调用此方法
● init(IEditorSite site, IEditorInput input) 打开编辑器将调用此方法初始化编辑器
● isDirty() Eclipse调用此方法判断编辑器中的数据是否被修改过
● isSaveAsAllowed() Eclipse调用此方法判断编辑器中的数据是否可以另存为
● createPartControl(Composite parnet) Eclipse通过此方法构建编辑器的组件
● setFocus() 编辑器激活时将调用此方法
● contributeClass负责为编辑器定制工具栏和菜单,contributeClass类继承于MulitPageEditorActionBarContributor
● setActivePage(IEditorPart part) 切换编辑器调用此方法
● contributeToMenu(IMenuManageer manager) 建立编辑器对应菜单项
● contributeToToolBar(IToolBarManager manager) 建立编辑器对应工具栏
● 代表一个视图窗口
● 在Eclipse中,同一时间只能显示一个编辑器,但是能显示多个视图
● 视图扩展点在plugin.xml中的定义
<extension point="org.eclipse.ui.views"> <category name="%view.category" id="com.kenoah.kde.ui"/> <view class="com.kenoah.kde.ui.views.ListTableView" icon="imgs/ListTag.gif" category="com.kenoah.kde.ui" name="%view.listViewer" id="com.kenoah.kde.ui.views.ListTableView"/> <view icon="imgs/DynaTag.gif" class="com.kenoah.kde.ui.views.DynaPartViewer" category="com.kenoah.kde.ui" name="%view.dynPartViewer" id="com.kenoah.kde.ui.views.DynaPartViewer"/> </extension>
● 视图是可以浏览信息层次结构或显示对象属性的工作台部件,在一个工作台页面中,只能打开任何给定的一个实例,当用户在视图总进行选择或其他更改时,这些更改会立即显示在工作工作台。
● 在Eclipse中,用户可以按自己的要求建立自己的视图,即扩展Eclipse的视图扩展点,也能实现Eclipse的接口,通过Eclipse的Adapter机制实现Eclipse的扩展,如Outline和Properties。
● Eclipse的视图功能上来说有两种形式,一种功能性视图,如Java的Default视图,负责用树形目录组织Java的项目结构,另一种视图是辅助性视图,如Console负责控制台信息显示。
● Eclipse中视图实现的功能有如下一些
● 右键菜单:可以通过视图中的树、表弹出的菜单完成相应的功能。
● 工具栏:可以定制视图的工具栏,完成当前视图的功能。
● 表格:视图中可以加入表格以显示相应的表结构信息。
● 树:视图中可以加入树结构以显示相应的树结构信息。
● Log输出:视图中可以直接输出信息。
● Eclipse采用视图分类(category)节点的ID号来组织视图在Show View窗口的显示,当然在视图的扩展点中也可以不实现视图分类节点。
● 当用户选择视图后,Eclipse会自动调用视图节点Class所指向的类(即扩展点实现类)对视图进行初始化。
● 用户定义的视图继承于org.eclipse.ui.part.ViewPart,并实现createPartControl(Compositeparnet)和setFocus()方法。
● 代表一个扩展视角
● 视角直观来讲就是某用户在某一时间能够看到的所有视图和编辑器的集合,视角不包含任何的编辑器和视图实例,只包含这些编辑器和视图的引用。
● 建立自己的视角,在其扩展点上建立perspective节点,并设置相应属性
● id 视角的ID号
● name 视角的名称
● class 视角扩展点的实现类
● icon 视角的图标
● 视角的实现类要求实现IPerspectiveFactory接口,通过createInitialLayout(IPageLayout layout)方法实现视角中视图的布局
● IPageLayou中的addView(String viewId, int relationship, float ratio, String refld)
● viewId 被添加到视角中的视图ID号
● relationship 放在区域的什么位置
● ratio 视图在区域中的百分比
● refld 相关视图的ID号(即和哪一个视图放在同一个区域)
● 为用户提供了把自己的视图放入相应视角的扩展。
● 该扩展点没有实现类,此扩展点只是作为一个描述,告诉Eclipse怎样对相应视角进行布局,此扩展点有几个比较重要的描述信息
● 目标视角的ID号,表示要对哪一个视角的布局进行重定义
● 视图的ID,表示把哪一个视图的引用放入目标视角及指定视图在视角中的布局
● 在扩展点上新建一个perspectiveExtension节点,并指定它的targetID(目标视角ID)。
● 在perspectiveExtension节点下建立一个view节点,并设置view节点相关属性
● id 表示放入目标视角的视图ID号
● relative 相关视图的ID号(即和哪一个视图放在同一区域)
● relationship 放在区域的什么位置
● ratio 视图在区域中的百分比
● visible 如果视图没有被初始化,第一次打开视角是否初始化此视图并显示
● closeable 视图是否可以关闭
● moveable 视图是否可以移动
● standalone 是否是孤立的视图(即视图是否可以和其他视图放在一起)
● showtitle 是否显示标题
● 用户不但可以把视图放到相应的视角,也可以把ActionSet之类的扩展放入相应视角。
● 代表一个扩展命令
● 这里的命令值的是用户可以通过界面产生的命令,但是这里的命令是没有实现的的,如自己写代码实现这里的命令,需要通过org.eclipse.ui.handlers。
● 用户的command主要通过人机界面发出,常用到的控件为菜单、工具条、快捷键等。
● 代表一个扩展菜单
● 上述commands定义一用户的一条指令,如在View上展现一个曲线,但是这个指令怎么发出的,commands这个扩展点并没有说明。
● menus这个扩展点里要定义的,就是用户的commands如何发出的问题。
<extension point="org.eclipse.ui.menus"> <menuContribution locationURI="menu:org.eclipse.ui.examples.contributions.view?after=additions"> <command commandId="org.eclipse.ui.examples.contributions.view.count" mnemonic="%contributions.view.count.mnemonic"/> <command commandId="org.eclipse.ui.examples.contributions.view.edit" mnemonic="%contributions.view.edit.mnemonic"/> <command commandId="org.eclipse.ui.file.refresh" mnemonic="%contributions.view.refresh.mnemonic"/> </menuContribution> </extension>
● 一个menuContribution就定义了一个菜单,command标签定义了菜单对应的命令,通过这些内容就将菜单与命令结合起来,command里的label属性定义了菜单的标签,自然也可以定义图标、菜单的属性。
● locationURI定义了菜单在什么地方显示
● menu:org.eclipse.ui.main.menu?after=window 在主菜单中插入菜单
● menu:file?after=additions 在主菜单中插入菜单
● menu:org.eclipse.ui.views.ContentOutline?after=additions 在View上显示菜单(又叫做快捷菜单)
● toolbar:org.eclipse.ui.views.ContentOutline?after=additions 在View上的工具条位置上显示菜单(实际上是工具按钮)
● popup:org.eclipse.ui.examples.propertysheet.outline?after=additions 在某个View上显示弹出菜单(右键菜单)
● 尽管在界面上放置菜单是不需要写任何代码的,但是对命令的处理时必须要写代码的,这个时候就需要handler扩展了。
<command categoryId="org.eclipse.ui.examples.contributions.commands.category" defaultHandler="org.eclipse.ui.examples.contributions.handlers.GlobalMenuHandler" id="org.eclipse.ui.examples.contributions.commands.globalCommand" name="%contributions.commands.globalCommand.name"/>
或者
<handler class="org.eclipse.ui.examples.contributions.handlers.GlobalMenuHandler" commandId="org.eclipse.ui.examples.contributions.commands.globalCommand"/>
● 无非就是将实现类与command id 关联起来,这个实现类必须要继承AbstractHandler或者实现IHandler接口。
● 需要说明的是,一个命令可以有多个Handler,因为每个Handler有自己的scope(作用域)。
● 通过该扩展点能够建立自己的菜单和工具栏。
● 在该扩展点下添加ActionSet子节点。
● 在ActionSet节点下添加menu和action子节点。
● menu节点代表Eclipse的菜单项,menu节点的属性设置
● id 表示menu的编号
● label 表示在菜单中显示名称
● action节点代表菜单项或工具栏中按钮的相应动作,action节点的属性设置
● id 代表Action的唯一编号
● label Action的名称
● menuBarPath 表示Action对应菜单的路径
● toolbarPath 表示Action对应工具栏按钮的路径
● icon 表示Action对应的图标
● tooltip Action的提示信息
● class 指定Action的实现类
● actionSets的实现类要求实现IWorkbenchWindowActionDelegate接口,其中run(IAction action)方法为用户单击菜单或工具栏按钮时的响应方法
● nature为用户添加项目的特有特性
● 设置该扩展点的id,并添加runtime子节点,在runtime子节点下添加run节点,并设置其实现类
● 该扩展点的实现类要求实现IProjectNature接口及完成部分方法
● setProject(IProject project) 在nature类中保存当前项目
● getProject() 从nature中得到当前项目
● configure() 当nature被添加到项目中时,通过configure方法配置当前项目
● deconfigure() 当nature从项目删除时,通过deconfigure方法删除相应配置
● 通过该扩展点能够实现项目的增量构建和完全构建
● 设置该扩展插件id,并添加builder子节点,在builder子节点下添加run节点,并设置其实现类
● 该扩展点的实现类继承于IncrememtalProjectBuilder类,并实现了两个资源监听器,当项目中资源发生变化的时候调用构建
● 通过该扩展点能够实现Eclipse中的向导方式建立项目资源
● 在该扩展点添加category子节点,并设置id和name属性
● 在该扩展点添加wizard子节点,并设置id属性和实现类
●该扩展点的实现类要求继承Wizard类和实现INewWizard接口,通过其addPages方法添加向导页到当前向导,通过performFinish方法完成向导的结束
● 通过该扩展点实现项目参数的配置
● 在该扩展点添加page子节点,并设置id和name属性及实现类
●该扩展点实现类要求继承PreferencePage类和实现IWorkbenchPreferencePage接口,通过createContents方法构建自己的属性页,通过performOk方法完成向导的结束
● 通过该扩展点注册想要在启动时激活的插件
● 在该扩展点添加startup子节点,并设置其实现类
● 该扩展点实现类要求实现IStartup接口,一旦启动工作台,就会从独立线程中调用earlyStartup()方法,如果startup元素具有class属性,则将把该类实例化并调用earlyStartup()方法
● 如果未指定startup扩展点的实现类,则默认用插件类作为实现类,但不需要指定扩展点的class值,否则插入类被实例化两次
● 通过该扩展点为给定类型的对象添加其他属性页面,一旦定义了这些属性页面,它们就会出现在该类型对象的属性对话框中
● 在该扩展点添加page子节点,并设置相关属性和实现类
● 该扩展点实现类要求继承PropertyPage类,通过createContents(Composite parent)方法构建属性页