<o:p> </o:p>
一.Perspective 和View<o:p></o:p>
在开始进入新的一课之前,我们先来回顾一下上一章的内容。在上一章,我们创建了一个HelloWorld插件,在这个插件里添加了一个Action,并在一个HelloAction 里实现了具体的操作。这个例子扩展了一个扩展点:org.eclipse.ui.actionSets,然后又创建了一个对应的类,让这个action被点击的时候,弹出一个消息框。对于我们使用的这第一个扩展点,我们即没有详细说明actionSets扩展点的配置过程,也没有仔细看对应类的实现。而下面,我们将给予更多的注意。
在本章,我们将接触到另外3个扩展点,它们是:org.eclipse.ui.perspectives ,org.eclipse.ui.views 和org.eclipse.ui.perspectiveExtensions 。Eclipse 平台、JDT及PDE总计约提供了近200个扩展点。随着各种各样的插件开发,你的系统中可用的扩展点会更多。学会怎样去学习比学会一些基本的扩展点更重要。
<o:p> </o:p>
<o:p> </o:p>
在上一章中,我们已经看到了perspective和view(不记得了,那回头看看吧)。View是我们最常使用的东西,它可以用于显示各种信息或输入等。而perspective则是容纳View和Editor的容器。在一个perspective里,可以容纳多个ViewPart和一个EditorPart.注意这里是ViewPart和EditorPart,而不是View和Editor。在一个perspective里,只能有一个地方显示Editor,那就是下面红框位置,而其他的 View的位置,都是相对editor来确定的。<o:p></o:p>
<v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="WIDTH: 415.5pt; HEIGHT: 272.25pt" type="#_x0000_t75"><v:imagedata src="file:///C:\DOCUME~1\QIHONG~1\LOCALS~1\Temp\msohtml1\01\clip_image001.png" o:title=""></v:imagedata></v:shape><o:p></o:p>
<o:p> </o:p>
2.1 定义透视图<o:p></o:p>
下面我们来定义我们的第一透视图:<o:p></o:p>
1.打开我们前面创建的HelloWorld项目,双击plugin.xml文件。<o:p></o:p>
2.打开Extensions(扩展),点击”Add”,选择:org.eclipse.ui.perspectives,确定<o:p></o:p>
3.选择刚添加的org.eclipse.ui.perspectives,点击鼠标右键,选择newàperspective<o:p></o:p>
4. 在Detail中,在id中输入:HelloWorld.MyPerspective ,在name中输入 MyPerspective,如下:<o:p></o:p>
<v:shape id="_x0000_i1026" style="WIDTH: 415.5pt; HEIGHT: 219pt" type="#_x0000_t75"><v:imagedata src="file:///C:\DOCUME~1\QIHONG~1\LOCALS~1\Temp\msohtml1\01\clip_image003.png" o:title=""></v:imagedata></v:shape><o:p></o:p>
5.点击Class连接,输入类名:MyPerspective,点击“Finish”,如下:<o:p></o:p>
<v:shape id="_x0000_i1027" style="WIDTH: 371.25pt; HEIGHT: 444pt" type="#_x0000_t75"><v:imagedata src="file:///C:\DOCUME~1\QIHONG~1\LOCALS~1\Temp\msohtml1\01\clip_image005.png" o:title=""></v:imagedata></v:shape><o:p></o:p>
你可以已经注意到了,系统自动添加了一个接口:IPerspectiveFactory。这是透视图所需要要实现的接口。在扩展其他扩展点时,我们也将发现,很多有对应实现类的扩展点,都定义了所需要要实现的接口或者父类。那么怎么知道这些信息呢,当然是help.我们来打开help看一下这个扩展点的具体信息。打开帮助,打开Platform plug-in Developer GuideàReferenceàExtension Points Referenceàorg.eclipse.ui.perspectives:<o:p></o:p>
Configuration Markup 说明了每一项的用法<o:p></o:p>
API Information 说明了对应类所应实现的接口或者父类。<o:p></o:p>
<o:p> </o:p>
4. 保存Plugin.xml文件和新建的MyPerspective.java文件。<o:p></o:p>
5. 运行插件。在打开的运行时工作台中,选择:WindowàOpen PerspectiveàOther.. ,在打开的对话框中,可以看到我们刚才创建的MyPerspective。点击打开,我们的第一个没有任何内容的透视图就出现了:<o:p></o:p>
<v:shape id="_x0000_i1028" style="WIDTH: 415.5pt; HEIGHT: 297.75pt" type="#_x0000_t75"><v:imagedata src="file:///C:\DOCUME~1\QIHONG~1\LOCALS~1\Temp\msohtml1\01\clip_image007.png" o:title=""></v:imagedata></v:shape><o:p></o:p>
<o:p> </o:p>
2.2 定义view<o:p></o:p>
透视图定义完了,可是里面还没有东西,现在我们需要向里面添加东西了。而在添加之前,我们先定义几个我们自己的view,以便添加到透视图中。<o:p></o:p>
1. 打开 plugin.xml文件,点击extensions(扩展)页,点击”Add..”,选择 org.eclipse.ui.views,确定。在右边Detail中,输入ID值为:HelloWorld.views<o:p></o:p>
<v:shape id="_x0000_i1029" style="WIDTH: 415.5pt; HEIGHT: 219pt" type="#_x0000_t75"><v:imagedata src="file:///C:\DOCUME~1\QIHONG~1\LOCALS~1\Temp\msohtml1\01\clip_image009.png" o:title=""></v:imagedata></v:shape><o:p></o:p>
2. 选中org.eclipse.ui.views,点击鼠标右键,选择NewàView,在Detail里修改id值为:HelloWorld.LeftView,name 值为:LeftView,<o:p></o:p>
<v:shape id="_x0000_i1042" style="WIDTH: 415.5pt; HEIGHT: 219pt" type="#_x0000_t75"><v:imagedata src="file:///C:\DOCUME~1\QIHONG~1\LOCALS~1\Temp\msohtml1\01\clip_image011.png" o:title=""></v:imagedata></v:shape><o:p></o:p>
<o:p> </o:p>
3. 点击Class连接,在弹出的对话框中输入类名:LeftView,然后点击“Finish”系统将创建一个扩展了ViewPart 的类:LeftView.在这个类中,有一个方法:public void createPartControl(Composite parent) {},这个方法就是用来创建view中内容的。现在我们来添加些简单的组件<o:p></o:p>
4. 添加代码,让它成为如下的样子:<o:p></o:p>
public void createPartControl(Composite parent) {<o:p></o:p>
parent.setLayout(new GridLayout());<o:p></o:p>
Label l_title=new Label(parent,SWT.NONE);<o:p></o:p>
l_title.setText("This is my first view.");<o:p></o:p>
<o:p></o:p>
}<o:p></o:p>
输入完成,按Ctrl+shift+o (字母o,不是零哦),先后然后选择Import: org.eclipse.swt.widget.Label,org.eclipse.swt.layout.GridLayout 类。保存文件。<o:p></o:p>
5. 先来看看我们的成果吧,运行起来看看。在运行时工作台中,选择 windowàshow viewàOther,在这里可以看到我们刚才创建的LeftView:<o:p></o:p>
<v:shape id="_x0000_i1041" style="WIDTH: 207pt; HEIGHT: 295.5pt" type="#_x0000_t75"><v:imagedata src="file:///C:\DOCUME~1\QIHONG~1\LOCALS~1\Temp\msohtml1\01\clip_image013.png" o:title=""></v:imagedata></v:shape><o:p></o:p>
打开,即可看到我们的LeftView:<o:p></o:p>
<v:shape id="_x0000_i1043" style="WIDTH: 415.5pt; HEIGHT: 297.75pt" type="#_x0000_t75"><v:imagedata src="file:///C:\DOCUME~1\QIHONG~1\LOCALS~1\Temp\msohtml1\01\clip_image015.png" o:title=""></v:imagedata></v:shape><o:p></o:p>
OK,恭喜,第一个view已经出现了,很容易是不是?<o:p></o:p>
Eclipse提供了很多扩展点,在刚才查看org.eclipse.ui.perspectives扩展点的时候我想你已经看到了,我们已经见过三个扩展点,每一个都很简单,不是吗?以后,在我们使用新的扩展点时,会更多的关注帮助中对扩展点的描述。<o:p></o:p>
2.3 控制透视图中的Parts.<o:p></o:p>
一个空空的透视图是没有意义的,下面该是我们来为刚才创建的透视图添加内容的时候了。<o:p></o:p>
<o:p> </o:p>
下面是一个Eclipse提供的透视图:<o:p></o:p>
<v:shape id="_x0000_i1030" style="WIDTH: 414.75pt; HEIGHT: 302.25pt" type="#_x0000_t75"><v:imagedata src="file:///C:\DOCUME~1\QIHONG~1\LOCALS~1\Temp\msohtml1\01\clip_image017.png" o:title=""></v:imagedata></v:shape><o:p></o:p>
<o:p> </o:p>
下面,我们来把刚才创建的透视图布置成类似的样子,只不过,我们把左下角的view替换成我们的LeftView。来看看要怎么做吧。首先,来分析一下透视图中都显现些什么,左上角,是Package Explorer 视图,左下角,我们将显示我们的LeftView,右上部是Editor,右下部是Problem视图。对于我们的LeftView很好处理,它就是我们自己定义的,而Editor呢,在点击Package Explorer时即可显示,似乎也比较好办,那么,对于另外两个试图,他们是Eclipse里面早已有的,怎么把他们加到我们的透视图中呢?