|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
C#是盗用了Java的源代码,仿照开发的,原因是Java是开源的啊,盗了也白盗,还有一点,开发C#语言的团队是就是开发Java语言的团队,是微软重金挖过去的啊扩大(Extension)是Eclipse中一个关头的机制,plug-in使用扩大向Eclipse平台增加新功效。可是扩大不克不及随便地创立,必需依照扩大点(extensionpoint)界说的标准举行明白的声明,Eclipse才干认出这些扩大。我们不但可使用Eclipse供应的浩瀚现成的扩大点,并且还能够界说新的扩大点,并在该扩大点长进行扩大。
固然,扩大点的界说对照庞大。不外Eclipse为用户供应了图形化的编纂界面,我们只需输出一些信息,Eclipse就会主动天生代码,使扩大点的界说变得十分复杂。
上面我们就来看看怎样在Eclipse中创立一个新的扩大点,并在这个扩大点长进行扩大。
我们必要做以下的事情:
1.计划该扩大点
2.界说扩大点,即编写扩大点的清单文件
3.编写代码来载进该扩大点的扩大
我们以创立workList扩大点为例,举行具体先容。
worklist完成的功效是:创立一个view,在个中以树状显现体系中可用的功效模块,经由过程双击某个模块节点,实行该扩大界说的办法(method)。实在相称于一个把持台,经由过程把持台来运转分歧的功效。
因为Eclipse是由一个运转时中心(runtimecore)和浩瀚插件构成的,我们也将workList扩大点界说在一个插件中,有关workList的代码文件也放在这个插件中,如许便于查找和修正,也不影响Eclipse自己的代码。
1.界说扩大点
起首我们要创立一个寄存新扩大点信息的插件net.softapp.worklist,这个插件对org.eclipse.ui.views举行扩大,以下是插件的plugin.xml文件在views扩大点的信息:
<extension
point="org.eclipse.ui.views">
<category
name="WorkListCategory"
id="WorkListCategory"/>
<view
icon="icons/sample.gif"
class="net.softapp.internal.worklist.WorkListView"
category="WorkListCategory"
name="WorkList视图"
id="net.softapp.internal.worklist.WorkListView"/>
</extension>
如许就能够经由过程“window->showview->other”,在弹出的“Showview”对话框当选择“WorkList视图”,翻开视图,我们用这个视图显现workList扩大点的一切扩大信息。“ShowView”对话框显现了Eclipse中界说一切视图,即一切org.eclipse.views扩大点的扩大。懂得这一点很主要,由于我们在编写workList扩大点代码时,就能够仿照乃至拷贝views扩大点的代码。
上面,我们要在net.softapp.worklist插件中界说workList扩大点。
扩大点的界说文件依照Eclipse的寄存体例,一样平常寄存在schema目次下,我们把文件定名为worklist.exsd。内容以下,此内容由PDE天生:
<?xmlversion=1.0encoding=UTF-8?>
<!--SchemafilewrittenbyPDE-->
<schematargetNamespace="mtn.esip.worklist">
<annotation>
<appInfo>
<meta.schemaplugin="net.softapp.worklist"id="workList"name="workList"/>
<!--经由过程这个界说,我们能够看出,界说的扩大点的id是net.softapp.worklist.workList,今后援用时要注重,同时注重巨细写-->
</appInfo>
<documentation>
[Enterdescriptionofthisextensionpoint.]
</documentation>
</annotation>
<elementname="extension">
<complexType>
<choiceminOccurs="0"maxOccurs="unbounded">
<elementref="category"minOccurs="0"maxOccurs="1"/>
<elementref="worklist"minOccurs="0"maxOccurs="1"/>
</choice>
<attributename="point"type="string"use="required"><!--界说point-->
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
<attributename="id"type="string"><!--界说id-->
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
<attributename="name"type="string"><!--界说name-->
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
</complexType>
</element>
<!--界说category-->
<elementname="category">
<complexType>
<attributename="name"type="string"><!--界说category/name-->
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
<attributename="id"type="string"><!--界说category/id。援用category时,必需指出使用的id,而name给出了一个可供显现的直不雅的名字-->
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
<attributename="parentCategory"type="string"><!--界说父category,也就是说我们的category能够嵌套构成树状布局-->
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
</complexType>
</element>
<!--界说worklist,注重巨细写-->
<elementname="worklist">
<complexType>
<attributename="name"type="string"><!--界说worklist/name,可供显现的直不雅的名字-->
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
<attributename="icon"type="string"><!--界说worklist/icon,可供显现的直不雅的图标-->
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
<attributename="category"type="string">!--界说worklist/category,寄存的category地位。假如援用嵌套情势的category,则接纳parent_id/child_id的情势-->
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
<attributename="class"type="string"><!--界说worklist/class,完成功效的类称号-->
<annotation>
<documentation>
</documentation>
<appInfo>
<meta.attributekind="java"/>
</appInfo>
</annotation>
</attribute>
<attributename="id"type="string"use="required"><!--界说worklist/id,独一标记-->
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
</complexType>
</element>
<!--以下内容为PDE主动天生,与我们的编程有关-->
<annotation>
<appInfo>
<meta.sectiontype="since"/>
</appInfo>
<documentation>
[Enterthefirstreleaseinwhichthisextensionpointappears.]
</documentation>
</annotation>
<annotation>
<appInfo>
<meta.sectiontype="examples"/>
</appInfo>
<documentation>
[Enterextensionpointusageexamplehere.]
</documentation>
</annotation>
<annotation>
<appInfo>
<meta.sectiontype="apiInfo"/>
</appInfo>
<documentation>
[EnterAPIinformationhere.]
</documentation>
</annotation>
<annotation>
<appInfo>
<meta.sectiontype="implementation"/>
</appInfo>
<documentation>
[Enterinformationaboutsuppliedimplementationofthisextensionpoint.]
</documentation>
</annotation>
<annotation>
<appInfo>
<meta.sectiontype="copyright"/>
</appInfo>
<documentation>
</documentation>
</annotation>
</schema>
如许我们就界说好了扩大的属性。
然后在plugin.xml到场:
<extension-pointid="workList"name="workList"schema="schema/workList.exsd"/>
就界说好了!
2.完成扩大
界说完扩大以后,接上去要编写剖析此扩大的相干代码。可喜的是,Eclipse为我们供应了大批的API能够挪用,省下了多少代码的编写。别的我们还能够自创Eclipse完成的其他代码,经由过程仿照来编写我们本人的剖析代码。本例参考了View的剖析部分。同View,我们界说了WorkListDescriptor,WorkListRegistry,WorkListRegistryReader.个中WorkListDescriptor完成对上述界说的剖析,WorkListRegistry寄存了其他插件对workList扩大的相干信息,WorkListRegistryReader则从WorkListRegistry读失信息供我们利用。
此处代码从略,详细请参考View完成部分的ViewDescriptor,ViewRegistry,ViewRegistryReader相干代码。
3.编写界脸部分
依据1对View的扩大,我们必要编写界脸部分。此处请参考View插件的编写。我们在此对WorkListPlugin增加了一个办法用以从注册表中读取扩大信息:
publicIWorkListRegistrygetWorkListRegistry(){
if(workListRegistry==null){
workListRegistry=newWorkListRegistry();
try{
WorkListRegistryReaderreader=newWorkListRegistryReader();
reader.readWorkList(Platform.getExtensionRegistry(),workListRegistry);
}catch(CoreExceptione){
//cannotsafelyshowadialogsologit
WorkbenchPlugin.log("UnabletoreadworkListregistry.",e.getStatus());//$NON-NLS-1$
}
}
returnworkListRegistry;
}
个中WorkListRegistryReader.readWorkList界说以下:
/**
*ReadtheworkListextensionswithinaregistry.
*/
publicvoidreadWorkList(IExtensionRegistryin,WorkListRegistryout)
throwsCoreException{
//thisdoesnotseemtoreallyeverbethrowingantheexception
workListRegistry=out;
readRegistry(in,WorkListPlugin.getDefault().getPluginId(),"workList");
out.mapWorkListToCategories();
}
可见,我们不必要编写庞大的代码就能够读取注册表中寄存的扩大信息!
我们对workList扩大的显现是接纳了TreeView,代码以下(WorkListView):
protectedTreeViewercreateViewer(Compositeparent){
TreeViewerviewer=
newTreeViewer(parent,SWT.MULTI|SWT.H_SCROLL|SWT.V_SCROLL);
viewer.setUseHashlookup(true);
viewer.setContentProvider(newWorkListContentProvider());
viewer.setLabelProvider(newWorkListLabelProvider());
workListReg=WorkListPlugin.getDefault().getWorkListRegistry();
viewer.setInput(workListReg);
initListeners(viewer);
returnviewer;
}
如许,就能够完成显现了。
那末,如何完成选择某个扩大后,经由过程双击实行其功效呢?我们对TreeViewer增加了鼠标双击事务撑持,关头代码以下:
protectedvoidhandleDoubleClick(DoubleClickEventevent){
IStructuredSelectionselection=(IStructuredSelection)event.getSelection();
Objectelement=selection.getFirstElement();
TreeViewerviewer=getWorkListViewer();
if(viewer.isExpandable(element)){
viewer.setExpandedState(element,!viewer.getExpandedState(element));
}else{
WorkListDescriptorworkList=(WorkListDescriptor)element;
try{
IWorkListPartworkListPart=(IWorkListPart)workList.createWorkList();
workListPart.run();
}catch(CoreExceptione){
//shouldaddsomethingtohandletheexception
}
}
}
个中IWorkListPart很复杂,使一切完成workList扩大必需完成的接口:
publicinterfaceIWorkListPart{
publicvoidrun();
}
只要一个run办法(能够自行增加其他的撑持)。
个中WorkListDescriptor.createWorkList办法完成依据class的字符串创立一个对象,也是超等复杂,由于Eclipse已为我们编好了:
publicObjectcreateWorkList()throwsCoreException{
Objectobj=WorkbenchPlugin.createExtension(configElement,"class");
returnobj;
}
如许就能够实行扩大的功效了。
可是别忘了,还要编写pluin.xml,不然Eclipse可不认吆:
<extension
point="net.softapp.worklist.workList">
<category
name="HelloTest"
id="HelloTest"/>
<worklist
icon="icons/example.ico"
class="net.softapp.internal.worklist.Hello"
category="HelloTest"
name="Hello"
id="net.softapp.internal.worklist.Hello"/>
</extension>
4.测试新扩大点
OK,入手下手运转Eclipse的plugin调试情况,翻开WorkList视图,看看在树状列内外是否是有一个HelloTest目次,上面有Hello。双击它,你编写的代码出来了吧!
你精通任何一门语言就最强大。现在来看,java的市场比C#大,C#容易入手,比较简单,java比较难 |
|