【原创】开发视图插件(十六)
上一篇 / 下一篇 2008-07-04 12:50:38 / 个人分类:Eclipse插件开发
+RG2xa"s s0视图是工作台页面内的可视组件,通常用来浏览信息的层次结构(如工作空间)、打开编辑器或显示活动编辑器的属性。用户可以通过“Window”→“Show view”菜单显示视图,也可以从视图局部标题栏关闭视图。
ITPUB个人空间OQu\r_#fZ
视图分类
I,V-DD;o$x@0在Eclipse中用户可以在同一时间打开多个视图(编辑器在同一时间只能打开一个),每个视图能够有自己的位置布局信息,Eclipse会根据上一次视图布局的信息初始化视图。ITPUB个人空间nK8s[x(T
Eclipse视图一般来说有两种表现形式,一种是用户通过视图扩展点“org.eclipse.ui.views”实现自定义的视图,另一种是实现Eclipse中视图提供的扩展,用户可以通过实现Eclipse的相应接口实现,如Outline视图和Properties视图,如图1所示。
g0sF'_[?,p1JB0
5TbPT jE]l7Z0图1 Eclipse视图
在Eclipse中,用户可以按自己的要求建立自己的视图,即扩展Eclipse的视图扩展点。也能实现Eclipse的接口,通过Eclipse的Adapter机制实现Eclipse的扩展。其中,Outline和Properties视图也是通过这种方式实现的,在后面的章节会介绍Outline视图和Properties视图的实现。ITPUB个人空间+P7Zu{#W:C
当用户定义了自己的视图后能通过“Window”→“Show view”菜单打开自定义的视图。如图2所示。
b
mz h1|1WG-N
\&F0
4rW(B"U0Kg/G0图2 选择视图
/EVk+ah)Rg0常用视图可实现的功能
"E`RrWk]!Na9k0Eclipse的视图就功能来说一般有两种形式,一种是功能性视图,例如Java的Default视图,default负责用树形目录组织Java的项目结构,并且能通过双击节点在编辑器中打开相应的资源。另一种视图是辅助型的视图,例如Console负责控制台信息的显示。
;g8R0]'C;u:p4k0不管是哪种类型的视图,它们的实现原理是一样的。在Eclipse中视图可以实现的功能有如下一些。
d g_A'M0 右键菜单:可以通过视图中的树、表弹出的菜单完成相应的功能。
ee$fCg#I+{a0 工具栏:可以定制视图的工具栏,完成当前视图的功能。ITPUB个人空间^z.a%VCC
表格:视图中可以加入表格以显示相应的表结构信息。
Wv+e)k.jE gf
p0 树:视图中可以加入树结构以显示相应的树结构信息。ITPUB个人空间Jm b`O%o2F
Log 输出:视图中可以直接输出信息。
:`-E1EIoW [i.ER0这些只是一般在Eclipse中可以看到的实现,用户可以把视图当做操作Eclipse接口。
6vb4UU
^i0提示:任何SWT的组件都可以作为视图的一部分,用户可以按自己的需求定制自己的视图。
;} |/k(O*|TU0创建“Tree viewer”视图
ITPUB个人空间 ^k!cd4lk5[P"h
创建“Tree viewer”视图插件项目,步骤如下:
;SV;we:x@C/x01. 打开新建向导。
!G&a6E^6ep4Iz0单击Eclipse的“File”→“New”→“Other”菜单项,在弹出的对话框中选择Select对话框左边的 Plug-in Development 向导。
{zoG-_h
TGp02. 建立一个空的插件项目。
CuK@S%d e[8f0 输入插件工程的名字为“com.free.view. treeview”。ITPUB个人空间o4n8Kde3pa
输入插件的ID为“com.free.view.treeview”。
LGQS"\[L*Z)O
\0 输入插件的Name为“helloworld Plug-in”。ITPUB个人空间;Ij2K]HkUK{ p
选择使用模板建立插件项目,如图3所示。ITPUB个人空间N)X%O@m&oZTjZ4H
单击“Next”按钮,选择“Tree viewer”选项。ITPUB个人空间g1^/l&B6sLBt
单击“Finish”按钮,完成项目的建立。
Z,w7EH/|0
5kV3i Y
S$U
L)A7x yQT0图3 选择插件模板对话框
&xV
Fd ZQ#YY6a2Z0通过这种方式建立了一个包含JFace的“Tree viewer”组件的插件项目,此项目已经具备了视图插件常用的功能。
b ip._N"Y;^2X0视图扩展点
j7p^B|#h8Vy0通过插件模板创建了“Tree viewer”视图插件,此插件只实现了一个视图分类节点和视图节点。如例程1所示。
s Cs6kl:S1g,zKn0例程1 plugin.xml
o7OC9V*h5_7o0<plugin>ITPUB个人空间Tz6U{C4mo
a|U7[oE\{Fp,c%M0<extension
7|9j`9A%v$Py0point="org.eclipse.ui.views">
X`im7efm0<categoryITPUB个人空间D,^] J)P#e Y9h"d:m
name="tree view"ITPUB个人空间)zd
h
PP
^iSo
id="com.free.view.categoryall">
&}Z6]?o WVs0</category>
y5F!q'j~x%z0<viewITPUB个人空间&wV s
~9?2y:lwE
name="Tree View"
^0{!i3t"s
b5D0icon="icons/tree.GIF"ITPUB个人空间
k-J+B+pK;E
E_3p
category="com.free.view.categoryall"
2Jae,LWW0class="com.free.view.treeview.views.TreeViewTest"
T*l
r1gy.Eq/j7X6K@0id="com.free.view.treeview.views.TreeViewTest">ITPUB个人空间6A4X6V|1Z
</view>ITPUB个人空间7wJB8eR}hh
</extension>
H-y
q5M/[*w0
Ssc,Z-Q0</plugin>ITPUB个人空间j/R7R(Y5Tf
“plugin.xml”实现了视图的扩展点“org.eclipse.ui.views”,Eclipse会根据扩展点的信息展现视图。
ITPUB个人空间C]P1Wfa:U
视图扩展点的实现类
ITPUB个人空间M,^7g1LX
在“Tree viewer”视图中要完成的功能有:树、菜单、工具栏和事件响应事件。“Tree viewer”视图的实现类为“TreeViewTest”,通过实现类能实现这些功能。
3C|;pM1x0^y0实现类中要完成如下的功能。
0d*s!QR7M01. 初始化树。ITPUB个人空间M?F%j}1Y:`
~AR!R
2. 完成菜单和工具栏响应的Action。
FV$@Q(Y*}p0K1n?7N03. 完成上下文菜单。
"\(Eo4CctJ]04. 完成工具栏。ITPUB个人空间8f\u2S5AT]
5. 完成双击树节点的响应方式。ITPUB个人空间m`K!H\q4W
在createPartControl方法中能对视图进行初始化,代码片段如下。ITPUB个人空间n$W&~hN7v
public void createPartControl(Composite parent) {ITPUB个人空间q!{2V Gv&s^dd
//初始化树
MZr
Ebd0viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);ITPUB个人空间0X-BGX,I*c!|jG:y*~
drillDownAdapter = new DrillDownAdapter(viewer);ITPUB个人空间.uf E)hC+kmJ$b Y+Z
viewer.setContentProvider(new ViewContentProvider());
-_h~ZAH2F0viewer.setLabelProvider(new ViewLabelProvider());ITPUB个人空间0u
Y
[nou{
viewer.setSorter(new NameSorter());ITPUB个人空间i0QQ`DCI!\*V0O
viewer.setInput(getViewSite());
^${]U_1N0//完成菜单和工具栏响应的Action
0wv&{L
K
V"z0makeActions();
@TBpu B`:t0//完成上下文菜单
&vnp.r\*BF0hookContextMenu();
YR.M,U-HuI KK0//完成双击树节点的响应方式
+?"K_,P-i-z0hookDoubleClickAction();ITPUB个人空间N)H3K
u"m#B#SU
//完成工具栏ITPUB个人空间w|*d3FeG7a
contributeToActionBars();
l2F;[9qw/ldC0}ITPUB个人空间9L;J)P%Qb-FE
通过实现类,用户能加入自己感兴趣的功能。“Tree viewer”视图中实现类的完整代码如例程2所示。ITPUB个人空间'_s.?-X,{
例程2 TreeViewTest.javaITPUB个人空间3o&u"SfW`C'[
public class TreeViewTest extends ViewPart {ITPUB个人空间SluD
@}Jf
x Aw
private TreeViewer viewer;ITPUB个人空间B(k"?)tS+R8g
private DrillDownAdapter drillDownAdapter;
#s$Bdn&?(X_~d0private Action action1;
1let&l*yzG9H4rBS|!w0private Action action2;ITPUB个人空间1A2a?p~B8W
private Action doubleClickAction;ITPUB个人空间GZ&k6_'M&k$C
//创建树节点ITPUB个人空间$G|-I Y4^G
class TreeObject implements IAdaptable {ITPUB个人空间T
qT]u2i"Y
private String name;
K@&q"FCsv]0private TreeParent parent;
4`g'v5L&h


