Eclipse RCP之perspective



在RCP中,view是张贴于perspective之上的。传统的方式是直接在perspective的createInitialLayout方法中按照类似如下的方式添加view并设置布局: 

Java代码  收藏代码
  1. public void createInitialLayout(IPageLayout layout) {  
  2.      String editorArea = layout.getEditorArea();  
  3.     layout.setEditorAreaVisible(false);   
  4.     layout.addView(SelectedPsrInfoView.ID, IPageLayout.LEFT,    IPageLayout.RATIO_MAX, IPageLayout.ID_EDITOR_AREA);  
  5. }  

但是,这样的配置把view就写死在了该perspective上了。我们可以通过perspectiveExtensions扩展点来进行配置。 
假设现在我又两个view 分别是: 
com.client.cki.selectedPsrInfoView和 
com.client.cki.selectedFltInfoView 
那么,如何将这两个view通过perspectiveExtensions的方式配置到指定的某个perspective上呢?看看下面这段plugin.xml的配置文件: 
Xml代码  收藏代码
  1.   <extension  
  2.          point="org.eclipse.ui.perspectiveExtensions">  
  3.       <perspectiveExtension  
  4.             targetID="com.client.cki.perspective">  
  5. <!-- 指定两个view要张贴在那个perspective之上,用ID标识该perspective-->  
  6.          <view  
  7.                closeable="false"  
  8.                id="com.client.cki.selectedPsrInfoView"  
  9.                minimized="false"  
  10.                moveable="false"  
  11.                ratio="0.5f"  
  12.                relationship="top"  
  13.                relative="org.eclipse.ui.editorss"  
  14.                showTitle="true"  
  15.                standalone="false"  
  16.                visible="true">  
  17.          </view>  
  18. <!--   
  19. 注意:该段注释不要拷贝到配置文件中  
  20. 第一个view: com.client.cki.selectedPsrInfoView  
  21. closeable="false"表明该view无关闭按钮。  
  22. id="com.client.cki.selectedPsrInfoView"指定view的id  
  23. minimized="false"表明初始时不是最小化状态  
  24. moveable="false"表明在运行中该view不可拖动  
  25. ratio="1f"表明其所占的比例 1f表明占据整个参照空间  
  26. relationship="top"表明位于参照的上方  
  27. relative="org.eclipse.ui.editorss"其参照对象。第一个张贴于perspective上的view其参照对象就是这个。  
  28. 后面几项就不解释了 一看都懂。  
  29. -->  
  30.          <view  
  31.                closeable="false"  
  32.                id="com.client.cki.selectedFltInfoView"  
  33.                minimized="false"  
  34.                moveable="false"  
  35.                relationship="stack"  
  36.                relative="com.client.cki.selectedPsrInfoView"  
  37.                showTitle="true"  
  38.                standalone="false"  
  39.                visible="true">  
  40.          </view>  
  41. <!--   
  42. 注意:该段注释不要拷贝到配置文件中  
  43. 第二个view: com.client.cki.selectedFltInfoView  
  44. closeable="false"表明该view无关闭按钮。  
  45. id="com.client.cki.selectedPsrInfoView"指定view的id  
  46. minimized="false"表明初始时不是最小化状态  
  47. moveable="false"表明在运行中该view不可拖动  
  48. relationship="stack"表明其位置与参照对象在同一个topfolder里面  
  49. 其他参数:left:在参照对象的左边  
  50. right:参照对象的右边  
  51. top:上边  
  52. bottom:下边  
  53. relative="com.client.cki.selectedPsrInfoView"其参照对象。表明该view的参照对象是前一个view  
  54. -->  
  55.       </perspectiveExtension>  
  56.    </extension>  


将该段代码拷贝至plugin.xml中,就可以完成配置了。 
此时,perspective中就的createInitialLayout方法就非常简单了,基本上什么都不用写。 
Java代码  收藏代码
  1. public void createInitialLayout(IPageLayout layout) {  
  2.     layout.setEditorAreaVisible(false);  
  3. }  

是不是很简单呢?运行一下,看一下效果吧,perspective中有两个view,两个view在一个tabfolder中,其中前一个是selectedPsrInfoView后一个是selectedFltInfoView。 

当然,所有的这些配置都可以在eclipse中plugin.xml的图形化界面完成。看完了这个配置文件,我相信图形化界面大家都会做了。 

希望对没有采用perspectiveExtensions配置过的人能有所帮助。





二、如何关闭perspective
关闭当前perspective,并打开一个新的perspective:

IWorkbench w=PlatformUI.getWorkbench();

ActionFactory.IWorkbenchAction closePerspectiveAction
= ActionFactory.CLOSE_PERSPECTIVE.create(w.getActiveWorkbenchWindow());
closePerspectiveAction.run();

try {
PlatformUI.getWorkbench().showPerspective(
"com.ibm.demo.saic.ui.views.NextPerspective", w.getActiveWorkbenchWindow());
}
 catch (WorkbenchException e) {
e.printStackTrace();
}
上面是调用的系统的action,具体实现如下:
IWorkbench w=PlatformUI.getWorkbench();
IPerspectiveRegistry pr
=w.getPerspectiveRegistry() ;
IPerspectiveDescriptor persdes
=pr.findPerspectiveWithId("perspectiveID");

WorkbenchPage p
=(WorkbenchPage)w.getActiveWorkbenchWindow().getActivePage();
Perspective persp 
= p.getActivePerspective();
p.closePerspective(persdes,
false,false);

try {
w.showPerspective(
"nextperspectiveID", w.getActiveWorkbenchWindow());
}
 catch (WorkbenchException e) {
e.printStackTrace();
}




RCP控制View 特性配置(如移动、最大化、最小化、关闭等)

1、我们可以添加org.eclipse.ui.perspectiveExtensions扩展点,类似的还可以控制View的移动、最大化最小化等

<extension
         point="org.eclipse.ui.perspectiveExtensions">
      <perspectiveExtension
            targetID="*">
         <view
               closeable="false" //控制视图不被关闭

               allowMultiple="true"   // 是否可以打开多个
               id="com.test.StartView"
               minimized="false"

               moveable="false"
               relationship="stack"
               relative="org.eclipse.ui.views.TaskList">
         </view>
      </perspectiveExtension>
   </extension>

 

2、视图设置

IViewLayoutviewLayout= layout.getViewLayout(View1.ID);

viewLayout.setMoveable(false);  // 固定视图位置

 

viewLayout.setCloseable(false); // 视图关闭按钮是否可以见

window.getActivePage().showView(View1.ID, var, IWorkbenchPage.VIEW_VISIBLE); // 打开视图

 

3、Folder视图

IFolderLayoutfolder= layout.createFolder("demoViews", IPageLayout.TOP,0.5f, layout.getEditorArea());

folder.addPlaceholder("DemoViews.view1"); //在 Folder只出现一次

folder.addPlaceholder("DemoViews.view1:*");

 

4、设置视图标题 Bar

setPartName()

setTitleTooltip()

setTitleImage()

setContentDescription()


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章