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()


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