在RCP中,view是張貼於perspective之上的。傳統的方式是直接在perspective的createInitialLayout方法中按照類似如下的方式添加view並設置佈局:
- public void createInitialLayout(IPageLayout layout) {
- String editorArea = layout.getEditorArea();
- layout.setEditorAreaVisible(false);
- layout.addView(SelectedPsrInfoView.ID, IPageLayout.LEFT, IPageLayout.RATIO_MAX, IPageLayout.ID_EDITOR_AREA);
- }
但是,這樣的配置把view就寫死在了該perspective上了。我們可以通過perspectiveExtensions擴展點來進行配置。
假設現在我又兩個view 分別是:
com.client.cki.selectedPsrInfoView和
com.client.cki.selectedFltInfoView
那麼,如何將這兩個view通過perspectiveExtensions的方式配置到指定的某個perspective上呢?看看下面這段plugin.xml的配置文件:
- <extension
- point="org.eclipse.ui.perspectiveExtensions">
- <perspectiveExtension
- targetID="com.client.cki.perspective">
- <!-- 指定兩個view要張貼在那個perspective之上,用ID標識該perspective-->
- <view
- closeable="false"
- id="com.client.cki.selectedPsrInfoView"
- minimized="false"
- moveable="false"
- ratio="0.5f"
- relationship="top"
- relative="org.eclipse.ui.editorss"
- showTitle="true"
- standalone="false"
- visible="true">
- </view>
- <!--
- 注意:該段註釋不要拷貝到配置文件中
- 第一個view: com.client.cki.selectedPsrInfoView
- closeable="false"表明該view無關閉按鈕。
- id="com.client.cki.selectedPsrInfoView"指定view的id
- minimized="false"表明初始時不是最小化狀態
- moveable="false"表明在運行中該view不可拖動
- ratio="1f"表明其所佔的比例 1f表明佔據整個參照空間
- relationship="top"表明位於參照的上方
- relative="org.eclipse.ui.editorss"其參照對象。第一個張貼於perspective上的view其參照對象就是這個。
- 後面幾項就不解釋了 一看都懂。
- -->
- <view
- closeable="false"
- id="com.client.cki.selectedFltInfoView"
- minimized="false"
- moveable="false"
- relationship="stack"
- relative="com.client.cki.selectedPsrInfoView"
- showTitle="true"
- standalone="false"
- visible="true">
- </view>
- <!--
- 注意:該段註釋不要拷貝到配置文件中
- 第二個view: com.client.cki.selectedFltInfoView
- closeable="false"表明該view無關閉按鈕。
- id="com.client.cki.selectedPsrInfoView"指定view的id
- minimized="false"表明初始時不是最小化狀態
- moveable="false"表明在運行中該view不可拖動
- relationship="stack"表明其位置與參照對象在同一個topfolder裏面
- 其他參數:left:在參照對象的左邊
- right:參照對象的右邊
- top:上邊
- bottom:下邊
- relative="com.client.cki.selectedPsrInfoView"其參照對象。表明該view的參照對象是前一個view
- -->
- </perspectiveExtension>
- </extension>
將該段代碼拷貝至plugin.xml中,就可以完成配置了。
此時,perspective中就的createInitialLayout方法就非常簡單了,基本上什麼都不用寫。
- public void createInitialLayout(IPageLayout layout) {
- layout.setEditorAreaVisible(false);
- }
是不是很簡單呢?運行一下,看一下效果吧,perspective中有兩個view,兩個view在一個tabfolder中,其中前一個是selectedPsrInfoView後一個是selectedFltInfoView。
當然,所有的這些配置都可以在eclipse中plugin.xml的圖形化界面完成。看完了這個配置文件,我相信圖形化界面大家都會做了。
希望對沒有采用perspectiveExtensions配置過的人能有所幫助。
二、如何關閉perspective
關閉當前perspective,並打開一個新的perspective:
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();
}
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()