工作台窗口的Editor区域默认是显示的,而且它支持拖拽操作。在Eclipse里面,把一个文件拖到Editor区域,就会自动打开该文件的Editor。该特性是在IWorkbenchWindowConfigurer 中设置。
在Password Gate中,当拖动Password Gate View中的一个Group 或者 Service到Editor区域,会在Editor显示该项的属性。
要实现此特性,有四部分是必须的。
1 实现必要的Transfer类型,而且定义Editor要支持哪些类型。在Password Gate中,Transfer是LocalSelectionTransfer。Transfer用来进行数据的序列化,它可以支持在同一个程序,或不同程序间拖拽。
2 因为在拖拽传递的过程中Editor Input 要实现序列化,所以要实现IPersistableElement接口。
3 加入一个释放适配器,当一个元素被扔到Editor区域,它可以知道如何进行操作,其实就是打开该元素的Editor。
4 使Password View能够进行拖操作,它要提供供拖的元素。
下面进行代码实现。
在RCP的WorkbenchWindowAdvisor. preWindowOpen中定义要求Editor Area支持的拖入对象的类型,以及打开相应Editor的事件。
ApplicationWorkbenchWindowAdvisor.preWindowOpen()
<!--CTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dt--><style type="text/css">
<!--code { font-family: Courier New, Courier; font-size: 10pt; margin: 0px; }-->
</style>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<!-- ======================================================== --><!-- = Java Sourcecode to HTML automatically converted code = --><!-- = Java2Html Converter 5.0 [2006-02-26] by Markus Gebhard markus@jave.de = --><!-- = Further information: http://www.java2html.de = -->
<!-- start source code -->
01publicvoidpreWindowOpen(){ 02 ...... 03configurer.addEditorAreaTransfer(LocalSelectionTransfer.getInstance()); 04configurer.configureEditorAreaDropListener(newEditorAreaDropAdapter( 05configurer.getWindow())); 06} |
<!-- end source code -->
Row 03å®ä¹äºEditor Areaæ¯æçTransfer为LocalSelectionTransfer, LocalSelectionTransfer为èªå·±å®ç°çä¼ è¾ä»è´¨ç±»ãRow 04å®ä¹äºå¯¹æå
¥Editor Areaç对象çå¤çæ¹æ³ãEditorAreaDropAdapterå®ç°äºDropTargetListeneræ¥å£ï¼ç¨æ¥çå¬Editor Areaä¸çDropäºä»¶ï¼å®ä¼æå¼æå
¥Editor Areaç对象æ对åºçEditorï¼å¦æåæ¶æå
¥å¤ä¸ªå¯¹è±¡ï¼å®ä¼æå¼æ¯ä¸ªå¯¹è±¡å¯¹åºçEditor.
<!--CTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dt--><style type="text/css">
<!--code { font-family: Courier New, Courier; font-size: 10pt; margin: 0px; }-->
</style>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<!-- ======================================================== --><!-- = Java Sourcecode to HTML automatically converted code = --><!-- = Java2Html Converter 5.0 [2006-02-26] by Markus Gebhard markus@jave.de = --><!-- = Further information: http://www.java2html.de = -->
<!-- start headline -->
EditorAreaDropAdapter.java |
<!-- end headline --><!-- start source code -->
01publicclassEditorAreaDropAdapterextendsDropTargetAdapter{ 02privateIWorkbenchWindowwindow; 03 04publicEditorAreaDropAdapter(IWorkbenchWindowwindow){ 05this.window=window; 06} 07 08publicvoiddragEnter(DropTargetEventevent){ 09//alwaysindicateacopy 10event.detail=DND.DROP_COPY; 11} 12 13publicvoiddragOperationChanged(DropTargetEventevent){ 14//alwaysindicateacopy 15event.detail=DND.DROP_COPY; 16} 17 18publicvoiddrop(finalDropTargetEventevent){ 19Displayd=window.getShell().getDisplay(); 20finalIWorkbenchPagepage=window.getActivePage(); 21if(page!=null){ 22d.asyncExec(newRunnable(){ 23publicvoidrun(){ 24asyncDrop(event,page); 25} 26}); 27} 28} 29 30privatevoidasyncDrop(DropTargetEventevent,IWorkbenchPagepage){ 31if(LocalSelectionTransfer.getInstance().isSupportedType( 32event.currentDataType)){ 33StructuredSelectionselection=(StructuredSelection)event.data; 34for(Iteratoriter=selection.iterator();iter.hasNext();){ 35Objecto=iter.next(); 36if(oinstanceofRecord){ 37IEditorInputinput=newRecordEditorInput((Record)o); 38try{ 39page.openEditor(input,RecordEditor.ID); 40}catch(Exceptione){ 41PwdgatePlugin.log("openediotrRecordEditor",e); 42} 43}elseif(oinstanceofGroup){ 44IEditorInputinput=newGroupEditorInput((Group)o); 45try{ 46page.openEditor(input,GroupEditor.ID); 47}catch(PartInitExceptione){ 48PwdgatePlugin.log("openediotrGroupEditor",e); 49} 50} 51} 52} 53} 54} |
<!-- end source code -->
Row 18ï¼ç¨æ¥å¤çDropäºä»¶ï¼Row 30çasyncDrop()æ¹æ³ç¨æ¥ææ¥ç¸åºå¯¹è±¡çEditor.
ç°å¨Editor Areaå·²ç»å¯ä»¥æ¥æ¶æå
¥å¯¹è±¡äºãä¸ä¸æ¥è¦ä½¿ä¸ä¸ªViewæ¯ææåºå¯¹è±¡çåè½ãä¸é¢çä¾åæ¯å¨Pass Gate Viewä¸çcreatePartControl()æ¹æ³ä¸ä¸ºä¸ä¸ªTreeVieweræ·»å æåºåè½ã
<!--CTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dt--><style type="text/css">
<!--code { font-family: Courier New, Courier; font-size: 10pt; margin: 0px; }-->
</style>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<!-- ======================================================== --><!-- = Java Sourcecode to HTML automatically converted code = --><!-- = Java2Html Converter 5.0 [2006-02-26] by Markus Gebhard markus@jave.de = --><!-- = Further information: http://www.java2html.de = -->
<!-- start headline -->
PassGateView.java |
<!-- end headline --><!-- start source code -->
01privatevoidinitDragAndDrop(){ 02Transfer[]transfer=newTransfer[]{LocalSelectionTransfer 03.getInstance()}; 04LocalSelectionDragAdapteradapter=newLocalSelectionDragAdapter( 05viewer); 06viewer.addDragSupport(DND.DROP_MOVE|DND.DROP_COPY,transfer,adapter); 07 08LocalSelectionDropAdapterdropAdapter=newLocalSelectionDropAdapter( 09viewer); 10viewer.addDropSupport(DND.DROP_MOVE|DND.DROP_COPY,transfer, 11dropAdapter); 12} |
<!-- end source code -->
Row 06 为TreeVieweræ·»å äºçå¬æå¨çäºä»¶ï¼å½å¨TreeViewerä¸ææå¨æ¶ï¼LocalSelectionDragAdapterææå¨ç对象æ¾å
¥LocalSelectionTransferä¸ï¼éè¿å
¶ä¼ å° Editor Areaä¸ã
<!--CTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dt--><style type="text/css">
<!--code { font-family: Courier New, Courier; font-size: 10pt; margin: 0px; }-->
</style>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<!-- ======================================================== --><!-- = Java Sourcecode to HTML automatically converted code = --><!-- = Java2Html Converter 5.0 [2006-02-26] by Markus Gebhard markus@jave.de = --><!-- = Further information: http://www.java2html.de = -->
<!-- start headline -->
LocalSelectionDragAdapter.java |
<!-- end headline --><!-- start source code -->
01publicclassLocalSelectionDragAdapterextendsDragSourceAdapter{ 02 03ISelectionProviderselectionProvider; 04 05publicLocalSelectionDragAdapter(ISelectionProviderprovider){ 06selectionProvider=provider; 07} 08 09publicvoiddragFinished(DragSourceEventevent){ 10//TODOAuto-generatedmethodstub 11super.dragFinished(event); 12System.out 13.println("DragSourceListener.dragFinished(DragSourceEventevent)"); 14} 15 16publicvoiddragSetData(DragSourceEventevent){ 17System.out 18.println("DragSourceListener.dragSetData(DragSourceEventevent)"); 19DragSourcedragSource=(DragSource)event.widget; 20Controlcontrol=dragSource.getControl(); 21if(control!=control.getDisplay().getFocusControl()){ 22event.doit=false; 23return; 24} 25 26IStructuredSelectionselection=(IStructuredSelection)selectionProvider 27.getSelection(); 28 29if(selection.isEmpty()){ 30event.doit=false; 31return; 32} 33LocalSelectionTransfer.getInstance().setSelection(selection); 34event.doit=true; 35} 36 37publicvoiddragStart(DragSourceEventevent){ 38System.out 39.println("DragSourceListener.dragStart(DragSourceEventevent)"); 40} 41} |
<!-- end source code -->
<!-- = END of automatically generated HTML code = --><!-- ======================================================== --> Row 33 ï¼å°æå¨ç对象æ¾å
¥LocalSelectionTransferä¸ãRow 44 设置æå¨ææï¼è®¾ä¸ºfalseçè¯ï¼æå¨æ æãä¸é¢æ¯LocalSelectionTransferçå®ç°ãå¾å®¹æç解ã
<!--CTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dt--><style type="text/css">
<!--code { font-family: Courier New, Courier; font-size: 10pt; margin: 0px; }-->
</style>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<!-- ======================================================== --><!-- = Java Sourcecode to HTML automatically converted code = --><!-- = Java2Html Converter 5.0 [2006-02-26] by Markus Gebhard markus@jave.de = --><!-- = Further information: http://www.java2html.de = -->
<!-- start headline -->
LocalSelectionTransfer.java |
<!-- end headline --><!-- start source code -->
001publicclassLocalSelectionTransferextendsByteArrayTransfer{ 002 003privatestaticfinalStringTYPE_NAME="local-selection-transfer-format"+(newLong(System.currentTimeMillis())).toString();//$NON-NLS-1$; 004 005privatestaticfinalintTYPEID=registerType(TYPE_NAME); 006 007privatestaticfinalLocalSelectionTransferINSTANCE=newLocalSelectionTransfer(); 008 009privateISelectionselection; 010 011privatelongselectionSetTime; 012 013/** 014*Onlythesingletoninstanceofthisclassmaybeused. 015*/ 016privateLocalSelectionTransfer(){ 017} 018 019/** 020*Returnsthesingleton. 021* 022*@returnLocalSelectionTransfer 023*/ 024publicstaticLocalSelectionTransfergetInstance(){ 025returnINSTANCE; 026} 027 028/** 029*Returnsthelocaltransferdata. 030* 031*@returnthelocaltransferdata 032*/ 033publicISelectiongetSelection(){ 034returnselection; 035} 036 037/** 038*Testswhethernativedropdatamatchesthistransfertype. 039* 040*@paramresult 041*resultofconvertingthenativedropdatatoJava 042*@returntrueifthenativedropdatadoesnotmatchthistransfertype. 043*falseotherwise. 044*/ 045privatebooleanisInvalidNativeType(Objectresult){ 046return!(resultinstanceofbyte[]) 047||!TYPE_NAME.equals(newString((byte[])result)); 048} 049 050/** 051*Returnsthetypeidusedtoidentifythistransfer. 052* 053*@returnthetypeidusedtoidentifythistransfer. 054*/ 055protectedint[]getTypeIds(){ 056returnnewint[]{TYPEID}; 057} 058 059/** 060*Returnsthetypenameusedtoidentifythistransfer. 061* 062*@returnthetypenameusedtoidentifythistransfer. 063*/ 064protectedString[]getTypeNames(){ 065returnnewString[]{TYPE_NAME}; 066} 067 068/** 069*Overridesorg.eclipse.swt.dnd.ByteArrayTransfer#javaToNative(Object, 070*TransferData).Onlyencodethetransfertypenamesincetheselectionis 071*readandwritteninthesameprocess. 072* 073*@seeorg.eclipse.swt.dnd.ByteArrayTransfer#javaToNative(java.lang.Object, 074*org.eclipse.swt.dnd.TransferData) 075*/ 076publicvoidjavaToNative(Objectobject,TransferDatatransferData){ 077byte[]check=TYPE_NAME.getBytes(); 078super.javaToNative(check,transferData); 079} 080 081/** 082*Overrides 083*org.eclipse.swt.dnd.ByteArrayTransfer#nativeToJava(TransferData).Testif 084*thenativedropdatamatchesthistransfertype. 085* 086*@seeorg.eclipse.swt.dnd.ByteArrayTransfer#nativeToJava(TransferData) 087*/ 088publicObjectnativeToJava(TransferDatatransferData){ 089Objectresult=super.nativeToJava(transferData); 090if(isInvalidNativeType(result)){ 091PwdgatePlugin.log("invalidnattivetype",newException( 092"invalidnattivetype")); 093} 094returnselection; 095} 096 097/** 098*Setsthetransferdataforlocaluse. 099* 100*@params 101*thetransferdata 102*/ 103publicvoidsetSelection(ISelections){ 104selection=s; 105} 106 107/** 108*Returnsthetimewhentheselectionoperationthistransferisassociated 109*withwasstarted. 110* 111*@returnthetimewhentheselectionoperationhasstarted 112* 113*@seeorg.eclipse.swt.events.TypedEvent#time 114*/ 115publiclonggetSelectionSetTime(){ 116returnselectionSetTime; 117} 118 119/** 120*Setsthetimewhentheselectionoperationthistransferisassociated 121*withwasstarted.IfassigningthisfromanSWTevent,besuretouse 122*<code>setSelectionTime(event.time&0xFFFF)</code> 123* 124*@paramtime 125*thetimewhentheselectionoperationwasstarted 126* 127*@seeorg.eclipse.swt.events.TypedEvent#time 128*/ 129publicvoidsetSelectionSetTime(longtime){ 130selectionSetTime=time; 131} 132} |
<!-- end source code -->
å
¶å®ä¸å
æ¯æå°Area Editorï¼ä»¥ä¸ä¾åç¨å æ¹é ï¼ä¹å¯ä»¥å®ç°æå°å«çæ§ä»¶ä¸ï¼ä»»ä½Controlé½å¯ä»¥æ·»å ææ½åè½ï¼ä¾å¦å¯ä»¥ä»ä¸ä¸ªè¡¨æ ¼æå°å¦ä¸ä¸ªè¡¨æ ¼ä¸ï¼ææå°ä¸ä¸ªé¢æ¿ä¸ãææ½åè½è®©è½¯ä»¶çå¯ç¨æ§åæé«äºä¸ä¸ªæ¡£æ¬¡ã
分享到:
相关推荐
在Eclipse IDE中,当我们打开一个文件进行编辑时,就是在使用EDITOR。EDITOR提供了丰富的功能,如撤销/重做、查找替换、格式化等,以支持高效的编辑操作。 RCP中,VIEWER和EDITOR可以通过Part和Composite设计模式...
这个类会实现打开、保存、关闭编辑器等基本操作,并定义编辑器的UI视图。 2. **编辑器输入**:编辑器需要处理的输入通常由`IEditorInput`接口表示。这可以是文件、数据库记录或其他任何数据源。在项目代码中,你...
本示例是一个Eclipse RCP的实战演示,展示了如何在Eclipse RCP应用中实现View和Editor,以及可能涉及图表的展示。 在Eclipse RCP中,View和Editor是两种主要的用户界面组件。View通常用于显示辅助信息或工具,而...
RCP允许开发者专注于业务逻辑的实现,而不必过于关注用户界面的设计,因为RCP已经提供了一系列预定义的界面元素,如菜单、工具栏、视图(View)和编辑器(Editor)。 **1. 菜单栏(Menu Bar)和工具栏(Tool Bar)*...
本项目"rcp editor实例的项目代码2"是针对Eclipse插件开发的一个实战案例,旨在帮助开发者了解和掌握如何在Eclipse RCP环境中实现自定义编辑器。 首先,我们需要理解Eclipse插件开发的基本概念。Eclipse是一个开放...
在实现中,你需要根据实际的模型数据来提供属性的描述符、值和设置逻辑。 3. **注册适配器**:在RCP应用中,适配器不能自动工作,需要通过适配器工厂(AdapterFactory)进行注册。你需要在插件的元数据文件(plugin...
在这个实例中,我们将深入探讨如何在RCP环境中实现一个基本的文本编辑器,帮助初学者更好地理解这一过程。 首先,我们需要了解Eclipse RCP的基本结构。RCP应用通常由多个插件组成,每个插件都有特定的功能。在这个...
然而,在实际开发中,我们经常需要使用第三方包来实现某些功能,这篇文章将介绍如何在Eclipse RCP中使用第三方包。 首先,我们需要新建一个Eclipse RCP应用程序,然后创建一个lib目录作为存放第三方库的目录。在这...
在“RCP中文入门教程.pdf”中,你可能会学习到如何创建一个新的RCP项目,编写插件,定义扩展点,创建视图和编辑器,以及如何管理和配置用户的首选项。教程还可能涵盖如何调试和打包RCP应用,以及如何利用Eclipse的...
在本文中,我们将深入探讨如何在Eclipse Rich Client Platform (RCP)应用程序中集成和显示JFreeChart报表。JFreeChart是一个强大的Java库,用于创建各种图表类型,如折线图、柱状图、饼图等,而RCP是Eclipse框架的一...
在Java RCP中使用JNI,主要是为了访问特定于平台的功能,提升性能,或者调用已有的本地库。 1. **JNI简介** JNI是一种接口,允许Java代码与其他语言编写的代码进行通信。它定义了一套规范,使得Java虚拟机(JVM)...
在Eclipse RCP环境中,为了实现IoC而不改动其基础结构,可以使用动态字节码操作(如ObjectWeb ASM库)、Java类加载器代理和Java注解技术。这样可以在不影响平台其他部分的情况下,透明地添加IoC框架。 在具体应用中...
本文将深入探讨如何在基于Eclipse RCP(Rich Client Platform)的应用中,利用适配器模式实现自定义的属性视图。Eclipse RCP是一个强大的框架,用于构建桌面应用程序,而属性视图则是展示对象属性的一种可视化组件。...
本教程将深入探讨如何在Eclipse RCP程序中实现ViewPart的占位功能,这对于构建具有多视图的工作环境至关重要。 首先,我们需要理解ViewPart的基本概念。在Eclipse RCP中,ViewPart是用户界面中的一个组件,它通常...
在IT行业中,RCP(Rich Client Platform)是Eclipse框架提供的一种用于构建桌面应用程序的平台。它允许开发者基于已有的框架构建复杂、可扩展的应用,而无需从零开始编写所有基础架构。本篇文章将深入探讨如何在RCP...
在RCP应用中,业务逻辑通常由命令(Command)和控制器(Handler)实现。命令定义了用户可以执行的操作,而控制器则负责执行这些操作。在`plugin.xml`中定义命令,并创建对应的控制器类。 7. **事件监听与通信** ...
在RCP中,OSGI作为底层的模块化框架,为RCP提供了动态加载和管理插件的能力。开发者可以通过创建OSGI Bundle来构建RCP插件,这些插件可以在运行时被RCP框架动态加载和卸载。这种结合使得RCP应用具备了高度的灵活性和...
eclipse使用内部浏览器加载echarts,过程中可能存在鼠标移动事件不响应,这个是eclipse浏览器中与echarts.js内兼容问题,该问题可通过修改echarts.js解决,如果找不到可以私信我