Perspective 透视图
如何主动切换到插件所需要的Perspetive?
场景是这样的: 如果用户打开某一类后缀文件如.abc,假设该类文件对应的插件被加载,其相应的Editor会被启动来加载文件。此时我们需要Eclipse跳出窗口询问用户是否切换的该插件所属的Pespective。
实现过程:
Step 1: 我们需要到PartService上去注册一个PartListener来收听Editor Part活动的事件,每当.abc的Editor被打开的时候,自动有窗口会被切换
在Activator.java中加入下面的代码
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
public void run() {
PlatformUI.getWorkbench().getActiveWorkbenchWindow()
.getPartService()
.addPartListener(new EditorOpenedListener(PLUGIN_NAME,
Perspective.ID, Editor.ID));
}
});
}
Step 2: 下面要实现EditorOpenedListener类,实作了IPartListener2接口,在partOpend()方法中加入Editor被打开时去负责打开询问窗口
public class EditorOpenedListener implements IPartListener2 {
public void partOpened(IWorkbenchPartReference partRef) {
try {
if (editorID.equals(partRef.getId())) {
IWorkbenchWindow window = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow();
if (window != null && window.getActivePage() != null) {
if (!perspectiveID.equals(window.getActivePage()
.getPerspective().getId())) {
String title = "Sample window";
String message = "Do you want to switch to "
+ pluginName + "?";
String toggleMessage = "Use this as the default and do not ask again";
boolean toggleState = false;
IPreferenceStore store = PlatformUI
.getPreferenceStore();
String value = store
.getString(PreferenceConstants.KEY_AUTO_SWITCH_PERSPECTIVE);
if (MessageDialogWithToggle.ALWAYS.equals(value)) {
PlatformUI.getWorkbench()
.showPerspective(perspectiveID, window);
} else if (MessageDialogWithToggle.NEVER.equals(value)) {
return;
} else {
MessageDialogWithToggle dialog = MessageDialogWithToggle
.openYesNoCancelQuestion(window.getShell(),
title,
message,
toggleMessage,
toggleState,
store,
PreferenceConstants.KEY_AUTO_SWITCH_PERSPECTIVE);
int returnCode = dialog.getReturnCode();
if (returnCode == IDialogConstants.YES_ID) {
PlatformUI.getWorkbench()
.showPerspective(perspectiveID, window);
}
}
}
}
}
} catch (WorkbenchException e) {
// Ignore
}
}
}